2010-11-16 63 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]})