0
我有以下两个查询,一个SQL,一个MDX:过滤DistinctCount措施和MDX没有带来同样的结果SQL
SQL:
SELECT t.term_report_year, COUNT(*)
FROM(
SELECT DISTINCT de.term_report_year, fe.student_id
FROM warehouse.FactEnrolments fe
INNER JOIN warehouse.DimDate dd
ON fe.term_record_creation_fk = dd.DateKey
INNER JOIN warehouse.DimTermEnrolments de
ON fe.term_enrolments_fk = de.term_enrolments_pk
WHERE dd.ISOWeekNumberOfYear <= 8 OR dd.ISOYearCode < de.term_report_year
) t
GROUP BY t.term_report_year
ORDER BY term_report_year
MDX:
SELECT
NON EMPTY
Measures.[Enrolments] ON COLUMNS
,NON EMPTY
Filter
(
[Term Enrolments].[Term Year].Children *
[Term Record Creation].[ISO Year Code].children *
[Term Record Creation].[ISO Week Number Of Year].children
,
Cint([Term Record Creation].[ISO Week Number Of Year].CurrentMember.Member_Key) <= 8
OR
Cint([Term Record Creation].[ISO Year Code].CurrentMember.Member_key) < Cint([Term Enrolments].[Term Year].CurrentMember.Member_key)
) ON ROWS
FROM [Enrolments];
我我试图在这两个方面表达这个想法,“统计当年第8周之前或期间注册的一年中的学生人数”,其中year = term_year
。
在我的SSAS立方体Enrolments
措施是DistinctCount
在student_id
。在SQL
查询中,term_report_year
相当于MDX
中的Term Year
。
有人可以解释为什么这两个查询没有提供相同的数字,例如2016年的SQL
给出2803和MDX
2948?
我认为这与整个星期的MDX双重计算有关,但我无法弄清楚如何解决这个问题。
非常感谢。这样可行。你能解释一下它为什么会起作用,另一个不起作用吗?我真的不明白查询中发生了什么。 – Ben
@fluffybonkers当然。带有子查询的FROM子句只返回周<= 8。这样,当您检索年度总数时,它不是全年总数,而是从<= 8周开始的子集。 – GregGalloway