Pentaho:calcul du pipe commercial en MDX avec Mondrian – partie 3

Dans mon précédent post j’avais résolu le problème du calcul du pipe pour le mois de janvier.

On avait introduit deux dimensions [TimeStart] et [TimeEnd] qui permettait de faire des filtres sur les dates de début et de fin des devis.
La formule initiale qui permet de savoir le pipe pour le mois de janvier 2011, est celle-ci :
with MEMBER Measures.x as ‘
SUM( NonEmptyCrossJoin(
OpeningPeriod([TimeStart].[Month],[TimeStart].firstchild):[TimeStart].[2011].[Q1].[January],
[TimeEnd].[2011].[Q1].[January]:Closingperiod([TimeEnd].[Month],[TimeEnd].lastchild ) )
, [Measures].[Montant] )’
Select Measures.x on 0
Le problème, maintenant est que l’on doit trouver un moyen pour faire cela pour tous les mois…
On sait que contrairement à MS OLAP, Mondrian n’implémente pas la fonction linkMember et donc ne peut pas lier les deux dimensions TimeStart et TimeEnd entre elles.
Imaginons que l’on ait d’une part la liste de tous les devis ouvert et d’autre part tous les devis fermés, on pourrait ainsi savoir pour chaque période la somme des devis qui ont été traités.
En SQL ça donne :
select T.DateTypeKey , T.TimeKey , T.TimeKeyStart,
T.TimeKeyEnd,
T.montant
from
(select distinct ‘Ouvert’ as DateTypeKey , TimeKeyStart as TimeKey, TimeKeyStart, TimeKeyEnd, montant from FactPipe
UNION ALL
select distinct ‘Cloturé’ as DateTypeKey , TimeKeyEnd as TimeKey, TimeKeyStart, TimeKeyEnd,montant from FactPipe
) T
Imaginons que cette requete soit sauvegardée entant que vue que l’on va appeler viewPipe
Si, en SQL je veux savoir le montant total des devis ouvert jusqu’au 1er janvier 2011, je dois faire cette requête:

select sum(montant) from viewPipe where TimeKey <= '2011/01/01' and DateTypeKey = 'Ouvert'

De même, je veux savoir la somme des devis clôturés jusqu’au 1er janvier 2011, la requête est sensiblement la même :

select sum(montant) from viewPipe where TimeKey <= '2011/01/01' and DateTypeKey = 'Cloturé'

Côté MDX- Mondrian, on va donc introduire une nouvelle dimension que je vais appeler [DateType] qui va permettre de gérer ce fameux status ouvert/clôturé
La particularité de cette nouvelle dimension est qu’elle