[英]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.