Quantcast
Channel: SQL.ru: OLAP и DWH
Viewing all articles
Browse latest Browse all 1167

MTD vs Prior MTD

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



А как вы это разруливаете?

Viewing all articles
Browse latest Browse all 1167

Trending Articles