powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Переключение между несколькими DYNAMIC SET при расчетах
8 сообщений из 8, страница 1 из 1
Переключение между несколькими DYNAMIC SET при расчетах
    #39984275
iliko67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Необходимо определять какая иерархия календаря выбрана в Excel и в зависимости от нее изменять расчет

Есть DYNAMIC SET
Код: sql
1.
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[DatesSelected] AS EXISTING [Календарь].[Год-Месяц-Дата].[Дата];  



Далее идет расчет среднего за период от меры вычисленной по Distinct Count
Код: sql
1.
[Measures].[Количество магазинов__] 


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Avg(
Intersect
(
Descendants([Календарь].[Год-Месяц-Дата].CurrentMember, [Календарь].[Год-Месяц-Дата].[Дата])
 ,
{HEAD([DatesSelected],1).Item(0) : TAIL([DatesSelected],1).Item(0)}
) 
,Measures.[Количество среднее] / [Measures].[Количество магазинов__]
)



Для периодов день, год, месяц все считается нормально
Если пользователи выбирают иерархию [Год-Неделя-Дата] понятно, что не работает
Подскажите как можно определять какая иерархия выбрана в Excel чтобы переключить на другой расчет
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39984285
iliko67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно похожая реализация расчета средних
изложена здесь
https://habr.com/ru/post/328688/

Но не понимаю как не по уровню смотреть, а определить что выбрана другая иерархия измерения

Мне лично понравились слова автора статьи
авторкогда видел требования по расчету средних значений, мне хотелось смеяться и плакать одновременно

Примерно у меня такие же реакции
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39984502
iliko67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решено
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[DatesSelected]   AS EXISTING [Календарь].[Год-Месяц-Дата].[Дата];  
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[WeekSelected]    AS EXISTING [Календарь].[Год-Неделя-Дата].[Дата];  
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[QuarterSelected] AS EXISTING [Календарь].[Год-Квартал-Месяц-Дата].[Дата];  

CREATE MEMBER CURRENTCUBE.[Measures].[CL]
as 
case
when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Дата] then 1
when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Дата] then 1
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Дата] then 1

when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Неделя] then 2 

when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Месяц] then 3
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Месяц] then 3

when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Квартал] then 4

when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Год] then 5
when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Год] then 5
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Год] then 5
     
else 0       

end,
VISIBLE = 1;



Конечно громоздкое решение - но работающее
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39984772
Voyager_lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iliko67,
Решение точно не для Excel. Вы нее забывайте, что можно отдельно выбрать год, неделю и день в атрибутах. Если уж обрабатывать, то все случаи. :)
п.с. для [Measures].[CL] Делайте Scope и iif вместо case
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39984915
iliko67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voyager_lan
iliko67,
Вы не забывайте, что можно отдельно выбрать год, неделю и день в атрибутах. Если уж обрабатывать, то все случаи. :)


Когда моим пользователям понадобился расчет средних по дням запретил использовать атрибуты .....

Т.е задача примерно стояла так. [Количество среднее на 1 торговую точку]
1.Считаем количество (сумму) на каждый день делим на количество магазинов (Distinct Count) с остатком в этот день (если нет остатка но есть продажа берем количество магазинов продававших товар)
2.Затем считается среднее за период по вычисленным значениям из 1 пункта

Voyager_lan
iliko67,
п.с. для [Measures].[CL] Делайте Scope и iif вместо case


А примерчик можно
Не совсем хороший специалист в MDX , обычно маленький куб за 1-2 мес и потом работа с 1С 2-3 года (и соответственно поддержка OLAP в минимальном режиме)

Первый раз очень большой проект на 2Тб куб (6 млрд записей в таблице остатков)
Насколько я понимаю SCOPE может тормозить на таких объемах
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39986074
Voyager_lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iliko67,

Попробуйте так.
Если связи м-у атрибутами правильные в календаре, то , по идее, сл. код в сценарии куба даст ожидаемый результат:
CREATE MEMBER CURRENTCUBE.[Measures].[CL]
as
NULL ,
VISIBLE = 1;


([Measures].[CL],[Календарь].[Дата].[Дата].Members) = 1; // даты
([Measures].[CL],[Календарь].[Неделя].[Неделя].Members) = 2; // уникальные недели по годам
([Measures].[CL],[Календарь].[Месяц].[Месяц].Members) = 3; // уникальные месяцы по годам
([Measures].[CL],[Календарь].[Квартал].[Квартал].Members) = 4; // уникальные кварталы по годам
([Measures].[CL],[Календарь].[Год].[Год].Members) = 5; // годы

вместо 0 будет null


Вы количество магазинов на 6мрд считаете мерой с аггрегацией Distinct Count , а не вычислением (calculated member)?
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #39986594
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iliko67
Решено
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[DatesSelected]   AS EXISTING [Календарь].[Год-Месяц-Дата].[Дата];  
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[WeekSelected]    AS EXISTING [Календарь].[Год-Неделя-Дата].[Дата];  
CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[QuarterSelected] AS EXISTING [Календарь].[Год-Квартал-Месяц-Дата].[Дата];  

CREATE MEMBER CURRENTCUBE.[Measures].[CL]
as 
case
when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Дата] then 1
when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Дата] then 1
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Дата] then 1

when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Неделя] then 2 

when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Месяц] then 3
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Месяц] then 3

when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Квартал] then 4

when [Календарь].[Год-Неделя-Дата].CurrentMember.level is [Календарь].[Год-Неделя-Дата].[Год] then 5
when [Календарь].[Год-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Месяц-Дата].[Год] then 5
when [Календарь].[Год-Квартал-Месяц-Дата].CurrentMember.level is [Календарь].[Год-Квартал-Месяц-Дата].[Год] then 5
     
else 0       

end,
VISIBLE = 1;



Конечно громоздкое решение - но работающее


Если вы собираетесь вставлять это в куб в качестве вычисления, то используйте SCOPE. Через LEVEL медленнее.
...
Рейтинг: 0 / 0
Переключение между несколькими DYNAMIC SET при расчетах
    #40044265
iliko67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу открыть новую тему .... в топике работа

в 2 словах открыта вакансия мне в помошь

https://nn.hh.ru/vacancy/42193342
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Переключение между несколькими DYNAMIC SET при расчетах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]