在计算的测量定义内部切片? (MDX)

时间:2012-08-21 09:15:47

标签: ssas mdx olap

我在维度D和度量M之间存在多对多的关系。

我需要创建一个具有以下公式的通用计算度量:M /Σ(M),其中Σ代表与给定维度的至少一个成员相关联的所有度量事实的总和。

对于其他(一对多)维度来说很容易,但是在多对多中获得Σ...好吧,如果它只是一个常规的MDX查询,那也很容易。我可以对所有维度的孩子进行切分:

SELECT [Measures].[M] ON 0
FROM [MyCube]
WHERE [D].[All].CHILDREN

但是如何切换计算出的度量?

期望工作的简化示例:

CREATE MEMBER [Measures].[Calc] AS
  [Measures].[M] / ( DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ), [Measures].[M] )
  WHERE DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ).CHILDREN

但是,当然,MDX不支持WHERE定义中的MEMBER子句。

请告诉我如何处理此事。

2 个答案:

答案 0 :(得分:0)

如何使用aggregate方法?

CREATE MEMBER [Measures].[Calc] AS
  [Measures].[M] / Aggregate( DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ).CHILDREN, [Measures].[M] )

答案 1 :(得分:0)

最后,这就是我得到的:

CREATE HIDDEN [Total M] =
  AGGREGATE(
    DESCENDANTS(
      AXIS( 1 ).ITEM( 0 ).DIMENSION.LEVELS( 0 ).ITEM( 0 ),
      AXIS( 1 ).ITEM( 0 ).DIMENSION.LEVELS.COUNT
    ) - AXIS( 1 ).ITEM( 0 ).DIMENSION.LEVELS( 0 ).ITEM( 0 ),
    [Measures].[M]
  );

简而言之,我从维度成员的集合中减去了根成员。聚合剩余集合可在多对多关系中提供适当的值。我现在可以在其他测量中使用这个度量来计算M /Σ(M)等。