powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
11 сообщений из 11, страница 1 из 1
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
    #39899470
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целом, запрос будет выглядеть так:
Код: 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
MDX: как вычислить разницу текущего и предыдущего периода? Не зная уровень (год/месяц/..)
    #39899684
T87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

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

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

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


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

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

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


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

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

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

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

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

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

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


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

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


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