如何通过MDX对OLAP(SSAS)中的特定层次结构级别进行排序

时间:2014-02-26 21:06:18

标签: sorting ssas mdx hierarchy olap

我正在使用 SSAS OLAP ,我想应用层次结构级别的排序。

我知道我可以通过ORDER函数对整个层次结构进行排序(当我尝试在整个层次结构上应用 DESC 排序时,我遇到了一些问题),但我真正想要实现的是排序特定级别。例如在[日期]。[日历]层次结构(Adventure Works Cube)中,我希望 ASC 排序年份, DESC 排序季度, ASC 几个月的分类等 我不想破坏层次结构(使用BASC或BDESC),我只需要在同一级别上排序。你知道这是否可行,因为我无法找到任何类似的东西?

3 个答案:

答案 0 :(得分:0)

您可以做的是交叉加入有序的correspoding属性层次结构。您能否验证以下结果:

select
[Measures].[Internet Sales Amount] on 0,

Order(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Measures].[Internet Sales Amount]
,ASC)
*
Order(
[Date].[Calendar Quarter of Year].[Calendar Quarter of Year].MEMBERS,
[Measures].[Internet Sales Amount]
,DESC)
*
Order(
[Date].[Calendar].[Month].MEMBERS,
[Measures].[Internet Sales Amount]
,ASC)

ON 1
from [Adventure Works]

包括所有成员可以提供帮助([日期]。[日历年]而不是[日期]。[日历年],如果是第一个交叉连接集)

菲利普,

答案 1 :(得分:0)

以下是一个有效的解决方案,如果不是一个非常好的解决方案:

WITH MEMBER Measures.[year] as
            [Date].[Calendar].CurrentMember.Properties('Key0', typed)
     MEMBER Measures.[qtr or mth] as
            [Date].[Calendar].CurrentMember.Properties('Key1', typed)
     MEMBER Measures.[sortKey] as
            CASE
                WHEN [Date].[Calendar].CurrentMember.Level IS [Date].[Calendar].[Calendar Year] THEN
                     Measures.[year] * 1000
                WHEN [Date].[Calendar].CurrentMember.Level IS [Date].[Calendar].[Calendar Quarter] THEN
                     Measures.[year] * 1000 + (5 - Measures.[qtr or mth]) * 100
                ELSE // month
                     Measures.[year] * 1000 + (4 -  Int((Measures.[qtr or mth] - 1) / 3)) * 100 + Measures.[qtr or mth]
            END
SELECT {Measures.[year], Measures.[qtr or mth], Measures.[sortKey]}
       ON COLUMNS,
       Order(
               [Date].[Calendar].[Calendar Year]
               +
               [Date].[Calendar].[Calendar Quarter]
               +
               [Date].[Calendar].[Month]
               ,
               Measures.[sortKey]
               ,BASC
       )
       ON ROWS
FROM [Adventure Works]

列上的措施只是为了澄清它是如何工作的。并且主要逻辑是生成sortKey度量,其生成如下的整数密钥:年份的四位数,倒数季度的一位数(Q4-> 1,...... Q1-> 4),每月两位数。然后,使用它,可以直接调用Order来返回已排序的集合。

答案 2 :(得分:0)

事实证明,不可能达到预期的效果 - 没有这样的MDX查询可以使用不同的排序类型对不同的级别进行排序。有关详细信息,请参阅this thread