ssas - 如何获取 SSAS/MDX 中用户定义层次结构中级别的 "(all)"值

标签 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 按层次顺序对集合进行排序,这意味着父项在子项之前。

如果您想要与第一个结果类似的结果,我能想象的最接近的结果是通过如下计算的测量:

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]

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

关于ssas - 如何获取 SSAS/MDX 中用户定义层次结构中级别的 "(all)"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675051/

相关文章:

处理 SSAS 表格 - 一个分区并保留数据库

sql-server - 累积总和-选择层次结构的部分

excel - SSAS 2005、Excel 2007、参差不齐的层次结构

mdx - icCube 架构刷新时间

reporting-services - 在 SSRS 上的 MDX 查询中对度量使用过滤器

command-line - 哪里可以下载ascmd.exe?

c# - 通过 ASHX 服务查询 OLAP 多维数据集

sql-server - 维度建模 : should a fact table have a foreign key?

sql-server - 如何在Excel中将SSAS维度属性数据类型设为数字

ssas - Mdx , All 和 All Members 差异