[英]How to get an “(all)” value for a level in a user defined hierarchy in SSAS/MDX
我試圖弄清楚如何獲得用戶定義層次結構中某個級別的總計。 例如,如果我這樣做(在此處使用Adventure工作):
SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar Year].ALLMEMBERS * [Date].[Month of Year].ALLMEMBERS) ON 1
FROM [Adventure Works]
我得到每一對年/月值的總計。
如何使用“日期”維度中的“日歷”用戶層次結構重寫此查詢? 例如:
SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar].[Year] * [Date].[Calendar].[Month]) ON 1
FROM [Adventure Works]
您可以使用
SELECT [Measures].[Internet Sales Amount] ON 0,
Hierarchize([Date].[Calendar].[Calendar Year] + [Date].[Calendar].[Month]) ON 1
FROM [Adventure Works]
這將在月份之前向您顯示包含其值(即其中包含的月份的總和)的每年。
+
是MDX中Union
的縮寫形式,並且Hierarchize
按Hierarchize
對集合進行排序,這意味着父級先於子級。
而且,如果您希望獲得與第一個結果相似的結果,那么我能想到的最接近的結果將是通過這樣的計算得出的度量得出的:
WITH Member Measures.Year AS
IIf([Date].[Calendar].CurrentMember.Level IS [Date].[Calendar].[Calendar Year],
[Date].[Calendar].CurrentMember.Name,
Ancestor([Date].[Calendar].CurrentMember, [Date].[Calendar].[Calendar Year]).Name
)
Member Measures.Month AS
IIf([Date].[Calendar].CurrentMember.Level IS [Date].[Calendar].[Month],
[Date].[Calendar].CurrentMember.Name,
'All Months'
)
SELECT {
Measures.Year,
Measures.Month,
[Measures].[Internet Sales Amount]
}
ON 0,
Hierarchize([Date].[Calendar].[Calendar Year] + [Date].[Calendar].[Month]) ON 1
FROM [Adventure Works]
請注意,計算所得成員不必返回數字,它們也可以返回字符串。
按原樣使用allmembers應該返回ALL行,然后返回每年和每月。 如果您只對所有行感興趣,則可以將查詢更改為:
SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar Year] * [Date].[Month of Year]) ON 1
FROM [Adventure Works]
請注意,它是如何僅指定維和層次結構的。
如果要獲取所有行都沒有的數據,請使用以下命令:
SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar Year].children * [Date].[Month of Year].children) ON 1
FROM [Adventure Works]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.