DimTemps – Step2 « Analyses Glissantes »

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

3 réflexions sur “DimTemps – Step2 « Analyses Glissantes »

  1. Pingback: PowerPivot Excel2013 – Table temps universelle pour vos POCs « BI Thoughts & Tips

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s