Dans mon précédent post j’ai posé le problème du calcul par périodes du pipe commercial.
Maintenant que l’on a la solution en SQL, on pourra valider la requête MDX.
On voudrait retranscrire ce que l’on a fait en SQL c’est à dire sélectionner les devis dont la date de devis est inférieur ( ou égal) à la fin de la période et la date de commande ou d’expiration supérieure (ou égale) au début de la période
pour rappel la requête SQL est la suivante :
… where (datedevis <= "31/01/2011") and(datecommande >= « 01/01/2011 » );
Premier essai MDX: Modélisation du cube
Imaginons que l’on ai créé un cube Mondrian basé sur la table des devis en sachant
que la table contient deux dates ( date de devis et date de commande)
Il nous faut donc deux dimensions de temps liées ces deux dates
On a donc les dimensions suivantes [TimeStart] et [TimeEnd]
Voici donc le rendu dans SchemaWorkBench :
Premier essai MDX: la requête
maintenant que l’on a créé le cube, on peut concevoir la requête:
On doit faire un croisement entre
- la période qui va de janvier à l’infini dans la dimension TimeStart pour la date de commande ( rappelez-vous la condition SQL : datecommande >= « 01/01/2011 »)
- et la période qui va du début de l’existence de l’informatique (merci Turing! – je laisse Snail préciser les choses) à janvier dans la dimension TimeEnd pour la date de devis (condition SQL: datedevis <= "31/01/2011")
- et enfin le montant
OpeningPeriod([TimeStart].[Month],[TimeStart].firstchild):[TimeStart].[2011].[Q1].[January]
[TimeEnd].[2011].[Q1].[January]:Closingperiod([TimeEnd].[Month],[TimeEnd].lastchild )
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 0from [Pipe]
select Measures.test on rows,Descendants([Time]. [year],(Month) on columnsfrom [MonCube]