2010-11-16 64 views
1

我是mdx的新手,現在一直在嘗試解決以下問題。任何幫助,將不勝感激:MDX結果分類

我的查詢:

select {[Measures].[Kunden]} ON COLUMNS, 
NON EMPTY Hierarchize(Union({CurrentDateMember([dimZeit], "[\di\mZeit] 
\.[yyyy]"), CurrentDateMember([dimZeit], "[\di\mZeit]\.[yyyy]").Children}, 
CurrentDateMember([dimZeit], "[\di\mZeit]\.[yyyy]\.[q]").Children))) ON ROWS 
FROM Center 

這給下面的結果,符合市場預期:

Zeit  Kunden 
2010  1561 
- Q1  523 
- Q2  470 
- Q3  256 
- Q4  312 
    - Nov. 312 

現在,我要實現的是進行拆分的列「Kunden '分爲'昆登< 5分鐘'和'昆登5分鐘'這意味着等待少於或超過5分鐘的客戶。

我能得到的最接近的是以下幾點:

WITH 
MEMBER [Measures].[LT5] AS 
Aggregate(
Filter([Measures].[Kunden], [Measures].[Wartezeit] < 3000)) 
select {[Measures].[LT5]} ON COLUMNS, 
NON EMPTY Hierarchize(Union({CurrentDateMember([dimZeit], "[\di\mZeit]\.[yyyy]"), 
CurrentDateMember([dimZeit], "[\di\mZeit]\.[yyyy]").Children}, 
CurrentDateMember([dimZeit], "[\di\mZeit]\.[yyyy]\.[q]").Children)) ON ROWS 
FROM Center 

結果是:

Zeit  Kunden 
2010  - 
- Q1  75 
- Q2  23 
- Q3  86 
- Q4  71 
    - Nov. 71 

我明白這樣做的原因是,因爲聚集[措施] [Wartezeit]對。 2010年全年超過3000秒。但我希望看到等待時間低於3000秒的客戶數量,因此2010年應該爲75 + 23 + 86 + 71 = 255。

回答

2

通過在wartezeit列上創建退化維來解決此問題看起來像這樣在蒙德里安:

<Dimension name="dauer"> 
    <Hierarchy hasAll="true"> 
    <Level name="dauer" column="dauer" uniqueMembers="true"> 
     <KeyExpression> 
     <SQL dialect="generic"> 
      <![CDATA[(case when dauer < 300 then 'LT5' 
          when dauer < 600 then 'LT10' 
          else 'GT60' 
        end)]]></SQL> 
     </KeyExpression> 
    </Level> 
    </Hierarchy> 
</Dimension> 

我查詢的SELECT子句現在是一個簡單的交叉連接:

({[Measures].[Kunden]} * {[dauer].[LT5], [dauer].[LT10], [dauer].[GT60]})