Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 MTD vs Prior MTD  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 991
([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; 


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

    ([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)
        )
    )
);  



А как вы это разруливаете?
16 мар 18, 16:20    [21262037]     Ответить | Цитировать Сообщить модератору
 Re: MTD vs Prior MTD  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 991
т. е. для Prior MTD, хотелось бы, чтобы в случае, если для текущей даты, нет даты в предыдущем месяце, то берем последнюю дату предыдущего месяца.
16 мар 18, 16:23    [21262044]     Ответить | Цитировать Сообщить модератору
 Re: MTD vs Prior MTD  [new]
bideveloper
Member

Откуда:
Сообщений: 359
([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]
    );
16 мар 18, 21:10    [21262679]     Ответить | Цитировать Сообщить модератору
 Re: MTD vs Prior MTD  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 991
bideveloper,

очень круто. работает быстро, даже Prior YTD. спасибо!
19 мар 18, 12:16    [21267334]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить