Créer et utiliser une table de date, calendrier Power BI Desktop !

Dernière mise à jour : 6 juil.



Nous allons voir ensemble comment créer et afficher une table de date / calendrier sur Power BI Desktop


Cette manipulation devrait être obligatoire sur tous vos rapports !


Prérequis :

  • Power BI Desktop



A quoi sert une table de date ?

  • Utiliser des mesures de time intelligence,

  • Filtrer une ou plusieurs tables de fait sur une même période,

  • Devenir l'axe de vos graphiques.

Deux méthodes pour mettre en place une table calendaire :

  • Utiliser un script DAX

  • Utiliser un script en langage M (Power Query)


Table de date avec une expression DAX :

  1. Vue donnée,

  2. Onglet modélisation,

  3. Nouvelle table,

  4. Coller le script ci dessous :

Table Dates = 
-- ce script créé une table du temps du 1er janvier 2018 à aujourd'hui
ADDCOLUMNS(CALENDAR(DATE(2018,1,1),TODAY()),
		"Année",YEAR([Date]),
		"Mois",MONTH([Date]),
       	"Trim",QUARTER([Date]),
		"Nom du mois",FORMAT([Date],"MMM YY"),
		"Nom du jour",FORMAT([Date],"DDD d MMM YY"),
		"AnnéeMois", FORMAT([Date],"YYYYMM"))
-- penser à trier la colonne Nom du mois par la colonne Mois
-- penser à trier la colonne Nom du jour par la colonne Date
-- penser à marquer la table de date comme référence


Pour information, c'est le script de table de date que j'utilise dans la majeure partie de mes projets Power BI.


Vous pouvez remplacer la fonction (CALENDAR(DATE(2018;1;1);TODAY()) par la fonction CALENDARAUTO(). Cette dernière balayera votre dataset entier pour en extraire la premiere et dernière valeur de date.

Suivre les commentaires :

  • Trier les colonnes de nom du mois et nom du jour. Effectivement dans le cas contraire, les mois seront triés par ordre alphabétique dans l'axe d'un graphique.


  • Marquer la table de date comme référence afin de pouvoir utiliser les fonctions de time intelligence de façon correcte !



Table de date avec un script Power Query.



  1. Obtenir des données,

  2. Nouvelle requête vide,

  3. Editeur avancé,

  4. Coller le script.





let
    Source = List.Dates(StartDate, Length, #duration(1, 0, 0, 0)),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Date", type date}}),
    StartDate = #date(2016, 1, 1),
    Today = DateTime.Date(DateTime.LocalNow()),
    Length = Duration.Days(Today - StartDate),
    Custom1 = #"Changed Type",
    #"Inserted Year" = Table.AddColumn(Custom1, "Fin Year", each Date.Year([Date]+#duration(184,0,0,0)), Int64.Type),
    #"Inserted Month Name" = Table.AddColumn(#"Inserted Year", "Month Name", each Date.MonthName([Date]), type text),
    #"Inserted Day Name" = Table.AddColumn(#"Inserted Month Name", "Day Name", each Date.DayOfWeekName([Date]), type text),
    #"Inserted Month" = Table.AddColumn(#"Inserted Day Name", "Fin Month", each if Date.Month([Date]) >=7 then Date.Month([Date])-6 else Date.Month([Date])+6  , Int64.Type),
    #"Inserted Day of Week" = Table.AddColumn(#"Inserted Month", "Day of Week", each Date.DayOfWeek(([Date]), Day.Sunday)+1, Int64.Type),
    #"Inserted First Characters" = Table.AddColumn(#"Inserted Day of Week", "MMM", each Text.Start([Month Name], 3), type text),
    #"Inserted First Characters1" = Table.AddColumn(#"Inserted First Characters", "DDD", each Text.Start([Day Name], 3), type text),
    #"Reordered Columns" = Table.ReorderColumns(#"Inserted First Characters1",{"Date", "Fin Year", "Month Name", "MMM", "Fin Month", "Day Name", "DDD", "Day of Week"}),
    #"Added Custom" = Table.AddColumn(#"Reordered Columns", "FYMM", each ([Fin Year]-2000)*100 + [Fin Month]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"FYMM", Int64.Type}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type1", "MonthID", each (Date.Year([Date]) - Date.Year(StartDate))*12 + Date.Month([Date])),
    #"Changed Type2" = Table.TransformColumnTypes(#"Added Custom1",{{"MonthID", Int64.Type}})
in
    #"Changed Type2"

Ne pas oublier de suivre les même commentaires que le script DAX (Trier la colonnes nom du mois par la colonne mois + marquer la table comme table de référence ce date).



Alexis Dardaine - DGTL Performance





4 944 vues0 commentaire