Je dois calculer un regroupement de mesures par date dans une plage de dates en tenant compte des dates de début et de fin d'une dimension. L'objectif est de compter le nombre d'élèves d'une école spécifique actifs chaque jour d'une période.MDX - Comment regrouper par date en tenant compte des dates de début et de fin dans une dimension
Le code SQL suivant fonctionne sur Data Warehouse (source de cube).
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]
Le jeu de résultats est comme ce qui suit:
+--------------+----------+
| 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 |
+--------------+----------+
J'essaie de fait le code MDX. Ce qui suit est ce que j'ai essayé. Je ne sais pas comment filtrer le jour en utilisant la logique dans l'instruction CASE (entre « ??? » marques):
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])
Je ne peux pas comprendre comment appliquer cela. Ma date (t.date) est inconnue. Il est informé en cours d'exécution. Voulez-vous dire construire un nouveau fait agrégeant FactStudents par DimTime? –
J'ai pointé les étapes ci-dessus. –
Je comprends maintenant. Je suis juste effrayé par la quantité de lignes dans ce fait pour notre réalité: 1,3M Étudiants * 365 jours (en moyenne). –