/ / SSAS Cubeで計算された数値が非常に遅いか、すべての機能がない - パフォーマンス、ssas、mdx、cube

SSAS Cubeで計算された数値が非常に遅いか、すべての機能がない - パフォーマンス、ssas、mdx、cube

私は、MDXで書かれた多くの計算された尺度を持つSSASキューブを持っています。

1つの具体的なことが私にトラブルを引き起こしています - Running Totals。

計算された数値データの目的

計算された数値は、すべての動きB.O.T.時の終わりまで、 私たちが現在の日に達したために動きがなくなった場合、私の時間次元に日付がなくなるまで値を繰り返す必要があります。 例:

FY13  0.00
FY14  10.00
FY15  13.00
FY16  14.00
FY17  20.00
FY18  20.00
FY19  20.00
FY20  20.00
FY21  20.00

また、この測定はすべての私の日付階層に沿って機能するはずです(4つあります)。 私は実際には、次のコードで意図したとおりに動作するようにしました:

CREATE MEMBER CURRENTCUBE.[Measures].[Actual Balance LCY]
AS AGGREGATE(
{NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember}
* {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember}
* {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember}
* {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember}
,[Measures].[Actual LCY]
),
FORMAT_STRING = "#,##0.00;-#,##0.00",
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = "Actual";

問題:

小節がピボットテーブルに追加されると、Excelなど2つの次元が列に追加され、1つの日付階層が列に追加され、クエリが非常に遅くなります。 40-60秒(私はこれが遅いと知っています。同じデータ量で同じピボットテーブルを5〜10秒で実行するtimeXtenderでレガシーキューブを構築しているためです)

追加した NON_EMPTY MDXに送信します。クエリは高速ですが、FY17の後にはそれ以上の値はありません。これは意図された動作ではありません。 レガシーソリューション NON_EMPTY も入力されていませんが、それはまだ高速です。

質問:

メジャーの意図された動作と合理的なクエリ速度の両方を得るにはどうすればよいでしょうか?

回答:

回答№1は1

あなたのパフォーマンスストッパーはここにあります:

{NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember}
* {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember}
* {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember}
* {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember}

この交差結合操作は単に重すぎる。 あなたが好きなものを選んでください:

1:どの階層を選択するかによって結果が得られます(すべてをクロス結合する必要はありません)。

Aggregate(
case
when not [Posting Date].[Calendar Year Y-Q-M-D].CurrentMember is [Posting Date].[Calendar Year Y-Q-M-D].DefaultMember
then {NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember}
when not [Posting Date].[Calendar Year Y-M-D].CurrentMember is [Posting Date].[Calendar Year Y-M-D].DefaultMember
then {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember}
when not [Posting Date].[Fiscal Year Y-M-D].CurrentMember is [Posting Date].[Fiscal Year Y-M-D].DefaultMember
then {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember}
when not [Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember is [Posting Date].[Fiscal Year Y-Q-M-D].DefaultMember
then {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember}
else NULL
end,
[Measures].[Actual LCY]
)

2:最大の尺度を追加する(現在のメンバーの最終日を知るようにする(階層に​​依存しない):

Aggregate(
NULL:StrToMember("[Posting Date].[Day].[" + cint([Measures].[Max Day]) + "]")
[Measures].[Actual LCY]
)