过滤后的 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]
);
我有以下两个查询,一个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]
);