汇总季度到半年 OLAP MDX

Posted

技术标签:

【中文标题】汇总季度到半年 OLAP MDX【英文标题】:Aggregate quarter to half year OLAP MDX 【发布时间】:2017-04-28 13:50:05 【问题描述】:

我有以下时间层次结构: Year -> Quarter -> Week -> Day。 我设法将过去几年(例如 2016 年)的 Q1/Q2 汇总为第 1 年半年 (H1),将 Q3/Q4 汇总为第 2 年半年 (H2):

Year    Quarter Ergebnis
Year 2016   Q1  2.688.627.598
Year 2016   Q2  2.114.089.713
Year 2016   Q3  3.064.536.554
Year 2016   Q4  3.451.472.537
**Year 2016 H1  4.802.717.311
Year 2016   H2  6.516.009.091**

我正在使用以下 MDX 查询来计算 OLAP 中的成员:

Parent Hierarchy - [Time].[Year - Quarter - Month - Date]
Parent Member -    [Time].[Year - Quarter - Month - Date].[Year].&[2016]

MDX:
[Time].[Year - Quarter - Month - Date].[Quarter].&[1]&[2016]
+
[Time].[Year - Quarter - Month - Date].[Quarter].&[2]&[2016]

但是,此 MDX 查询不适用于本年度(2017 年):

Year     Quarter    Total
Year 2017   Q1  2.550.081.058
Year 2017   Q2  627.640.711

我什至无法汇总已完成的 Q1。您是否知道如何汇总当年 Q1 和 Q2 的变通方法,即使 Q2 尚未完成?

【问题讨论】:

没有正确的 MDX 代码。为什么不添加额外的级别:半年半季度? 我是高级用户,想知道它是否可以在不编辑源代码的情况下制作。所以没有办法通过mdx编码获得半年?但为什么它在前几年有效? 有可能。您是否为层次结构创建计算成员? 是的,成员出现在四分之一以下。例如。去年:2016 年 -> Q1,Q2,Q3,Q4,H1,H2。 【参考方案1】:

您在此处将年份值硬编码为 MDX 公式:

[Time].[Year - Quarter - Month - Date].[Quarter].&[1]&[2016]
+
[Time].[Year - Quarter - Month - Date].[Quarter].&[2]&[2016]

试试吧:

[Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(0)
+
[Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(1)

【讨论】:

嗨。那么父层次结构 - [时间].[年 - 季度 - 月 - 日期] 父成员 - [时间].[年 - 季度 - 月 - 日期].[年].&[2016] 呢?我必须改变它们吗? 这取决于你想要达到的目标。【参考方案2】:

这是你得到的结果:

Year        Quarter Total
Year 2016   Q1      2.688.627.598
Year 2016   Q2      2.114.089.713
Year 2016   Q3      3.064.536.554
Year 2016   Q4      3.451.472.537

所以你想要这个?

Year        Half    Total
Year 2016   H1      4,802,717,311 
Year 2016   H2      6,516,009,091 

您需要将这两个成员添加到不同的维度/层次,即不是[Time].[Year - Quarter - Month - Date]host 维度。我将使用[Language].[Language] - 只需将其更改为任何其他未使用的暗淡:

`[Language].[Language].[All].[H1]` 

 AGGREGATE(
  
   [Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(0)
  ,[Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(1)
  
   ,[Language].[Language].[All]
 )

还有这个:

`[Language].[Language].[All].[H2]` 

 AGGREGATE(
  
   [Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(2)
  ,[Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(3)
  
   ,[Language].[Language].[All]
 )

然后在您的数据透视表中使用这些来自主机维度的额外成员。

【讨论】:

对不起,我是 mdx 和 olap 的新手。我必须为参数层次结构和参数成员添加什么? 这对我不起作用。理想情况下,我会在“Quarter”下有成员“H1”和“H2”,这样我就可以过滤这两个成员而不显示 Q1-Q4。那么还有另一种方法可以解决这个问题吗?我还尝试了 [Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(0) + [Time].[Year - Quarter - Month - Date].CurrentMember.Children.Item(1) .但这不起作用。它仅在硬编码时才有效。 @ErhanAto 明天我将在 AdvWrks 中对此进行测试:使用主机层次结构是我过去几年一直在使用的方法。 你是如何进行测试的? 有什么新方法吗?

以上是关于汇总季度到半年 OLAP MDX的主要内容,如果未能解决你的问题,请参考以下文章

FoodMart数据仓库mysql表及数据初始化及重度汇总脚本

在多维数据集或 mdx 查询中可视化“ALL”汇总

Olap 立方体和 MDX 和 NON EMPTY

是否有(开源)基于 MDX 的内存中 OLAP 服务器? [关闭]

如何实现在网络上由各单位填写excle表格以方便汇总。

如何在 MDX 中对同一维度进行分组和过滤