Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..) / 11 сообщений из 11, страница 1 из 1
07.12.2019, 22:25
    #39899470
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
В целом, запрос будет выглядеть так:
Код: sql
1.
2.
3.
4.
5.
6.
[Measures].[Сумма]
-
(
    [Measures].[Сумма]
    ,[Время].[Год].Prevmember
);


Или так
Код: sql
1.
2.
3.
4.
5.
6.
[Measures].[Сумма]
-
(
    [Measures].[Сумма]
    ,[Время].[Квартал].Prevmember
);


Или так
Код: sql
1.
2.
3.
4.
5.
6.
[Measures].[Сумма]
-
(
    [Measures].[Сумма]
    ,[Время].[Месяц].Prevmember
);



Но вот как бы это записать без привязки к уровню? Если пользователь выберет уровень детализации "месяц", то ему будет показана разница предыдущего месяца с текущим. Если квартал - то будет показана разница поквартальная
...
Рейтинг: 0 / 0
08.12.2019, 22:41
    #39899684
T87
T87
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
Charles Weyland,

Иерархию постройте. Y-Q-M. И уже на ней считайте
...
Рейтинг: 0 / 0
08.12.2019, 23:06
    #39899687
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
Charles Weyland,

Есть более глобальный подход к таким вычислениям. Не прописывать отдельно для каждой меры, а сделать для всех мер сразу.
Например, можно здесь почитать
https://devinknightsql.com/2014/08/14/mdx-time-calculations-built-to-scale/
...
Рейтинг: 0 / 0
09.12.2019, 00:11
    #39899701
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
спасибо))
...
Рейтинг: 0 / 0
09.12.2019, 08:32
    #39899765
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
bideveloper
Charles Weyland,

Есть более глобальный подход к таким вычислениям. Не прописывать отдельно для каждой меры, а сделать для всех мер сразу.
Например, можно здесь почитать
https://devinknightsql.com/2014/08/14/mdx-time-calculations-built-to-scale/


У меня есть сомнения, что универсальный подход будет оптимален по скорости. Я иду по пути -- написать небольшой генератор и нагенерить им простыню из SCOPE. Выглядит громоздко, но оптимально по производительности.
...
Рейтинг: 0 / 0
09.12.2019, 10:45
    #39899817
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
насколько мне известно, scope как раз уменьшает производительность...
если уж оптимизировать, то на уровне максимальной денормализации и прописывании мер в БД, которые останется только агрегировать в кубе без лишних сложных вычислений.

А по поднятому вопросу, я почему-то ступил и не додумался написать

Код: sql
1.
2.
3.
4.
5.
6.
[Measures].[Сумма]
-
(
    [Measures].[Сумма]
    ,[Время].[Год - полугодие - квартал - месяц].Prevmember
);


С одной стороны, работает как надо. Но с другой стороны - а что если понадобится посмотреть по номеру недели в году? или по триместру? по финансовому году? всё равно, видимо, scope'ами придётся обходиться. Думал, вдруг можно как-то узнать просто текущий уровень в пределах меры и брать по нему, чтобы десяток созданных уровней иерархий не переписывать в десяток созданных мер.

получается, при создании каждой следующей меры придётся очень здорово и очень много править по коду.
...
Рейтинг: 0 / 0
09.12.2019, 12:42
    #39899894
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
Charles Weyland

С одной стороны, работает как надо. Но с другой стороны - а что если понадобится посмотреть по номеру недели в году? или по триместру? по финансовому году? всё равно, видимо, scope'ами придётся обходиться. Думал, вдруг можно как-то узнать просто текущий уровень в пределах меры и брать по нему, чтобы десяток созданных уровней иерархий не переписывать в десяток созданных мер.

Да, без scope не обойтись. Но в том подходе, что я привел выше, scope пишется один раз для разных иерархий дат. А мер потом можно добавлять сколько угодно и ничего при этом менять не надо.
...
Рейтинг: 0 / 0
09.12.2019, 12:47
    #39899903
alexdr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
a_voronin
У меня есть сомнения, что универсальный подход будет оптимален по скорости.

Если правильно написать MDX, то это будет не быстро, а очень быстро ;) (С) Моша.
Правильный (но не без огрехов) MDX для подобных вычислений можно увидеть, напр., здесь . Книжку можно найти на просторах интернета (в чисто ознакомительных целях).
...
Рейтинг: 0 / 0
09.12.2019, 13:58
    #39899974
alexdr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
Charles Weyland
насколько мне известно, scope как раз уменьшает производительность...

О как! А откуда это известно?
...
Рейтинг: 0 / 0
09.12.2019, 15:40
    #39900089
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
alexdr
Charles Weyland
насколько мне известно, scope как раз уменьшает производительность...

О как! А откуда это известно?


Криво написанный SCOPE может.
...
Рейтинг: 0 / 0
09.12.2019, 16:59
    #39900213
alexdr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
a_voronin
Криво написанный SCOPE может.

А зачем его писать "криво"? Дескать, я сам себе злобный буратина и щас такой скоуп напишу, чтоб весь куб помер? Скоуп он для чего придуман был?
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..) / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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