I have the following two queries, one SQL, one 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];
I am trying to express the idea in both, "count the number of students in a year who enrolled for that year before or during the 8th week of that year" where year = term_year
.
In my SSAS cube the Enrolments
measure is a DistinctCount
on student_id
. In the SQL
query, term_report_year
is equivalent to Term Year
in the MDX
.
Could someone please explain why the two queries are not delivering the same numbers eg the SQL
for 2016 gives 2803 and the MDX
2948?
I think it has something to do with the MDX double counting across the weeks, but I can't work out how to fix it.
Try this. I am hopeful it will filter the year total to just weeks <= 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]
);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.