2015-09-07 32 views
1

我想確定兩個日期之間特定工作日的數量(例如星期一,星期二等....)。我認爲像下面這樣應該工作,但會員返回1.如何獲取mdx中相同成員的數量?

我做錯了什麼?

WITH 
    MEMBER measures.NumberOfSameWeekDays AS 
    Count([Dim Date].[Day Of Week].CurrentMember) 
SELECT 
    measures.NumberOfSameWeekDays ON COLUMNS 
,[Dim Date].[Day Of Week].[Day Of Week] ON ROWS 
FROM [test] 
WHERE 
    (
    [Dim Client].[Common Client UID].&[{ED8822E7-2873-4388-BC3A-CC553D939FC4}] 
    , 
    [Dim Date].[Date Int].&[20150701] : [Dim Date].[Date Int].&[20150731] 
); 
+0

這將始終返回1:'Count( .currentmember上使用的某個層次結構)'...因爲結果集的上下文中有1個成員是_currently_。 – whytheq

+0

你能舉一個代碼示例嗎? – Timsen

+0

'.CurrentMember'是一個函數,它返回行上的成員 - 如果一行上有一個成員,則它返回1.不需要示例。在你星期二說的那個行的腳本中,'.Currentmember'函數計算星期二在星期二排行了多少次...... 1. – whytheq

回答

1

這是正在發生的事情證明:

WITH 
    MEMBER measures.NumberOfSameWeekDays AS 
    Count([Date].[Day of Week].CurrentMember) 
    MEMBER measures.WeekDayCurrentMem AS 
    [Date].[Day of Week].CurrentMember.Member_Caption 
SELECT 
    { 
    measures.NumberOfSameWeekDays 
    ,measures.WeekDayCurrentMem 
    } ON COLUMNS 
,[Date].[Day of Week].[Day of Week] ON ROWS 
FROM [Adventure Works] 
WHERE 
    [Date].[Calendar].[Date].&[20050101] 
    : 
    [Date].[Calendar].[Date].&[20050116]; 

這裏是上面的結果:

enter image description here

這裏是上述行爲的解決方案:

WITH 
    MEMBER measures.NumberOfSameWeekDays AS 
    Count 
    (
     (EXISTING 
     [Date].[Day of Week].CurrentMember * [Date].[Calendar].[Date]) 
    ) 
SELECT 
    { 
    measures.NumberOfSameWeekDays 
    } ON COLUMNS 
,[Date].[Day of Week].[Day of Week] ON ROWS 
FROM [Adventure Works] 
WHERE 
    [Date].[Calendar].[Date].&[20050101] 
    : 
    [Date].[Calendar].[Date].&[20050131]; 

這將返回以下:

enter image description here


Sourav的答案的簡化版本 - 雖然仍然相當複雜 - 可能緩慢,因爲它使用的生成是迭代:

WITH 
    MEMBER Measures.CountOfDays AS 
    Generate 
    (
     (EXISTING 
     [Date].[Date].[Date].MEMBERS) 
    ,[Date].[Day of Week] 
    ,ALL 
    ).Count 
SELECT 
    Measures.CountOfDays ON 0 
,[Date].[Day of Week].[Day of Week].MEMBERS ON 1 
FROM [Adventure Works] 
WHERE 
    [Date].[Calendar].&[2005] : [Date].[Calendar].&[2006]; 
+0

讓我修改我的答案..現在就刪除它。 – SouravA

+0

@SouravA上面有什麼問題? – whytheq

+0

什麼都沒有。其實你的感覺更好。添加我的答案只是爲了滿足我對解決方案的最初理解。 – SouravA

1

冒險Works版本:

WITH MEMBER Measures.CountOfDays AS 
GENERATE 
    (
    EXISTING [Date].[Date].[Date].MEMBERS, 
    EXISTING [Date].[Day of Week].[Day of Week].MEMBERS 
    ,ALL 
    ).COUNT 


SELECT Measures.CountOfDays ON 0 
,[Date].[Day of Week].[Day of Week].MEMBERS ON 1 
FROM [Adventure Works] 
WHERE [Date].[Calendar].&[2005]: [Date].[Calendar].&[2006] 

GENERATE部分可以在當前上下文中獲得幾周的所有日子,並基於您可能擁有的任何過濾器。

+0

沒有probs - 我在上面的答案中增加了一個更簡單的版本 - 關於'Generate'的小健康警告。 – whytheq

+0

這裏是一個給你:http://stackoverflow.com/questions/32441887/mtd-without-using-the-mtd-function – whytheq

+0

完成..現在給我的cookie;) – SouravA