0
處理包含由多個層次結構組成的UserGroups
維的SSAS多維數據集。每個層次結構都將用戶分類爲屬於特定的組。用戶可以屬於多個組。在共享維上針對每層的一行快速MDX查詢
嘗試爲維度中的每個層次結構生成一行。我想出最好的辦法是:
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
語句組合行時,每個額外的行似乎導致計算時間呈指數增長,而不是計算時間中所需的線性增加。
- 爲什麼觀察到這種增加的時間?
- 是否有方法指示底層引擎單獨計算每行?
- 只有更好的方法來發出此查詢嗎?
令人驚訝的是每一行都很慢。用戶是否計數常規SUM度量?事實表有多少行?如果您只是通過組A進行了簡單的用戶計數查詢,需要多長時間才能檢索到一個單元格?收入如何?除了問題之外,還有其他計算方法嗎? – GregGalloway
你有改變立方體的自由度嗎?多對多的UserGroup維度是有意義的。讓我知道如果這是一個選項。 – GregGalloway