MDX:聚合[日期]。[日历]。[季度]级别创建新[日期]。[日历]。[半年度]级别

时间:2014-09-18 14:44:33

标签: ssas mdx

我有一个具有月度层次结构的日期维度

Year -> Quarter -> Month -> Day -> Hour

我有两个措施。 Measure_A(聚合最大),Measure_B(聚合为SUM)

我需要在24天内将测量_A乘以24并且#34;等级然后我需要每半年一次它。

是否可以通过使用MDX查询来创建新的层次结构?以下是我想要实现的输出

Year | CY H1 | Measure_C | Measure_B

其中:Measure_C是1月1日至6月30日(Measure_A * 24)的总和,CY H1将是新等级。

我对Measure_B没有任何问题,因为它的聚合是SUM。仅使用Measure_A,因为聚合是最大的。

这可以在不改变立方体的情况下实现,只需要做一个MDX吗?感谢。

Updated: 

这是我目前的查询和输出,

查询:

With
  MEMBER [Measures].[Measure_C] AS
    SUM (   Descendants ( [Date].[Date Calendar],  [Date].[Date Calendar].[Day]), [Measures].[Measure_A] * 24 )
    , Format_String = "#,##0"

Select 
  {
    [Measures].[Measure_C]
  } ON Columns,
  NON Empty
  {
    [Date].[Date Calendar].[Quarter].ALLMEMBERS
  } ON Rows
From [Cube]

输出:

+------+---------+-----------+
| Year | Quarter | Measure_C |
+------+---------+-----------+
| 2011 | Q1      |        12 |
| 2011 | Q2      |        45 |
| 2011 | Q3      |        12 |
| 2011 | Q4      |        25 |
+------+---------+-----------+

我想做的是合并Q1和Q2以获得上半年的日历学期(CY H1)

必需的输出:

+------+---------+-----------+
| Year | Half Yr | Measure_C |
+------+---------+-----------+
| 2011 | CY H1   |        57 |
| 2011 | CY H2   |        37 |
+------+---------+-----------+

请注意,CY H1我们没有自然的层次结构。但根据下面的评论,单独使用mdx是不可能的。

顺便说一句,我这样做是为了报告服务,所以我想我会在表示层中做一些魔术,因为单独使用MDX查询无法实现这一点。 :)

2 个答案:

答案 0 :(得分:1)

假设您的2011年名为[Date].[Date Calendar].[2011],那么您可以将计算成员添加为其子项,如下所示:

With
  MEMBER [Measures].[Measure_C] AS
    Aggregate ( Descendants ( [Date].[Date Calendar],  [Date].[Date Calendar].[Day]),
                [Measures].[Measure_A] * 24 
              )
    , Format_String = "#,##0"
  MEMBER [Date].[Date Calendar].[2011].[CY H1] AS
    Aggregate({ [Date].[Date Calendar].[Q1], [Date].[Date Calendar].[Q2] })
  MEMBER [Date].[Date Calendar].[2011].[CY H2] AS
    Aggregate({ [Date].[Date Calendar].[Q3], [Date].[Date Calendar].[Q4] })

Select 
  {
    [Measures].[Measure_C]
  } ON Columns,
  NON Empty
  {
    [Date].[Date Calendar].[2011].[CY H1],
    [Date].[Date Calendar].[2011].[CY H2]
  } ON Rows
From [Cube]

答案 1 :(得分:0)

您可以尝试定义类似

的内容
With Member [Measures].[Measure C] as Sum( [Date].[2014].[1].[1].[1] : [Date].[2014].[2].[6].[30] ), [Measures].[Measure A] ) * 24

或者,您可以以更灵活的方式定义它,例如

会员[措施]。[措施C pre]为Sum(后代([Date] .CurrentMember,[Date]。[Day]),[Measures]。[Measure A]),

是每天最大值的总和,但这仅适用于维度中存在的日期成员(非计算成员)。然后,您需要使用在Rows子句中使用的相同月份或季度来显式计算聚合。