Utilisez M : des exemples simples et concrets

Proposé par André Meyer

26 juin 2020

Data club

M | power query

Restez à l'écoute, abonnez-vous à la newsletter (2 fois / mois)

6 + 15 =

Dans « Une pincée de M », nous avons vu comment afficher le code M, comment le lire, et comment afficher la bibliothèque des fonctions.
Abordons maintenant quelques exemples d’utilisation de ce code. Et je précise : il ne s’agit pas de faire du code pour le code, de devenir un expert de M, mais bien de connaître quelques lignes permettant d’accélérer le traitement des données.
J’enrichirai au fur et à mesure cette page.

Renommer rapidement toutes les colonnes d’une table

L’un des avantages de coder en M est d’accélérer considérablement la préparation des données : l’exemple que nous allons développer peut être réalisé à l’aide de l’interface de Power Query, mais prendrait beaucoup plus de temps et impliquerait un travail laborieux et répétitif.

Nous allons voir deux opérations courantes :

  • Ajouter un suffixe à toutes les colonnes d’une table pour éviter d’avoir plusieurs champs de table différentes portant le même nom
  • Supprimer le tiret bas (_) dans le nom des colonnes – ce tiret est souvent présent lorsque vous exploitez les colonnes d’une base de données

Nous souhaitons d’abord ajouter un suffixe aux noms des colonnes (<nom de la colonne> + « du client » pour bien identifier que ces données concernent le client). La fonction M qui nous permet de réaliser cette opération d’un coup sur toutes les colonnes de la table est Table.TransformColumnNames. Cette fonction attend deux paramètres : une table pour commencer, c’est-à-dire soit le résultat de l’étape Source, soit le résultat d’une autre étape : c’est pourquoi le premier paramètre est un nom d’étape. Le deuxième paramètre est l’expression de transformation : concaténation, ou autre fonction M de transformation.

Nous souhaitons que cette opération soit effectuée pour chaque colonne de la table : nous allons donc introduire le mot-clé each ainsi que le signe _ (tiret bas), qui remplissent cet office. Attention, le tiret bas _ évoqué ici est un mot-clé réservé, indiquant que l’opération doit être faite sur chaque colonne (un peu comme un contexte de ligne en DAX), et ne doit pas être confondu avec « _ », le tiret bas encadré de guillemets, qui indique lui la présence du tiret bas dans le nom d’une colonne comme nous le verrons dans l’exemple suivant.

Le code est donc :

#"Ajout suffixe" = Table.TransformColumnNames(#"Type modifié", each _&" du client")

Quelques remarques :

  • ici, # « Ajout suffixe » est le nom que je donne à l’étape. Il est indiqué entre guillemets, puisqu’il est composé de deux termes
  • # « Type modifié » est le nom de l’étape précédente
  • Si # « Ajout suffixe » est la dernière étape, alors il faudra penser à la mentionner après le IN, à la fin du code (in # « Ajout suffixe »)
  • Si ce n’est pas la dernière étape, alors il faudra penser à rappeler son nom dans l’étape suivante

Voyons maintenant un autre exemple courant : il s’agit de se débarrasser du tiret bas qui apparaît dans le nom des colonnes. C’est un cas fréquent notamment lorsque vous exploitez les données d’une base.

La fonction M qui nous intéresse, en dehors de Table.TransformColumnNames, est Text.Replace, et ses trois paramètres, le texte à analyser (le nom de chaque colonne, symbolisé par _), le texte à remplacer («_»), et le texte de remplacement, un simple espace (« »).

Le code est donc :

#"Oter tiret" = Table.TransformColumnNames(#"Ajout suffixe", each Text.Replace(_ , "_" , " "))

Les opérations que nous venons de réaliser peuvent être exécutées à l’aide de l’interface graphique de Power Query, mais l’opération serait lente, répétitive et fastidieuse. Avec le code M, un simple copier-coller vous permet d’obtenir le même résultat en quelques secondes.

Nettoyer un champ Texte

Un autre exemple d’opération que le code M permet d’accélérer, même s’il est possible de la réaliser à l’aide de l’UI de Power Query : nettoyer un champ Texte, le débarrasser d’un ensemble de caractères indésirables, en spécifiant quels caractères sont autorisés.

Prenons le cas courant de numéros de téléphone. Certains sont saisis avec des points, d’autres avec des tirets, des parenthèses, des espaces :

La fonction Text.Select permet d’indiquer les caractères autorisés pour un champ Texte. Les caractères autorisés sont indiqués entre accolades {}, et une série continue de caractères peut être notée {0 .. 9}, indiquant par là que seuls les chiffres entre 0 et 9 sont autorisés.

Le code est donc :

#"Normalisation tel" = Table.AddColumn(#"Type modifié", "Téléphone normalisé", each Text.Select([téléphone], {"0".."9"}), type text)

Un mot d’explication sur la ligne de code :

  • Table.AddColumn : comme son nom l’indique, cette fonction permet d’ajouter une colonne
  • # « Type modifié » : c’est le nom de l’étape précédente
  • « Téléphone normalisé » : c’est le nom de la nouvelle colonne
  • each Text.Select([téléphone], {« 0 ».. « 9 »}) : pour chaque ligne de la colonne téléphone (indiquée entre crochets), n’autoriser que les caractères de 0 à 9, supprimer tous les autres
  • type text : typer la nouvelle colonne en Texte

Là encore, en utilisant l’interface graphique, ce nettoyage serait possible, mais long, puisqu’il faudrait prendre en compte tous les cas de figure (y compris ceux qui ne sont pas encore présent dans votre jeu de données), et risqué, pour les mêmes raisons : comment être sûr que vous avez pensé à tout ?

Articles associés :

Une pincée de M

Le but des billets que je vais consacrer au langage M, qui se cache derrière Power Query, est d’en proposer une découverte, de mettre en perspective l’utilité d’apprendre ce langage, et de dérouler un nombre de cas concrets directement utiles

Exploiter des données peu structurées

Exploiter des données peu structurées

Il faut parfois savoir jongler avec des données qui se présentent sous des formes très peu propices à leur utilisation dans Power BI. Nous l’avons vu avec un tableau croisé complexe : en voici un autre exemple, avec un fichier texte où les trois champs sont affichés sur une seule colonne.

Un choix parmi les nouveautés de février 2020

Un choix parmi les nouveautés de février 2020

Janvier est un mois de relâche, ou plus précisément, pas de nouveautés pour Power BI Desktop, l’accent étant mis sur Power BI Server. Nous attendions donc avec impatience Février ! Voici mon choix de trois nouvelles fonctionnalités, dont la très attendue actualisation incrémentielle et le non moins attendu filtre hiérarchique