2017-02-24 1 views
0

내가 가지고있는 다음과 같은 두 개의 쿼리, 하나의 SQL, 하나의 MDX :필터링 DistinctCount 측정 및 MDX는 SQL과 동일한 결과를 제공하지

SQL :

SELECT t.term_report_year, COUNT(*) 
FROM(
    SELECT DISTINCT de.term_report_year, fe.student_id 
    FROM warehouse.FactEnrolments fe 
    INNER JOIN warehouse.DimDate dd 
    ON fe.term_record_creation_fk = dd.DateKey 
    INNER JOIN warehouse.DimTermEnrolments de 
    ON fe.term_enrolments_fk = de.term_enrolments_pk 
    WHERE dd.ISOWeekNumberOfYear <= 8 OR dd.ISOYearCode < de.term_report_year 
) t 
GROUP BY t.term_report_year 
ORDER BY term_report_year 

MDX :

SELECT 
    NON EMPTY 
    Measures.[Enrolments] ON COLUMNS 
,NON EMPTY 
     Filter 
     (
      [Term Enrolments].[Term Year].Children * 
      [Term Record Creation].[ISO Year Code].children * 
      [Term Record Creation].[ISO Week Number Of Year].children 
     , 
     Cint([Term Record Creation].[ISO Week Number Of Year].CurrentMember.Member_Key) <= 8 
     OR 
     Cint([Term Record Creation].[ISO Year Code].CurrentMember.Member_key) < Cint([Term Enrolments].[Term Year].CurrentMember.Member_key) 
    ) ON ROWS 
FROM [Enrolments]; 

I "그 해의 8 주 전 또는 그 해에 등록한 한 해의 학생 수를 계산하십시오"여기서 year = term_year 인 아이디어를 표현하려고합니다.

내 SSAS 큐브에서 Enrolments 측정 값은 DistinctCountstudent_id입니다. SQL 쿼리에서 term_report_yearMDXTerm Year과 같습니다.

누군가 두 검색어가 동일한 숫자를 제공하지 않는 이유를 설명해주세요. 2016에 대한 SQL은 2803을, MDX 2948은?

저는 MDX가 몇 주 동안 두 번 계산되는 것과 관련이 있다고 생각하지만 해결 방법을 찾을 수는 없습니다.

답변

3

시도해보십시오. 나는 그것이 일주일에 일년을 걸러 낼 수 있기를 희망한다. < = 8

SELECT 
    NON EMPTY 
    Measures.[Enrolments] ON COLUMNS 
,NON EMPTY [Term Enrolments].[Term Year].Children ON ROWS 
FROM (
SELECT 
     Filter 
     (
      [Term Enrolments].[Term Year].Children * 
      [Term Record Creation].[ISO Year Code].children * 
      [Term Record Creation].[ISO Week Number Of Year].children 
     , 
     Cint([Term Record Creation].[ISO Week Number Of Year].CurrentMember.Member_Key) <= 8 
     OR 
     Cint([Term Record Creation].[ISO Year Code].CurrentMember.Member_key) < Cint([Term Enrolments].[Term Year].CurrentMember.Member_key) 
    ) ON COLUMNS 
    FROM [Enrolments] 
); 
+0

고마워. 그거야. 왜 그것이 효과가 있고 다른 것은 효과가 없는지 설명 할 수 있습니까? 나는 쿼리에서 어떤 일이 일어나고 있는지 정말로 이해하지 못한다. – Ben

+1

@fluffybonkers 확실합니다. 하위 쿼리가있는 FROM 절은 주만 <= 8을 반환합니다. 이렇게하면 연간 총계를 검색 할 때 전체 연도가 아니라 주 <= 8의 하위 집합이됩니다. – GregGalloway

관련 문제