如何在SSAS / MDX中的用户定义层次结构中获取级别的“(全部)”值

时间:2014-02-10 10:46:43

标签: 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]

2 个答案:

答案 0 :(得分:2)

您可以使用

SELECT [Measures].[Internet Sales Amount] ON 0,
Hierarchize([Date].[Calendar].[Calendar Year] + [Date].[Calendar].[Month]) ON 1
FROM [Adventure Works]

这将显示每年在月份之前包含其价值(包含在其中的月份总和)。

+是MDX中Union的缩写形式,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]

请注意,计算成员不需要返回数字,也可以返回字符串。

答案 1 :(得分:1)

使用allmembers,你应该返回ALL行,然后每年和每个月。如果您只对所有行感兴趣,可以将其更改为:

SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar Year] * [Date].[Month of Year]) ON 1
FROM [Adventure Works]

注意它是如何仅指定Dimension和层次结构的。

如果您想获取没有all行的数据,请使用以下内容:

SELECT [Measures].[Internet Sales Amount] ON 0,
([Date].[Calendar Year].children * [Date].[Month of Year].children) ON 1
FROM [Adventure Works]