1

私はmdxを初めて使用し、次の問題を約1日解決しようとしています。どんな助けでも大歓迎です:

私のクエリ:

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

ここで、達成したいのは、「クンデン」列を列「クンデン < 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

この原因は、2010 年全体の集計された [Measure].[Wartezeit] が 3000 秒を超えているためだと理解しています。しかし、待ち時間が 3000 秒未満の顧客の数を知りたいので、2010 年の場合は 75+23+86+71 = 255 になるはずです。

4

1 に答える 1

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 句は、単純な crossjoin になりました。

({[Measures].[Kunden]} * {[dauer].[LT5], [dauer].[LT10], [dauer].[GT60]}) 
于 2010-11-16T16:58:19.477 に答える