2015-08-31 40 views
0

我有一個SSAS立方體尺寸如下:訂單層次結構成員的自然順序

Time 
    DayName <- Hierarchy 

Item 
    Description <- Hierarchy 

Measures維我對LostAmount措施。

我想查詢多維數據集,以便我可以得到每週每天丟失的金額總和。下面的查詢工作:

select 
    except(Time.DayName.members, {Time.DayName.[All]}) on 0, 
    except(Item.Description.members, {Item.Description.All}) on 1 
from Cube 

但在返回結果時列的順序不是工作日的自然順序(即列的順序是Friday, Monday, Sunday etc)。

Query results.

我怎麼能有在工作日即Monday, Tuesday etc.自然秩序的結果列?

+1

這是奇怪的'除(Time.DayName.members, {Time.DayName。[All]})'爲什麼不只是'Time.DayName.DayName'? – whytheq

+1

@whytheq,因爲我不知道你能做到這一點:) – RePierre

回答

1

如果你看看你的截圖,在Time.DayName級別的日子是按自然順序排序:它是成員名稱的字母順序。

SSAS無法「知道」您想要的訂單是什麼。我建議在此維度中添加一個Key列,按照您需要的順序對日期進行編號,並將維度屬性的OrderBy屬性更改爲Key而不是Name。 (也許你已經有一個關鍵:但OrderBy = Name自然會按他們的名字排列成員)。

此外: SSAS中有一個維屬性Type屬性,可以設置爲「星期幾」 - 但我從來沒有使用它,不知道它是否能正確檢測到您的成員名字是工作日的名字。或者它是否會在你想從一週開始的「正確」日開始排序。你可以嘗試設置它,看看會發生什麼。

1

儘管更改立方體結構肯定會更好,但有時這不是一個可行的選項。在這種情況下,它必須在MDX代碼內處理(這是較慢的)。以下是一種方法。

WITH 
    MEMBER measures.weekdaynumber AS 
    CASE Time.DayName.CURRENTMEMBER 
     WHEN "Monday" THEN 1 
     WHEN "Tuesday" THEN 2 
     WHEN "Wednesday" THEN 3 
     WHEN "Thursday" THEN 4 
     WHEN "Friday" THEN 5 
     WHEN "Saturday" THEN 6 
     WHEN "Sunday" THEN 7 
    END 

SELECT 
    Order 
    (
    Except 
    (
     Time.DayName.MEMBERS 
    ,{Time.DayName.[All]} 
    ) 
    ,Measures.weekdaynumber 
) ON 0 
,Except 
    (
    [Item].[Description].MEMBERS 
    ,{[Item].[Description].[All]} 
) ON 1 
FROM [Cube]; 
+0

(提高)我喜歡這個措施 – whytheq

0

我已經找到了排序問題的解決方法通過定義在Measures尺寸其他成員並將其輸出所需的順序:

with 
member Measures.Monday as 
    sum(Time.DayName.&[Monday], Measures.LostValue) 
member Measures.Tuesday as 
    sum(Time.DayName.&[Tuesday], Measures.LostValue) 
member Measures.Wednesday as 
    sum(Time.DayName.&[Wednesday], Measures.LostValue) 
member Measures.Thursday as 
    sum(Time.DayName.&[Thursday], Measures.LostValue) 
member Measures.Friday as 
    sum(Time.DayName.&[Friday], Measures.LostValue) 
member Measures.Saturday as 
    sum(Time.DayName.&[Saturday], Measures.LostValue) 
member Measures.Sunday as 
    sum(Time.DayName.&[Sunday], Measures.LostValue) 
select 
{ 
    Measures.Monday, 
    Measures.Tuesday, 
    Measures.Wednesday, 
    Measures.Thursday, 
    Measures.Friday, 
    Measures.Saturday, 
    Measures.Sunday 
} on 0, 
except(Item.Description.members, {Item.Description.[All]}) on 1 
from [Cube]