UserGroups
ディメンションが複数の階層で構成されるSSASマルチディメンションキューブで作業しています。各階層は、ユーザーを特定のグループに属するものとして分類します。ユーザーは複数のグループに所属できます。共有ディメンションの階層ごとに1行の高速MDXクエリ
ディメンションの階層ごとに1つの行を含むテーブルを生成しようとしています。
WITH
MEMBER [Measures].[Group Name] AS
CASE
WHEN [UserGroups].[Group A].CurrentMember.MemberValue <> 'All' THEN "Group A"
WHEN [UserGroups].[Group B].CurrentMember.MemberValue <> 'All' THEN "Group B"
-- More user groups...
WHEN [UserGroups].[Group T].CurrentMember.MemberValue <> 'All' THEN "Group T"
ELSE "Error"
END
SELECT
{[Members].[Group Name], [Measures].[User Count], [Measures].[Revenue]} ON 0,
Order(
UNION(
[UserGroups].[Group A].&[True] *
{[UserGroups].[Group B].[All]} *
-- More user groups...
{[UserGroups].[Group T].[All]},
[UserGroups].[Group A].[All] *
{[UserGroups].[Group B].&[True]} *
-- More user groups...
{[UserGroups].[Group T].[All]},
-- A bunch more blocks so that there is one for each row.
[UserGroups].[Group A].[All] *
{[UserGroups].[Group B].[All]} *
-- More user groups...
{[UserGroups].[Group T].&[True]}
),
)
ON 1
FROM [Finances];
これは予想されるテーブルを生成することに成功し
:
Group Name User Count Revenue
All All ... True Group T 90 1800
... ... ... ... ... ... ...
All True ... All Group B 20 400
True All ... All Group A 10 100
しかし、クエリが非常に遅いです、私が出ている最善のアプローチは、次のようです。任意の行は、約30秒で孤立して計算できます。 UNION
ステートメントを使用して行を結合すると、追加の行が1つ増えるたびに、計算時間が意図的に増加するのではなく、計算時間が指数関数的に増加するように見えます。
- この増加時間はなぜ観測されますか?
- 基本となるエンジンに各行を単独で計算させる方法はありますか?
- このクエリを発行するための簡単な方法はありますか?
これは驚くべきことですが、各行は非常に遅いです。ユーザーカウントは通常のSUM指標ですか?ファクトテーブルは何行ですか?グループAによるユーザーカウントの単純なクエリを実行しただけの場合、その1つのセルを取得するのにどれくらい時間がかかりますか?収益はどうですか?質問に含まれるもの以外に、他の計算方法がありますか? – GregGalloway
キューブを変更する緯度はありますか?多対多のUserGroupディメンションは理にかなっています。それがオプションかどうか私に教えてください。 – GregGalloway