0

我在维度 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

请告诉我如何处理这个问题。

4

2 回答 2

0

使用聚合方法怎么样?

CREATE MEMBER [Measures].[Calc] AS
  [Measures].[M] / Aggregate( DRILLUPLEVEL( AXIS( 1 ).ITEM( 0 ).HIERARCHY.MEMBERS ).ITEM( 0 ).CHILDREN, [Measures].[M] )
于 2012-08-22T00:40:41.547 回答
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) 等。

于 2012-08-24T12:57:26.880 回答