2010-11-16 50 views
1

Je suis nouveau sur mdx et j'essaie de résoudre le problème suivant depuis environ un jour. Toute aide serait appréciée:Classement des résultats MDX

Ma Recherche:

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 

qui donne le résultat suivant, comme prévu:

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

Maintenant, ce que je veux atteindre est de diviser la colonne « Kunden «dans les colonnes» Kunden < 5 min »et« Kunden> 5min », ce qui signifie que les clients qui ont attendu moins ou plus de 5 minutes.

Le plus proche que je pouvais obtenir était la suivante:

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 

Le résultat est:

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

Je comprends la cause en est, parce que la agrégée [Mesure] [Wartezeit] pour. toute l'année 2010 est supérieure à 3000 secondes. Mais j'aimerais voir le nombre de clients avec un temps d'attente inférieur à 3000 secondes, donc il devrait être 75 + 23 + 86 + 71 = 255 pour 2010.

Répondre

2

Résolu en créant une dimension dégénérée sur la colonne wartezeit qui ressemble à ceci dans 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> 

La clause select de ma requête est maintenant simple Crossjoin:

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