2015-06-09 28 views
0

當我運行此:調查MDX DistinctCount差異

WITH MEMBER MEASURES.SETDISTINCTCOUNT AS 
DISTINCTCOUNT([Student Term].[Student ID].MEMBERS) 
SELECT {MEASURES.SETDISTINCTCOUNT} ON 0 , 
[Student Term].[Term Code].&[1151] on 1 
FROM [Enrollment] 

我得到的用下面的SQL同意學生數(我將把這個正確的計數爲「計數A」):

SELECT COUNT(DISTINCT([student_id])) 
FROM dbo.Fact_Enrollments 
WHERE Term_Code = '1151' 

但不幸的是,當我運行此MDX(使用不同但類似的尺寸)我得到一個不同的計數小於「算A」:

WITH MEMBER MEASURES.SETDISTINCTCOUNT AS 
DISTINCTCOUNT([Student Term].[Student ID].MEMBERS) 
SELECT {MEASURES.SETDISTINCTCOUNT} ON 0 , 
[Term].[Term Type].[Academic Term].&[1151] ON 1 
FROM [Enrollment] 

我不知道如何找出第二個mdx查詢中出現了什麼問題(更直接地說,那個「Term」角色出了什麼問題)。起初我以爲也許Dim_Term表沒有完全加入到事實表(Fact_Enrollments),但此查詢其連接兩個,並返回「計數A」(正確的計數):

SELECT COUNT(DISTINCT([student_id])) 
FROM dbo.Fact_Enrollments 
INNER JOIN dbo.Dim_Term ON Acad_Term_Cd=Term_Code 
WHERE Acad_Term_Cd = '1151' 

我認爲也許最好的方法是查找進入第一個計數的所有不同學生ID的列表,然後對第二個計數執行相同的操作,並深入查看第一個列表中的那些,但不是其次,但我不知道如何確定導致我看到的CountDistinct結果的學生ID。

我已經嘗試了一些東西超出了我在這裏寫的東西(因爲這已經很長了,所以省略了),但是我一直想出「count A」作爲我的總結果。

如何查找由DistinctCount調用計數的不同成員的列表?

(或者是什麼,發現這個差異的原因的最好辦法)

回答

0

我敢肯定你的關係搞砸了。

有一件重要的事情你應該知道。 DISTINCTCOUNT實際上是Count of distinct NON-EMPTY

DistinctCount

取而代之的是第二個查詢,請嘗試以下:

WITH MEMBER MEASURES.SETDISTINCTCOUNT AS 
COUNT(DISTINCT([Student Term].[Student ID].MEMBERS)) 
SELECT {MEASURES.SETDISTINCTCOUNT} ON 0 , 
[Term].[Term Type].[Academic Term].&[1151] ON 1 
FROM [Enrollment] 

這也計數空白單元格,因此應該返回一個更大的價值。

+0

謝謝您的答覆。您建議的MDX會返回所有唯一學生id的計數(不論那些在學術術語「1151」中有記錄的學生),但我想要的是「Fact_Enrollments」中所有唯一學生ID的計數,其中Acad_Term_Cd(來自Dim_Term表由acad_term_cd = term_code加入)是'1151'(我原來的帖子中的SQL的第二位)。 – David

+0

爲了迴應你猜測關係搞砸了,下面是我所擁有的:在數據源視圖中,Fact_Enrollments和Dim_Term表之間有一個關係...其中Fact_Enrollments.Term_Code(外鍵表)= Dim_Term。 Acad_Term_Cd(主鍵表)。在這兩列中都沒有空值和空白,Fact_Enrollments.Term_Code中的每個值都在Dim_Term.Acad_Term_Cd中找到(這是唯一的)。我應該看到另一個關係嗎? – David

0

由於點小文章Sourav的劇本請加EXISTING關鍵字:

WITH MEMBER MEASURES.SETDISTINCTCOUNT AS 
    COUNT(DISTINCT(EXISTING [Student Term].[Student ID].MEMBERS)) 
SELECT 
    {MEASURES.SETDISTINCTCOUNT} ON 0 , 
    [Term].[Term Type].[Academic Term].&[1151] ON 1 
FROM [Enrollment];