繁体   English   中英

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

[英]How to sort specific Hierarchy Level in OLAP (SSAS) via MDX

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

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

您可以做的是交叉连接有序的对应属性层次结构。 您可以验证以下结果:

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]

包括所有成员都可以提供帮助(在第一个交叉联接集的情况下,[日期]。[日历年]而不是[日期]。[日历年])

菲利普

以下是一个可行的解决方案,即使不是一个很好的解决方案:

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返回排序后的集合。

事实证明,不可能达到预期的效果-没有这样的MDX查询可以使用不同的排序类型对不同级别进行排序。 该线程中提供了更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM