Quand on consulte un cube, on a souvent envie/besoin de visualiser une période glissante (ie. dynamique, calée sur la date du jour). En effet, ce n’est pas terrible, quand on ouvre un TCD, de devoir changer le filtre de dates pour le remettre sur le mois en cours (surtout quand on le consulte en ligne depuis SharePoint).
Pour cela, il faut prévoir des mesures calculées ou une bidouille dans votre dimension temps. Mais on n’a pas toujours la possibilité de faire une évolution dans le cube (ce n’est peut-être pas le notre après-tout).
Pour résoudre la problématique, on va utiliser les jeux nommés (Named Sets) et Excel qui permet d’injecter un peu de MDX.
Le code de base
Le code MDX dont nous avons besoin doit ramener le Set contenant les membres de la dimension temps. Voici le code :
{ Tail(NonEmpty([Date].[Date].[Date], [Measures].[ma mesure] ), 1).Item(0).Lag(90) : Tail(NonEmpty([Date].[Date].[Date], [Measures].[ma mesure] ), 1).Item(0) }
En gros, on prend le dernier élément avec une valeur ; Item() ramène le membre.
Tail(NonEmpty([Date].[Date].[Date], [Measures].[ma mesure] ), 1).Item(0)
On se décale dans la dimension, ici de 90 jours
.Lag(90)
Et on construit le tout dans un intervalle : { <firstmember> : <lastmember> }
Et on mets ça où ?
Non. Ne répondez pas, je sais ce que vous avez en tête…
Dans le ruban d’un tableau croisé dynamique, il y un menu pour gérer les Named Sets. On choisit d’en créer un en MDX.
Il suffit de copier coller son MDX et il apparaître dans les « jeux » disponibles dans votre cube.
Inconvénient
L’inconvénient, je suis sûr que vous l’avez déjà repéré. Le problème est que le code MDX est dépendant d’une mesure explicite, ie. on prend la dernière date où il y a une mesure. Si vos mesures ne sont pas sur le même tempo, vous pourrez avoir un décalage.
Disclaimer
Je n’ai pas la prétention de dire que c’est :
- l’unique façon de faire cela
- la façon la plus propre de faire cela
Donc si vous avez d’autres techniques, n’hésitez pas dans les commentaires.
(notamment la solution pour contourner l’inconvénient remonté)