0

ディメンション D とメジャー M の間に多対多の関係があります。

次の式を持つ一般的な計算メジャーを作成する必要があります: M/Σ(M)。ここで、Σ は、特定のディメンションの少なくとも 1 つのメンバーに関連付けられているすべてのメジャーのファクトの合計を表します。

他の (1 対多の) ディメンションは簡単ですが、多対多で Σ を取得するのは簡単です... 通常の 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

How about using the aggregate method ?

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 に答える