1

MDX では比較的簡単なはずのことを達成するのに少し苦労しています。特定の時点での過去 2 週間のメジャーの 1 つの合計を提供する計算メンバーを作成したいと考えています。私の時間ディメンションは次のようになります。

TimeId    TradingDate   Day of Week
-----------------------------------
1000      11/1/2012     Thursday
1001      11/2/2012     Friday
1002      11/5/2012     Monday
1003      11/6/2012     Tuesday
...       ...

これを特に困難にしているのは、私の時間次元が完全ではないということです。時間ディメンションのメンバーは、株式市場の取引日のみに対応しており、すべての時間に対応しているわけではありません。これは、週末、祝日、または株式市場が閉まっているその他の日が除外されることを意味します。LAGこれはまた、やなどの時間をトラバースする通常の方法は、PARALLELPERIODここではまったく機能しないことも意味します。 LAG(14)、たとえば、「14 取引日」を意味し、任意の時点で実際の時間の可変長を表すことができます。

計算メンバー内で、CurrentMember の過去 2 週間以内にある時間メンバーのみを取得するために FILTER を使用しようとしています。ただし、これを達成するための適切な構文 (ある場合) を理解できないようです。次のようなものになると思います。

WITH MEMBER [Sum of Price Previous 2 Weeks] AS
    SUM(
        FILTER(
            [Time].[TimeId].Children
            , [Time].[TradingDate].MemberValue 
              >= VBA!DATEADD("ww", -2, [Time].[TradingDate].CurrentMember.MemberValue)
        )
        , [Price]
    )

ただし、これはまったく機能しません。計算されたメンバーの現在の反復のコンテキストを、関数内の別のコンテキストから切り離すことはできないようですFILTER。つまり、次のように言う方法がわかりません。

"内のセットを反復処理する場合FILTER、各反復の現在のメンバーを、計算されたメンバーのスコープ内の CurrentMember の値と比較します"

私が達成しようとしていることは可能ですか?私が求めていることを達成するために取ることができる別のアプローチはありますか?

4

2 に答える 2

2

計算メンバーから得られる結果は、クエリの軸によって異なります。まず、あなたが[Time].[TradingDate]あなたの軸にあることを確認してください。

次に、[Time].[TradingDate]階層をキー順に並べる必要があります (これがキーだと思いTradingDateます)。

これで、次のメンバー定義を使用できます。

WITH MEMBER [Sum of Price Previous 2 Weeks] AS
    SUM(
        [Time].[TradingDate].CurrentMember.Lag(14):[Time].[TradingDate].CurrentMember, [Price]
    )
于 2012-12-04T17:23:54.453 に答える
2

設定エイリアスを使用して、Filter コンテキストで外側の CurrentMember を参照できます。

WITH MEMBER [Sum of Price Previous 2 Weeks] AS
        SUM(
            GENERATE([Time].[TradingDate].CurrentMember AS CurrentDateAlias,
                     FILTER(
                          [Time].[TimeId].Children
                          , [Time].[TradingDate].MemberValue 
                          >= VBA!DATEADD("ww", -2, CurrentDateAlias.Item(0).MemberValue)
                     )
            )
            , [Price]
        )

GENERATE は、エイリアスをどこかに定義するためだけに使用されます。

于 2012-12-06T21:26:53.653 に答える