MDX结果分类

时间:2010-11-16 13:53:47

标签: olap mdx cube pentaho mondrian

我是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'分成列'Kunden< 5分钟'和'Kunden> 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

我理解这是因为2010年全年的汇总[测量]。[Wartezeit]超过3000秒。但是我希望看到等待时间低于3000秒的客户数量,所以2010年应该是75 + 23 + 86 + 71 = 255。

1 个答案:

答案 0 :(得分:2)

通过在wartezeit列上创建一个退化维度解决它,在mondrian中看起来像这样:

<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]})