web-dev-qa-db-ja.com

MDXでは、UnknownMemberのParallelPeriodとは何ですか?

すべて、年、四半期、月、日のレベルの時間ディメンションがあるとします。私は月にいくらかの売り上げと計算された測定値を持っています[昨年の売り上げ]

WITH MEMBER [Measures].[sales last year] AS (ParallelPeriod([Time].[Time].[Year],1,[Time].[Time].CurrentMember), [Measures].[sales])
SELECT {[Measures].[sales], [Measures].[sales last year]} ON 0
, [Time].[Time].[Month].Members ON 1
FROM [Sales]

これで、時間ディメンションにUnknownMemberが表示され、階層内で昨年の1月に表示されたのと同じ値が[昨年の売上]として表示されます。

どうしてこんなことに?どうすればそれを回避できますか?つまり、すべての[昨年の売上]の合計は、最初の年を除くすべての年のすべての[売上]の合計と同じである必要があります。

2
Stefan Wilms

`PARALLELPERIOD 'が機能する方法は、階層を指定されたレベルまで上に移動し、次に期間数を前後に移動してから、同じパスを使用して再び下に移動することです。

この「パスを下に移動する」では、parallelperiodは同じメンバーの序数を再び下降します。したがって、最初のメンバー(1月の例)から上に移動すると、最初のメンバーが再び下に移動します。 2番目のメンバー(例では2月)を上に移動すると、2番目のメンバーを再び下に移動します。

もちろん、これは未知の階層で壊れます。これは、各子がその親の最初のメンバーであるためです。

たとえば、この階層があるとします。

     2015             unknown
jan   feb    mar      unknown

次に、不明な階層のリーフメンバーで並列期間を実行すると、並列期間は不明な階層の年レベルに移動し、1年戻って再びリーフレベルに移動し、最初のメンバーから上に移動したことを思い出します。未知の階層の、2015年の階層の最初のメンバーである2015年1月を下に移動します。