5
ディメンションの開始日と終了日を考慮して日付の範囲で日付別にメジャーグループを計算する必要があります。その目的は、ある期間中に毎日活動している特定の学校の生徒数を数えることです。MDX - ディメンションの開始日と終了日を考慮して日付別に集計する方法
次のSQLコードは、データウェアハウス(キューブのソース)で動作します。
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]
結果セットは、次のようなものです:
+--------------+----------+
| 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 |
+--------------+----------+
私はMDXコードを作ってみてください。以下は私が試みたものです。私は(「???」マーク間)CASE文でロジックを使用して一日フィルタリングする方法がわからない:
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])
を私はこれを適用する方法を理解することはできません。私の日付(t.date)は不明です。実行時に通知されます。 FactTimeをDimTimeで集約した新しい事実を構築することを意味しましたか? –
私は上記の手順を指摘しました。 –
私は今理解しています。私は現実のためにその事実の列の数についてちょうど怖いです:1,3M学生* 365日(平均)。 –