2017-02-24 57 views
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措施是DistinctCountstudent_id。在SQL查询中,term_report_year相当于MDX中的Term Year

有人可以解释为什么这两个查询没有提供相同的数字,例如2016年的SQL给出2803和MDX 2948?

我认为这与整个星期的MDX双重计算有关,但我无法弄清楚如何解决这个问题。

回答

3

试试这个。我希望它会过滤一年总数只有几周< = 8

SELECT 
    NON EMPTY 
    Measures.[Enrolments] ON COLUMNS 
,NON EMPTY [Term Enrolments].[Term Year].Children ON ROWS 
FROM (
SELECT 
     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 COLUMNS 
    FROM [Enrolments] 
); 
+0

非常感谢。这样可行。你能解释一下它为什么会起作用,另一个不起作用吗?我真的不明白查询中发生了什么。 – Ben

+1

@fluffybonkers当然。带有子查询的FROM子句只返回周<= 8。这样,当您检索年度总数时,它不是全年总数,而是从<= 8周开始的子集。 – GregGalloway