Noms de jour et de mois à une seule lettre dans Power BI
Niveau Débutant
Cela vous est sans doute déjà arrivé de vouloir afficher les noms de jour ou mois sous leur initiale pour économiser de l’espace. Le problème ? LES DOUBLONS ! Et oui, ni les jours, ni les mois ne sont uniques quand on les raccourcit.
Dans cet article, vous trouverez deux solutions : une en Power Query (language M) et une en DAX.
Le problème : prenons l’exemple du calendrier ci-dessous
A l’aide de la formule suivante, on peut créer une table dans DAX :
Calendar =
ADDCOLUMNS(
CALENDAR("2021-01-01", "2021-01-07"),
"Day Name", FORMAT([Date], "dddd"),
"Day of Week", WEEKDAY([Date], 2)
)
Dont voici le code M correspondant:
#table(
type table [Date=date, Day Name=text, Day of Week=Int64.Type],
List.Transform(
List.Dates(#date(2021, 1, 1), 7, #duration(1, 0, 0 ,0)),
each {_, Date.DayOfWeekName(_), Date.DayOfWeek(_)}
)
)
Supposons maintenant que vous souhaitiez raccourcir les noms des jours en lettres simples: vendredi devrait être F, samedi devrait être S, et ainsi de suite.
Dans DAX, vous pouvez ajouter la colonne calculée suivante:
Day Name Abbr = LEFT('Calendar'[Day Name], 1)
Dans M, vous pouvez utiliser la colonne personnalisée suivante:
Text.Start([Day Name], 1)
Quoi qu'il en soit, si vous essayez de trier la nouvelle colonne par la colonne Jour de la semaine , vous obtiendrez l'erreur suivante:
Pas cool …
En effet, pour chaque nom de jour à une seule lettre, il peut y avoir plus d'une valeur Jour de la semaine , comme pour les lettres S: 6 et 7. Avec les noms de mois, vous rencontrerez le même problème. Par conséquent, nous devons rendre les noms uniques.
La solution dans DAX
L'astuce consiste à ajouter des caractères non imprimables pour distinguer les valeurs. Par exemple, vous pouvez utiliser l'espace zéro largeur: UNICHAR(8203). Pour rendre les valeurs différentes, ajoutez un nombre différent d'espaces de largeur nulle à chaque lettre comme ceci:
Day Name Abbr =
CONCATENATE(
LEFT('Calendar'[Day Name], 1),
REPT(UNICHAR(8203), 'Calendar'[Day of Week])
)
REPT répète une chaîne de texte - exactement ce dont nous avons besoin.
La solution dans Power Query (M)
La formule de colonne personnalisée correspondante en langage M est
Text.Start([Day Name], 1) & Text.Repeat(Character.FromNumber(8203), [Day of Week])
Maintenant que pour chaque nom de jour à une lettre, il n'y a qu'une seule valeur Jour de la semaine, nous pouvons trier la nouvelle colonne par Jour de la semaine.