过滤后的 DistinctCount 度量和 MDX 未提供与 SQL 相同的结果

Filtered DistinctCount Measure and MDX Not Delivering Same Results as SQL

我有以下两个查询,一个SQL,一个MDX:

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];

我试图在 "count the number of students in a year who enrolled for that year before or during the 8th week of that year" 和 year = term_year 两个方面表达这个想法。

在我的 SSAS 多维数据集中,Enrolments 度量是 student_id 上的 DistinctCount。在 SQL 查询中,term_report_year 等同于 MDX.

中的 Term Year

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

我认为这与 MDX 每周重复计算有关,但我不知道如何解决它。

试试这个。我希望它将年总数过滤到几周 <= 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]
);