2017-06-28 9 views
5

में प्रारंभ और समाप्ति तिथि पर विचार करके तिथि के अनुसार कैसे एकत्र करें मुझे आयाम में प्रारंभ और समाप्ति तिथियों पर विचार करने की तारीखों की तारीख में दिनांक के अनुसार मापने की आवश्यकता है। उद्देश्य एक विशिष्ट स्कूल के छात्रों की संख्या को गिनना है जो एक अवधि में प्रत्येक दिन सक्रिय होते हैं।एमडीएक्स - एक आयाम

निम्नलिखित 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 कोड बनाया का प्रयास करें। मैंने जो कोशिश की वह निम्नलिखित है। मैं कैसे ('???' के निशान के बीच) मामले बयान में तर्क का प्रयोग दिन को फ़िल्टर नहीं जानता:

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. छात्र आईडी पर 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) अज्ञात है। यह रनटाइम में सूचित है। क्या आपका मतलब DimTime द्वारा फैक्टस्ट्यूडेंट्स को एकत्रित करने वाला एक नया तथ्य बनाना था? –

+0

मैंने ऊपर दिए गए चरणों की ओर इशारा किया है। –

+0

अब मैं समझता हूं। मैं इस तथ्य में हमारी वास्तविकता के लिए पंक्तियों की मात्रा के बारे में डरता हूं: 1,3 एम छात्र * 365 दिन (औसत में)। –

संबंधित मुद्दे