下面是一個可行的解決方案,如果沒有一個非常好的一個:
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
返回排序集。
謝謝你的回答菲利普!不幸的是,這不起作用 - 也許我還不夠清楚 - 我的想法是根據他們的關鍵而不是衡量標準對關卡進行排序。例如,如果我們有如下的結構: -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