2014-02-26 65 views
0

我正在使用SSAS OLAP並且我想要應用層次結構級別的排序。如何通過MDX對OLAP(SSAS)中的特定層次結構級別進行排序

我知道,我可以通過訂單功能的整個層次排序(我有,當我嘗試應用DESC在整個層次排序的一些問題),但我真正想實現的是一個具體的分類水平。例如,在[日期],[日曆]層級(Adventure Works的立方),我想有ASC分揀年,降序排序區的,ASC排序幾個月,等 我不想打破層次結構(使用BASC或BDESC),我只需要它們在同一層次上排序。你有一個想法,如果這是可能的,因爲我無法找到任何simillar?

回答

0

事實證明,不可能達到預期的效果 - 沒有這樣的MDX查詢可以用不同的排序類型對不同的級別排序。更多信息請參見this thread

0

你可以做的是交叉連接有序的相應屬性層次結構。你能否確認以下結果:

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] 

包括所有成員可以幫助(。[日期] [日曆年]而不是[日期] [日曆年]在第一CROSSJOIN組的情況下)

菲利普,

+0

謝謝你的回答菲利普!不幸的是,這不起作用 - 也許我還不夠清楚 - 我的想法是根據他們的關鍵而不是衡量標準對關卡進行排序。例如,如果我們有如下的結構: -2009 -Q1 -Jan -Feb -Q2 - 5月 - 6月 -2010 -Q1 -Jan -Feb -Q2 - 5月 - 六月 我希望能夠(,DESC幾個月了,年的宿舍DESC,ASC)依照以下的順序對數據進行排序: -2010 -Q1 -Feb -Jan -Q2 - 6月 - May -2009 -Q1 -Feb -Jan -Q2 -June -May – Vladimirov

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

相關問題