1

2つのディメンションと1つのメジャーグループ[時間]。[日]、[シナリオ]。[シナリオ]と、2つのメジャー[メジャー]。[CleanPrice]と[メジャー]。[DirtyPrice]を含むメジャーグループがあります。

私はうまくいく次の結果から始めます:

                   01-01-2011  01-01-2012
Base  CleanPrice      100         100
Base  DirtyPrice      100         100
Up1%  CleanPrice      101         101
Up1%  DirtyPrice      101         101

私が本当に作成したいのは、メジャーを表示するための計算されたメンバーと、現在のシナリオと基本シナリオの間のデルタです。

望ましい結果は次のようになります。

                         01-01-2011  01-01-2012
Base  CleanPrice  Value    100         100
Base  CleanPrice  Delta    0           0
Base  DirtyPrice  Value    100         100
Base  DirtyPrice  Delta    0           0
Up1%  CleanPrice  Value    101         101
Up1%  CleanPrice  Delta    1           1
Up1%  DirtyPrice  Value    101         101
Up1%  DirtyPrice  Delta    1           1

私はこのようなことを試みましたが、メジャーグループをクロスジョインすることはできません。

WITH MEMBER [Value] as [Measures].CurrentMember
MEMBER [Delta] as [Measures].CurrentMember - ([Scenario].[Scenario].&[0], [Measures].CurrentMember)
SELECT NON EMPTY 
{ [Time].[Day].&[2011-01-01T00:00:00], [Time].[Day].&[2012-01-01T00:00:00] }
ON COLUMNS,
{ [Scenario].[Scenario].&[0], [Scenario].[Scenario].&[1] }  * 
{ [Measures].[CleanPrice], [Measures].[DirtyPrice] } *
{ [Value], [Delta] }
ON ROWS
FROM Results

2つの計算されたメンバーを作成します。[値]は単に現在のメジャーであり、[デルタ]は現在のメジャーを取得し、基本シナリオに対するそのメジャーの差を取得します。

クリーン価格とダーティ価格のメジャーグループと、計算された2つのメンバーのメジャーグループをクロスジョインしたいのですが、これは不可能です。

望ましい結果を生み出す方法はありますか?[CleanPriceDelta]と[DirtyPriceDelta]のメジャーは実際にたくさんあるので、作成しないようにしたいと思います。

4

1 に答える 1

1

1 つのアプローチは、新しい次元を作成することです。たとえば、[Metric]2 つのメンバー と[Value]を使用し[Delta]ます。次に、次の行に沿って MDX を計算スクリプトに書き込みます。

SCOPE ([Metric].[Delta], [Scenario].[Scenario].[Scenario]);
    this =   ([Metric].[Value], [Scenario].[Scenario].currentmember)
           - ([Metric].[Value], [Scenario].[Scenario].&[0]);
END SCOPE;

[Scenario]これは、ディメンションにリンクされているすべてのメジャーで自動的に機能します。

于 2013-01-24T14:05:15.477 に答える