|
|
|
MDX калькуляха среднее
|
|||
|---|---|---|---|
|
#18+
Редко тут пишу, т.к. во всем сам разбираюсь, а сегодня встрял на элементарной вещи. Есть такая калькуляха считает средние отгрузки за год. CurrentMember выбран год. avg(DESCENDANTS([Дата].[Дата].CurrentMember, [Дата].[Дата].[Месяц]), [Measures].[Отгрузки шт]) по сути считает среднее арифметическое по месяцам в разрезе года. Но она не совсем верная, т.к. с точки зрения бизнес логики надо считать среднее по закрытый месяц. Т.е. надо использовать что-то вроде LAG или PrevMember, но в DESCENDANTS это не работает в данном разрезе.... Вопрос как сместить период на -1 месяц (на -1 мембер) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 17:50 |
|
||
|
MDX калькуляха среднее
|
|||
|---|---|---|---|
|
#18+
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 набора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 17:57 |
|
||
|
MDX калькуляха среднее
|
|||
|---|---|---|---|
|
#18+
Nurgl, вариантов решения множество, так что зависит от вкусов реализации алгоритма (и рекомендаций производительности). а так-же логики определения закрытости месяца (например последний/текущий из now() и после скорее всего всегда не закрыт, даже для завтра, т.к. данных обычно пока нет чтобы его закрыть, в т.с. можно дополнительную проверку вставить в ветвь решения) в общем случае если контекст ячейки устанавливается на гранулярности дня то 1) от дня переходим к месяцу через .parent 2) месяц сдвигаем через .prevmember или .lag(1) или .lead(-1) 3) потом от полученного месяца и получаем descendants(..,,leaves) или .children например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 21:43 |
|
||
|
MDX калькуляха среднее
|
|||
|---|---|---|---|
|
#18+
Nurgl, проще будет порекомендовать пользователям самим снимать галку с незакрытого месяца у вас сейчас незакрытый месяц с точки зрения одного заказчика (пусть это подрезделение "склад"), потом будет незакрытый месяц с точки зрения бухгалтерии, потом у третьего подразделения будет свой незакрытый месяц, и все они будут разными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 15:35 |
|
||
|
MDX калькуляха среднее
|
|||
|---|---|---|---|
|
#18+
КритикNurgl, проще будет порекомендовать пользователям самим снимать галку с незакрытого месяца у вас сейчас незакрытый месяц с точки зрения одного заказчика (пусть это подрезделение "склад"), потом будет незакрытый месяц с точки зрения бухгалтерии, потом у третьего подразделения будет свой незакрытый месяц, и все они будут разными... Таки да. И можно сделать измерение "ТипыЗакрытыхПериодов" - для бухгалтерии один элемент измерения и набор 1 для месяцев, для склада второй элемент измерения и набор 2 для месяцев, и все эти наборы в одну view и одну отдельную группу мер. Вместо того, чтобы пытаться с NOW() работать. Потому что бывает ситуация, когда нужно взять OLAP базу и заморозить ее копию. Например, классификатор для номенклатуры поменяли, а планы продаж идут по веткам старого классификатора. Для нового не будут заново распределять планы, а факты в прошлом разъедутся. И получится LFL анализ выполнения план-фактов продаж кривым. Выход - оставить навсегда копию OLAP базы со старым классификатором и не менять никогда больше измерение номенклатуры. Как и набор закрытых месяцев. Не заставлять пользователей каждый раз галочками ставить перечень месяцев. Они ведь забудут, какие были тогда закрытые, какие открытые. Если можно логику от бизнеса формализовать и зафиксировать в виде физических measures вместо набора непонятных формул, которые "извне" куба не видны - тогда нужно фиксировать. И не пользоваться NOW(). Я так думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 19:27 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39715746&tid=1857751]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 503ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...