mdx - 去年工作日比较的 OLAP 多维数据集计算 - MDX
问题描述
我想将实际销售价值与去年的销售价值进行比较。这种比较的困难在于是否符合工作日以及闰年。
日级别示例:
2016-02-04(星期四):实际销量:580,-去年销量:1.008,-
比较
2015-02-05(星期四):实际销售额:1.008,-
所以我想比较一个月中相同的工作日,而不仅仅是相同的日期。
月级别示例:
2016:(闰年)01.02.2016 - 29.02.2019(2016 年 2 月)实际销售额:19.300,-:去年销售额:19.000,-
比较
2015:(无闰年)02.02.2015 - 02.03.2015(2015 年 2 月在工作日逻辑上)实际销售额:19.000,-
我不仅想比较 2016 年 2 月和 2015 年 2 月,还想准确地比较工作日销售额的总和。
我尝试使用日期计算维度编写此计算,它有效,但仅适用于日级别。计算维度名称:Date Calculations Week Day 成员名称: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 年结果:
它适用于日级别,但正如您所见,不适用于月级别,也不适用于年级别。
我怎样才能做到这一点?
解决方案
我得到了解决方案:
此问题的立方计算代码:
// ------------------------------------------------------------------------
//
// 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;
现在每个级别的总和值:
使用此日期计算工作日维度,您可以为每个度量显示工作日逻辑上的上一年值。
推荐阅读
- nlp - BERT 的输入是令牌 ID。如何将相应的输入令牌向量输入 BERT?
- airflow - 如何将 conf 传递给计划的 DAG
- spring-boot - 在 Spring Boot REST 控制器中反序列化之前记录原始请求正文
- memory - 每次 LSTM 测试运行都会增加内存使用量
- node.js - 如何在不同的端口中运行反应端口和后端端口?
- c# - 存储实例化预制件的问题
- visual-studio-code - VSCode 在尝试运行 Jupyter 笔记本时挂起?
- html - 我在我的 HTML 页面中插入了一个背景图像,但它没有显示
- python - 如何在此类中添加 original_text 和 reversed_text 属性?我应该如何修复它以获得理想的输出?
- python - 创建一个 Python 函数,该函数将为字符计数的元组创建一个字典,分配给元音、辅音或其他的键