powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX калькуляха среднее
5 сообщений из 5, страница 1 из 1
MDX калькуляха среднее
    #39715066
Nurgl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Редко тут пишу, т.к. во всем сам разбираюсь, а сегодня встрял на элементарной вещи.

Есть такая калькуляха считает средние отгрузки за год. CurrentMember выбран год.
avg(DESCENDANTS([Дата].[Дата].CurrentMember, [Дата].[Дата].[Месяц]), [Measures].[Отгрузки шт])
по сути считает среднее арифметическое по месяцам в разрезе года.
Но она не совсем верная, т.к. с точки зрения бизнес логики надо считать среднее по закрытый месяц. Т.е. надо использовать что-то вроде LAG или PrevMember, но в DESCENDANTS это не работает в данном разрезе....

Вопрос как сместить период на -1 месяц (на -1 мембер)
...
Рейтинг: 0 / 0
MDX калькуляха среднее
    #39715073
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NurglРедко тут пишу, т.к. во всем сам разбираюсь, а сегодня встрял на элементарной вещи.

Есть такая калькуляха считает средние отгрузки за год. CurrentMember выбран год.
avg(DESCENDANTS([Дата].[Дата].CurrentMember, [Дата].[Дата].[Месяц]), [Measures].[Отгрузки шт])
по сути считает среднее арифметическое по месяцам в разрезе года.
Но она не совсем верная, т.к. с точки зрения бизнес логики надо считать среднее по закрытый месяц. Т.е. надо использовать что-то вроде LAG или PrevMember, но в DESCENDANTS это не работает в данном разрезе....

Вопрос как сместить период на -1 месяц (на -1 мембер)
А потом будет еще вот какая проблема. Вы развернете копию OLAP базы, чтобы работать с ней как со срезом. Но вот эти "закрытые" месяцы будут смещаться.
Вывод - сделать группу мер со счетчиком "Счетчик закрытых месяцев", суммирование строк с 1, привязка к "Дата"."Месяц" неключевому атрибуту.

Сделать набор выбранных месяцев как DynamicMonthsSet as existing [Дата].[Месяц].[Месяц];
А формулу "Средние отгрузки шт" считать как AVG(existing [DynamicMonthsSet], iif(Measures.[Счетчик закрытых месяцев] = 1, [Measures].[Отгрузки шт], null) )

На уровень года останутся только его месяцы, из них будут выбраны закрытые. Группу мер при пересчете ежедневно обновлять, создайте view, куда формулой прописывайте 1 для нужных месяцев. Как только копия OLAP базы разворачивается для архивной работы - перестаете пересчитывать закрытые месяцы.

И вот эти закрытые с точки зрения бизнеса месяцы всегда используйте из одного места и из одного dynamic set набора.
...
Рейтинг: 0 / 0
MDX калькуляха среднее
    #39715183
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nurgl,

вариантов решения множество, так что зависит от вкусов реализации алгоритма (и рекомендаций производительности).
а так-же логики определения закрытости месяца
(например последний/текущий из now() и после скорее всего всегда не закрыт, даже для завтра,
т.к. данных обычно пока нет чтобы его закрыть, в т.с. можно дополнительную проверку вставить в ветвь решения)
в общем случае если контекст ячейки устанавливается на гранулярности дня то
1) от дня переходим к месяцу через .parent
2) месяц сдвигаем через .prevmember или .lag(1) или .lead(-1)
3) потом от полученного месяца и получаем descendants(..,,leaves) или .children
например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with member[Measures].[_x1]as[Date].[Calendar].parent.prevmember.member_name
member[Measures].[_x2]as[Date].[Calendar].parent.prevmember.children.count
member[Measures].[_x3]as sum([Date].[Calendar].parent.prevmember.children,[Measures].[Internet Order Quantity])
member[Measures].[_x4]as([Date].[Calendar].parent.prevmember,[Measures].[Internet Order Quantity])
member[Measures].[_x5]as([Date].[Calendar].parent,[Measures].[Internet Order Quantity])
select{[Measures].[_x1],[Measures].[_x2],[Measures].[_x3],[Measures].[_x4],[Measures].[_x5]}on 0 
,{[Date].[Calendar].[Date].&[20130129],[Date].[Calendar].[Date].&[20130202],[Date].[Calendar].[Date].&[20130305]}
on 1from[Adventure Works]
...
Рейтинг: 0 / 0
MDX калькуляха среднее
    #39715613
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nurgl,

проще будет порекомендовать пользователям самим снимать галку с незакрытого месяца

у вас сейчас незакрытый месяц с точки зрения одного заказчика (пусть это подрезделение "склад"),
потом будет незакрытый месяц с точки зрения бухгалтерии,
потом у третьего подразделения будет свой незакрытый месяц,

и все они будут разными...
...
Рейтинг: 0 / 0
MDX калькуляха среднее
    #39715746
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритикNurgl,

проще будет порекомендовать пользователям самим снимать галку с незакрытого месяца

у вас сейчас незакрытый месяц с точки зрения одного заказчика (пусть это подрезделение "склад"),
потом будет незакрытый месяц с точки зрения бухгалтерии,
потом у третьего подразделения будет свой незакрытый месяц,

и все они будут разными...
Таки да. И можно сделать измерение "ТипыЗакрытыхПериодов" - для бухгалтерии один элемент измерения и набор 1 для месяцев, для склада второй элемент измерения и набор 2 для месяцев, и все эти наборы в одну view и одну отдельную группу мер. Вместо того, чтобы пытаться с NOW() работать.
Потому что бывает ситуация, когда нужно взять OLAP базу и заморозить ее копию. Например, классификатор для номенклатуры поменяли, а планы продаж идут по веткам старого классификатора. Для нового не будут заново распределять планы, а факты в прошлом разъедутся. И получится LFL анализ выполнения план-фактов продаж кривым. Выход - оставить навсегда копию OLAP базы со старым классификатором и не менять никогда больше измерение номенклатуры. Как и набор закрытых месяцев. Не заставлять пользователей каждый раз галочками ставить перечень месяцев. Они ведь забудут, какие были тогда закрытые, какие открытые.

Если можно логику от бизнеса формализовать и зафиксировать в виде физических measures вместо набора непонятных формул, которые "извне" куба не видны - тогда нужно фиксировать. И не пользоваться NOW(). Я так думаю.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX калькуляха среднее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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