I need to calculate the grouping of measures by date in a date range, given the start and end dates in the dimension. The goal is to count the number of students in a particular school who are assets every day during the period.
The following SQL code runs in a data warehouse (cube source).
SELECT
t.[date]
,count(distinct a.SKStudent) as Students
FROM DM.DimTime t
CROSS JOIN DM.FactStudents a
INNER JOIN DM.DimStudents m ON a.SKStudent = m.SKStudent
INNER JOIN DM.DimSchool e ON a.SKSchool = e.SKSchool
WHERE t.[date] between '20170502' and '20170512'
and e.SchoolCode = 123456
and t.[date] between m.[StartDate] and m.[EndtDate]
GROUP BY t.[data]
The result set is as follows:
+--------------+----------+
| date | Students |
+--------------+----------+
| 2017-05-02 | 567 |
| 2017-05-03 | 567 |
| 2017-05-04 | 568 |
| 2017-05-05 | 570 |
| 2017-05-06 | 570 |
| 2017-05-07 | 570 |
| 2017-05-08 | 573 |
| 2017-05-09 | 573 |
| 2017-05-10 | 571 |
| 2017-05-11 | 568 |
| 2017-05-12 | 568 |
+--------------+----------+
I am trying to make MDX code. The following is what I tried. I do not know how to filter the day using the logic in the CASE expression (between the "???" marks):
WITH SET DateRange AS
[Dim Time].[Date].&[20170502]:[Dim Time].[Date].&[20170512]
MEMBER StudentsByDay AS
AGGREGATE(DateRange,
???CASE WHEN DateRange.CURRENTMEMBER
BETWEEN [Dim Students].[Start Date]
AND [Dim Students].[End Date]
THEN [Measures].[Students Count]
ELSE NULL END???)
SELECT
NON EMPTY { [StudentsByDay] } ON COLUMNS,
NON EMPTY { [DateRange] } ON ROWS
FROM [Education]
WHERE ( [Dim School].[School Code].&[123456] )
source
share