時間次元の階層がある場合とない場合で、これがどこで機能するかを理解するのに少し時間がかかりました。私のデータと私のキューブ構造に基づいて、ここに私がまとめたものがあります:
with member [Measures].[RunningTotal] as
'sum({[Deferred Revenue Date].[Standard Calendar].CurrentMember.Level.Item(0):[Deferred Revenue Date].[Standard Calendar].CurrentMember}, [Measures].[Deferred Revenue Amount])'
select
{[Measures].[Deferred Revenue Amount]
,[Measures].[RunningTotal]
} on columns,
nonempty([Deferred Revenue Date].[Standard Calendar].[Date], [Measures].[Deferred Revenue Amount]) on rows
from
DW;
トリックの 1 つは、ディメンションおよびメジャーとの共通部分がある場合にのみ、計算されたメジャー列に値を返す nonempty() 句です。これがないと、メジャー列に一連の NULL が表示され、計算されたメジャー列に多数の繰り返し値が表示されます。これは実際には非常に便利なクエリです。
計算されるメンバーは、SELECT ステートメントで指定したレベル (日付、月、または年) に関係なく機能します。私の場合、あなたがやろうとしていたことにできるだけ近づけるために日付を試しました. あなたのキューブに似たようなクエリを書いたところ、43 秒で実行されました。この新しいものは約 2 秒で実行され、かなりの量のデータがあるため、アグリゲーションが構築されていると仮定すると、はるかに高速に実行されるはずです。
MDX の問題は、何かを実行する方法が 18 通りもあるのに、うまく動作するのは 1 つか 2 つだけだということです。
幸運を。