Comment rendre vos analyses glissantes dans le temps sans que vos utilisateurs n’aient à repositionner leurs filtres de dates sous Excel ?
Prenons le cas où notre client veut analyser ces ventes mensuelles de façon glissante sur les 12 derniers mois.
Avec une dimension Temps « classique », nous avons un tableau croisé dynamique qui ressemblerait à ceci :
Tous les mois, le glissement ne peut être effectué que manuellement par l’analyste en modifiant le filtre MoisAnnee :
Afin d’automatiser cette opération, nous allons enrichir notre dimension temps pour y ajouter l’attribut [Mois Relatif]. Ce dernier se chargera de lister les mois relativement par rapport à la date de fraicheur des données dans l’entrepôt (en générale J-1). Il suffit donc pour chaque date de calculer le mois relatif qui lui est assoocié ; la plupart du temps, on limite la profondeur de cet attribut aux 24 mois précédents et aux 12 suivants. Cette opération peut-être effectuée via la vue suivante :
create view [dwh].[DimCalendrierMoisRelatif] AS select [DimCalendar].CalendarID, CASE WHEN ((12 * YEAR([DimCalendar].[DateCode])) + MONTH([DimCalendar].[DateCode])) - ((12 * YEAR(getdate())) + MONTH(getdate())) BETWEEN -24 AND 12 THEN ((12 * YEAR([DimCalendar].[DateCode])) + MONTH([DimCalendar].[DateCode])) - ((12 * YEAR(getdate())) + MONTH(getdate())) ELSE -9999 END as [CodeSemaineRelative], CASE WHEN ((12 * YEAR([DimCalendar].[DateCode])) + MONTH([DimCalendar].[DateCode])) - ((12 * YEAR(getdate())) + MONTH(getdate())) BETWEEN -24 AND 12 THEN 'M ' + cast(((12 * YEAR([DimCalendar].[DateCode])) + MONTH([DimCalendar].[DateCode])) - ((12 * YEAR(getdate())) + MONTH(getdate())) as nvarchar(10)) ELSE '' END as MoisRelatif from [common].[DimCalendar] GO
Idem pour les semaines relatives :
create view [dwh].[DimCalendrierSemaineRelative] AS select [DimCalendar].CalendarID, case when datediff(day,getdate() - datepart(dw,getdate()) + 1,[DimCalendar].[DateCode] - datepart(dw,[DimCalendar].[DateCode]) + 1)/7 BETWEEN -105 AND 53 then datediff(day,getdate() - datepart(dw,getdate()) + 1,[DimCalendar].[DateCode] - datepart(dw,[DimCalendar].[DateCode]) + 1)/7 else -9999 end as CodeSemaineRelative, case when datediff(day,getdate() - datepart(dw,getdate()) + 1,[DimCalendar].[DateCode] - datepart(dw,[DimCalendar].[DateCode]) + 1)/7 BETWEEN -105 AND 53 then 'W' + cast(datediff(day,getdate() - datepart(dw,getdate()) + 1,[DimCalendar].[DateCode] - datepart(dw,[DimCalendar].[DateCode]) + 1)/7 as nvarchar(10)) else '' end as SemaineRelative from [common].[DimCalendar] GO
Pour cette dernière, n’oubliez pas de bien paramétrer le premier jour de la semaine lors de l’appel à la vue :
SET @@DATEFIRST 1 GO
Il ne reste plus qu’à ajouter cette vue dans votre solution SSAS ou PowerPivot et récupérer l’attribut MoisRelatif dans votre dimension. Exemple d’implémentation sous PowerPivot :
Voyons maintenant la mise en oeuvre dans le TCD :
Un petit coup d’oeil sur le filtre du TCD :
N.B : N’oubliez pas la célèbre devise Shadok
C’est chouette cette petite manip!
Merci pour l’info, je ne la connaissais pas 🙂
Et je me suis abonné à ton blog, c’est cool que tu te sois lancé 😉
Il fallait bien que je m’y mette, merci pour les encouragements.
A+