Calendrier DAX

Code court
Calendrier = ADDCOLUMNS(
CALENDARAUTO() ,
"@Année" , FORMAT([Date],"YYYY"),
"Rang Année", RANKX(CALENDARAUTO(), YEAR([Date]), , ASC, Dense),
"@Semestre" , IF(MONTH([Date]) <= 6, "S1", "S2"),
"Année Semestre" , YEAR([Date]) & "-" & IF(MONTH([Date]) <= 6, "S1", "S2"),
"Rang Semestre" , RANKX(CALENDARAUTO(), YEAR([Date]) & "-" & IF(MONTH([Date]) <= 6, "S1", "S2"), , ASC, Dense),
"@Trimestre" , FORMAT([Date],"TQ"),
"Année Trimestre" , FORMAT([Date],"YYYY-TQ"),
"Rang Trimestre" , RANKX(CALENDARAUTO(), FORMAT([Date],"YYYY-TQ"), , ASC, Dense),
"@Mois" , FORMAT([Date],"MM"),
"Année Mois" , FORMAT([Date],"YYYY-MM"),
"Rang Mois" , RANKX(CALENDARAUTO(), FORMAT([Date],"YYYY-MM"), , ASC, Dense),
"@Semaine" , FORMAT(WEEKNUM([Date], 2), "00"),
"Année Semaine" , YEAR([Date]) & "-" & FORMAT(WEEKNUM([Date], 2), "00"),
"Rang Semaine", RANKX(CALENDARAUTO(), YEAR([Date]) & "-" & FORMAT(WEEKNUM([Date], 2), "00"), , ASC, Dense)
)
Code long
Calendrier = ADDCOLUMNS(
CALENDARAUTO() ,
"@Année" , FORMAT([Date],"YYYY"),
"Rang Année", RANKX(CALENDARAUTO(), YEAR([Date]), , ASC, Dense),
"@Semestre" , IF(MONTH([Date]) <= 6, "S1", "S2"),
"Année Semestre" , YEAR([Date]) & "-" & IF(MONTH([Date]) <= 6, "S1", "S2"),
"Rang Semestre" , RANKX(CALENDARAUTO(), YEAR([Date]) & "-" & IF(MONTH([Date]) <= 6, "S1", "S2"), , ASC, Dense),
"@Trimestre" , FORMAT([Date],"TQ"),
"Année Trimestre" , FORMAT([Date],"YYYY-TQ"),
"Rang Trimestre" , RANKX(CALENDARAUTO(), FORMAT([Date],"YYYY-TQ"), , ASC, Dense),
"@Mois" , FORMAT([Date],"MM"),
"@Mois Lettre" , FORMAT([Date],"MMMM"),
"Année Mois" , FORMAT([Date],"YYYY-MM"),
"Rang Mois" , RANKX(CALENDARAUTO(), FORMAT([Date],"YYYY-MM"), , ASC, Dense),
"@Semaine" , FORMAT(WEEKNUM([Date], 2), "00"),
"Année Semaine" , YEAR([Date]) & "-" & FORMAT(WEEKNUM([Date], 2), "00"),
"Rang Semaine", RANKX(CALENDARAUTO(), YEAR([Date]) & "-" & FORMAT(WEEKNUM([Date], 2), "00"), , ASC, Dense),
"@Jour Mois" , FORMAT([Date],"DD"),
"@Jour Semaine" , SWITCH( TRUE(), OR(FORMAT([Date],"DDDD") = "Lundi", FORMAT([Date],"DDDD") = "Monday") , 1, OR(FORMAT([Date],"DDDD") = "Mardi",FORMAT([Date],"DDDD") = "Thursday") , 2, OR(FORMAT([Date],"DDDD") = "Mercredi",FORMAT([Date],"DDDD") = "Wednesday") , 3, OR(FORMAT([Date],"DDDD") = "Jeudi",FORMAT([Date],"DDDD") = "Tuesday"), 4, OR(FORMAT([Date],"DDDD") = "Vendredi",FORMAT([Date],"DDDD") = "Friday") , 5, OR(FORMAT([Date],"DDDD") = "Samedi",FORMAT([Date],"DDDD") = "Saturday"), 6, OR(FORMAT([Date],"DDDD") = "Dimanche",FORMAT([Date],"DDDD") = "Sunday") , 7, BLANK() ),
"@Jour Lettre" , FORMAT([Date],"DDDD"),
"Année Jour" , FORMAT([Date],"YYYY-MM-DD"),
"Rang Jour" , RANKX(CALENDARAUTO(), FORMAT([Date],"YYYY-MM-DD"), , ASC, Dense)
)

Suivant vos besoins, vous pouvez copier/coller un de ces codes tel quel après avoir créé une Nouvelle table à partir de l’onglet Outils de table. La colonne Date de cette table Calendrier pourra être reliée dans votre projet à toutes les tables existantes contenant également des colonnes de dates.

Ces tables de dates universelles pourront vous servir pour tous vos projets et pour toutes vos mesures DAX de type Date to Date, appelées également mesures de Time Intelligence.

💡 Après sa création, n’oubliez pas de marquer cette table comme Table de dates de référence avec le bouton Marquer comme table de dates de l’onglet Outils de table de la vue Affichage Table.

Utilité de certaines colonnes
  • Les colonnes commençant par Année permettront de filtrer les données sur la période correspondante : jour, semaine, mois, trimestre, semestre ou année. Elles seront utilisées dans le puits de l’axe X des abscisses pour les graphiques en courbes ou en aires.
  • Les colonnes numérique @Mois et @Jour Semaine permettent de trier dans l’ordre les colonnes texte @Mois Lettre et @Jour Lettre.
  • Les colonnes Rang vous permettront de réaliser facilement des calculs comparatifs d’une période à l’autre à partir d’une simple mesure de filtre de type :
This Month = CALCULATE( Expression , [Rang Mois] = MAX( [Rang Mois] ) )

Affichera la valeur de l’Expression, par exemple la Somme de la colonne Quantité ou la mesure CA TOTAL, pour le dernier mois du Calendrier.

Last Month = CALCULATE( Expression , [Rang Mois] = MAX( [Rang Mois] ) - 1 )

Affichera la valeur de l’Expression pour l’avant dernier mois.

Last Year Month = CALCULATE( Expression , [Rang Mois] = MAX( [Rang Mois] ) – 12 )

Affichera la valeur de l’Expression pour le même mois de l’année précédente.

OneYearRolling = 
VAR RangSelectionne = SELECTEDVALUE(Calendrier[Rang Mois])
VAR DateSelectionnee = CALCULATE(
MAX(Calendrier[Date]),
Calendrier[Rang Mois] = RangSelectionne
)
RETURN
CALCULATE(
Expression,
DATESINPERIOD(Calendrier[Date], DateSelectionnee, -1, YEAR)
)

Affichera la valeur de l’Expression sur une année glissante à partir d’un segment contenant la colonne Année Mois du Calendrier.

💡 On procédera de même pour les jours, les semaines, les trimestres ou les années, le calcul des variations correspondantes en sera simplifié.

Par exemple, la mesure suivante MonthOverMonth affichera la variation en + ou en – entre la valeur de l’Expression du mois en cours et celle du mois précédent. La combinaison des commandes VAR et RETURN permet de limiter le nombre de mesures DAX dans le modèle.

Variation MoM = 
VAR
MoM = [This Month] / [Last Month] - 1
RETURN
IF( MoM < 0 , MoM , "+"&FORMAT( MoM , "0%" ) )