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.