2017-06-28 9 views
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]) 

答えて

2

MDXは、SQLのようなその柔軟ではありません。私はあなたのFactStudentsテーブルに以下の条件を置くことをお勧めします:

t.[date] between m.[StartDate] and m.[EndtDate] 

、別の対策のように使用するか、または既存のものを交換してください。

あなたは次のことが必要です。

  1. DateID、StudentIDのフィールドを持つファクトテーブルを(以下のコードを参照してください)。
  2. 学生および日付の睡眠に関する測定値グループ。
  3. StudentIDフィールドのDistinctCount集計を使用したメジャー。

事実コード:

SELECT 
    t.[date] as DateID 
    ,a.[SKStudent] as StudentID 
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 e.SchoolCode = 123456 
    and t.[date] between m.[StartDate] and m.[EndtDate] 
+0

を私はこれを適用する方法を理解することはできません。私の日付(t.date)は不明です。実行時に通知されます。 FactTimeをDimTimeで集約した新しい事実を構築することを意味しましたか? –

+0

私は上記の手順を指摘しました。 –

+0

私は今理解しています。私は現実のためにその事実の列の数についてちょうど怖いです:1,3M学生* 365日(平均)。 –

関連する問題