powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MTD vs Prior MTD
4 сообщений из 4, страница 1 из 1
MTD vs Prior MTD
    #39616041
churupaha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
([Dim Calendar Tool].[Calendar Tool Name].[MTD]) 
    = AGGREGATE
    (
        {[Dim Calendar Tool].[Calendar Tool Name].DEFAULTMEMBER} *
        PERIODSTODATE
        (
            [Dim Calendar].[Calendar YQMD].[Month],
            [Dim Calendar].[Calendar YQMD].CURRENTMEMBER
        )
    );


/*
   Этот вариант содержит ошибку, если для "текущего" CURRENTMEMBER в прошлом месяце нет даты, то PARALLELPERIOD возвращает NULL, а вся конструкция NULL
*/
([Dim Calendar Tool].[Calendar Tool Name].[Prior MTD]) 
    =
    AGGREGATE
    (
        {[Dim Calendar Tool].[Calendar Tool Name].DEFAULTMEMBER} *
        PERIODSTODATE
        (
            [Dim Calendar].[Calendar YQMD].[Month],
            PARALLELPERIOD([Dim Calendar].[Calendar YQMD].Month, 1, [Dim Calendar].[Calendar YQMD].CURRENTMEMBER)
        )
    );

/*
     И тогда для проблемных дней не работает сравнение
*/


SCOPE ([Dim Calendar Tool].[Calendar Tool Name].[% diff MTD vs Prior MTD]);
    
    THIS = IIF(([Dim Calendar Tool].[Calendar Tool Name].[Prior MTD]) = 0, NULL, ([Dim Calendar Tool].[Calendar Tool Name].[MTD] - [Dim Calendar Tool].[Calendar Tool Name].[Prior MTD]) / ([Dim Calendar Tool].[Calendar Tool Name].[Prior MTD])); 

    FORMAT_STRING(THIS) = "##0 %;-##0 %;##0 %;";       

END SCOPE; 



Я пытался разными способами хэндлить это, но работать начинает адски медленно, например:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    ([Dim Date Tool].[Date Tool Name].[Last MTD]) 
= Aggregate
(
    {[Dim Date Tool].[Date Tool Name].DefaultMember} *
    PeriodsToDate
    (
        [Dim Date].[Calendar YQMD].[Month],
        IIF
        (
            ISEMPTY(ParallelPeriod([Dim Date].[Calendar YQMD].Month, 1, [Dim Date].[Calendar YQMD].CurrentMember)), 
            Tail(Descendants(Ancestor([Dim Date].[Calendar YQMD].CurrentMember, [Dim Date].[Calendar YQMD].Month).PrevMember, [Dim Date].[Calendar YQMD].[Date], SELF), 1).Item(0), 
            ParallelPeriod([Dim Date].[Calendar YQMD].Month, 1, [Dim Date].[Calendar YQMD].CurrentMember)
        )
    )
);  




А как вы это разруливаете?
...
Рейтинг: 0 / 0
MTD vs Prior MTD
    #39616045
churupaha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т. е. для Prior MTD, хотелось бы, чтобы в случае, если для текущей даты, нет даты в предыдущем месяце, то берем последнюю дату предыдущего месяца.
...
Рейтинг: 0 / 0
MTD vs Prior MTD
    #39616138
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
([Dim Calendar Tool].[Calendar Tool Name].[Prior Month]) 
    = 
 PARALLELPERIOD([Dim Calendar].[Calendar YQMD].Month, 1, [Dim Calendar].[Calendar YQMD].CURRENTMEMBER)
        ,[Dim Calendar Tool].[Calendar Tool Name].DEFAULTMEMBER);


([Dim Calendar Tool].[Calendar Tool Name].[Prior MTD]) 
    =
    AGGREGATE
    (
        PERIODSTODATE
        (
            [Dim Calendar].[Calendar YQMD].[Month],
            [Dim Calendar].[Calendar YQMD].CURRENTMEMBER
        ),
        [Dim Calendar Tool].[Calendar Tool Name].[Prior Month]
    );
...
Рейтинг: 0 / 0
MTD vs Prior MTD
    #39616720
churupaha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bideveloper,

очень круто. работает быстро, даже Prior YTD. спасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MTD vs Prior MTD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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