MDX:结合两个角色扮演维度,具有多个值

时间:2016-02-22 15:14:53

标签: mdx

我在MDX问题上工作了几天,我没有看到任何问题......

以下是上下文:

我有一张事实表:

+----------+--------+-------------+------------+------------------+
| Line num | Amount |  Line Type  |    Date    | DateConfirmation |
+----------+--------+-------------+------------+------------------+
|        1 |    100 | Reservation | 01/01/2016 | 12/01/2016       |
|        2 |     50 | Reservation | 01/01/2016 | Empty            |
|        3 |     80 | Reservation | 20/12/2015 | 01/01/2016       |
|        4 |     30 | DirectSales | 01/01/2016 | 01/01/2016       |
+----------+--------+-------------+------------+------------------+

所以在SSAS中我设计了一个带

的立方体
  • 金额衡量

  • 日期维度

  • 日期确认维度

然后2个日期维度是角色扮演维度

我需要的是,在按日期分析时,将所有预订加上在当前会员的同一天确认的预订结合起来。

所以我写了这个MDX:

CREATE MEMBER CURRENTCUBE.[Sales].[Type].[All].[Confirmed Reservations]
 AS NULL , 
VISIBLE = 1; 

Scope ( [Sales].[Type].[All].[Confirmed Reservations] ); 

    Scope(  MeasureGroupMeasures("Sales") , [Date].[Hierarchy].Members , [Date].[Date].Members
        , [Date Confirmation].[Hierarchy].[All] , [Date Confirmation].[Date].[All]  );   

        This =  ([Sales].[Type].&[Reservation], StrToMember("[Date Confirmation].[Hierarchy]." + Right(MemberToStr([Date].[Hierarchy].CurrentMember),  Len(MemberToStr([Date].[Hierarchy].CurrentMember)) - Len("[Date].[Hierarchy].") ) ), [Date].[Hierarchy].[All] );

    End Scope; 

End Scope; 

预期结果,如果我分析销售& 2016年1月1日日期维度的预订是

+------------------------+-----------+
| Reservation            | 150 (1+2) |
| DirectSales            | 30 (4)    |
| Confirmed Reservations | 80 (3)    |
+------------------------+-----------+

如果我在Excel中只选择一个日期,这将完美地运行。但是当选择多个日期时,它会产生非常糟糕的结果。

您的所有建议对我都非常有帮助! 非常感谢:)

1 个答案:

答案 0 :(得分:0)

我没有尝试在MDX中解决这个问题,而是建议采用更简单的方法。如果您在DSV中的当前事实表查询是:

Select LineNum, Amount, LineType, Date, DateConfirmation
From YourFact

我会将其更改为:

Select LineNum, Amount, LineType, Date, DateConfirmation
From YourFact

UNION ALL

Select LineNum, Amount, 'Confirmed Reservations' as LineType, DateConfirmation as Date, DateConfirmation
From YourFact
WHERE DateConfirmation is not null

那么你不应该需要任何MDX。