温馨提示:本文翻译自stackoverflow.com,查看原文请点击:OLAP Cube Calculation for Last Year Comparison on - MDX
mdx olap olap-cube calculation mdx-query

OLAP Cube Calculation for Last Year Comparison on - MDX

发布于 2020-03-29 21:28:24

我想将实际销售额与去年的销售额进行比较。这种比较的困难在于工作日的顺应性,因此是the年的顺应性。

日级示例:

2016-02-04(星期四):实际销售量:580,-去年销售量:1.008,-

与...比较

2015-02-05(星期四):实际销量:1.008,-

所以我想比较一个月中的相同工作日,而不仅仅是相同的日期。

月级示例:

2016年:(le年)2016年2月1日-2019年2月29日(2016年2月)实际销售量:19.300,-:去年销售值:19.000,-

与...比较

2015年:(无leap年)2015年2月2日至2015年2月3日(按周逻辑显示2015年2月)的实际销售价值:19.000,-

我不仅要比较2016年2月和2015年2月,还要确切地比较工作日的总和。

我尝试使用日期计算维度来编写此计算,但它仅在日期级别有效。计算维度的名称:日期计算星期成员的天日期:ComparisonWD

SCOPE ( 
    [Date].[Year - Quarter - Month - Date].MEMBERS,
    [Date].[Date].MEMBERS );                    


( [Date Calculations Week Day].[ComparisonWD].[Previous Year], 
      [Date Calculations Week Day].[AggregationWD].Members ) 
          = ( [Date Calculations Week Day].[ComparisonWD].DefaultMember,
              ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Date],
                              364,
                              [Date].[Year - Quarter - Month - Date].CurrentMember ) );            
END SCOPE;

2015年成绩:

在此处输入图片说明

2016年成绩:

在此处输入图片说明

它可以在日级别上运行,但是正如您所看到的,它不在月份和年份级别上显示。

在此处输入图片说明

我该如何实现?

查看更多

提问者
Alexo
被浏览
25
Alexo 2020-01-31 22:26

我得到了解决方案:

此问题的多维数据集计算代码:

// ------------------------------------------------------------------------
//
//    Comparison Week Day - Date.Calendar
//
// ------------------------------------------------------------------------
SCOPE ( 
    [Date].[Year - Quarter - Month - Date].MEMBERS,
    [Date].[Date].MEMBERS );                    

    ///////////////////////////////////////////////////////////////////////////////////////
    ( [Date Calculations Week Day].[ComparisonWD].[Previous Year], 
      [Date Calculations Week Day].[AggregationWD].Members ) 
          = SUM({ParallelPeriod([Date].[Year - Quarter - Month - Date].[Date], 364, Descendants( [Date].[Year - Quarter - Month - Date].CurrentMember , [Date].[Year - Quarter - Month - Date].[Date]).item(0)) :
                     Parallelperiod ([Date].[Year - Quarter - Month - Date].[Date], 364,  Descendants( [Date].[Year - Quarter - Month - Date].CurrentMember , [Date].[Year - Quarter - Month - Date].[Date]).item((Descendants( [Date].[Year - Quarter - Month - Date].CurrentMember , [Date].[Year - Quarter - Month - Date].[Date])).Count - 1))}, [Date Calculations Week Day].[ComparisonWD].DefaultMember );            
END SCOPE;    


SCOPE ([Date Calculations Week Day].[ComparisonWD].[Diff. Over Previous Year]);                   
    THIS = IIF( IsEmpty( [Date Calculations Week Day].[ComparisonWD].DefaultMember ) 
                         OR IsEmpty( [Date Calculations Week Day].[ComparisonWD].[Previous Year] ),
                NULL,
                [Date Calculations Week Day].[ComparisonWD].DefaultMember 
                - [Date Calculations Week Day].[ComparisonWD].[Previous Year] );                   
    NON_EMPTY_BEHAVIOR(THIS) = [Date Calculations Week Day].[ComparisonWD].DefaultMember;                   
    FORE_COLOR(THIS) = IIF( [Date Calculations Week Day].[ComparisonWD].[Diff. Over Previous Year] < 0, 255, 0);                     // 255 = RED
END SCOPE;                   

SCOPE ([Date Calculations Week Day].[ComparisonWD].[Diff. % Over Previous Year]);                   
    THIS = IIF( IsEmpty( [Date Calculations Week Day].[ComparisonWD].[Diff. Over Previous Year] ) 
                         OR IsEmpty( [Date Calculations Week Day].[ComparisonWD].[Previous Year] ),
                NULL,
                [Date Calculations Week Day].[ComparisonWD].[Diff. Over Previous Year]
                / [Date Calculations Week Day].[ComparisonWD].[Previous Year] );                   
    NON_EMPTY_BEHAVIOR(THIS) = [Date Calculations Week Day].[ComparisonWD].DefaultMember;                   
    FORMAT_STRING(THIS) = 'Percent';                   
    FORE_COLOR(THIS) = IIF( [Date Calculations Week Day].[ComparisonWD].[Diff. % Over Previous Year] < 0, 255, 0);                     // 255 = RED
END SCOPE;                   

///////////////
// Tuple (All years, All Months) is the default number (keeps compatibility with OWC11)
( [Date].[Year].[All], [Date].[MonthYear].[All],
  Except( [Date Calculations Week Day].[ComparisonWD].[ComparisonWD].MEMBERS, [Date Calculations Week Day].[ComparisonWD].DefaultMember ) ) = [Date Calculations Week Day].[ComparisonWD].DefaultMember;   

现在在每个级别上都有求和值:

在此处输入图片说明

使用此日期计算工作日维度,您可以在“工作日”逻辑中为每个度量显示上一年的值。