Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MTD vs Prior MTD / 4 сообщений из 4, страница 1 из 1
16.03.2018, 16:20
    #39616041
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MTD vs Prior MTD
Код: 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
16.03.2018, 16:23
    #39616045
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MTD vs Prior MTD
т. е. для Prior MTD, хотелось бы, чтобы в случае, если для текущей даты, нет даты в предыдущем месяце, то берем последнюю дату предыдущего месяца.
...
Рейтинг: 0 / 0
16.03.2018, 21:10
    #39616138
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MTD vs Prior MTD
Код: 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
19.03.2018, 12:16
    #39616720
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MTD vs Prior MTD
bideveloper,

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


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