调查MDX DistinctCount差异

时间:2015-06-09 01:51:06

标签: sql-server ssas distinct mdx olap

当我运行时:

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),但这个连接两者的查询确实返回“count 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是什么。

除了我在这里写的东西之外,我已经尝试了一些事情(遗漏因为这已经很长了)但是我总是拿出“计数A”作为我的总结果。

如何查找由DistinctCount调用计算的不同成员列表?

(或者,发现这种差异的原因的最佳方法是什么)

2 个答案:

答案 0 :(得分: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]

这也计算空单元格,因此应该返回更大的值。

答案 1 :(得分: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];