Utilisez M : des exemples simples et concrets

Proposé par André Meyer-Roussilhon

26 juin 2020

Restez informé, abonnez-vous à la newsletter (2 fois / mois)

2 + 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 :

Délai entre deux dates, week-end et jours fériés

Délai entre deux dates, week-end et jours fériés

Une table du temps qui calcule automatiquement les jours fériés ? Vous en rêviez, daxone.fr vous l’offre ! Et j’en profite pour vous donner la méthode pour calculer le nombre de jours écoulés entre deux dates, en excluant les dimanches et les jours fériés (je suis sûr que ça va vous servir)

Power Query et M : le nouveau livre de référence

Power Query et M : le nouveau livre de référence

Le quatrième livre que je consacre à Power BI est sorti le 8 septembre : 306 pages entièrement dédiées à Power Query et au langage M, avec de nombreuses mises en pratique.
Plutôt que de séparer l’interface graphique (Power Query) et M (le code que génère l’interface), j’ai choisi de montrer comment les deux doivent être pensés dans une continuité : connaître ne serait-ce qu’un minimum du langage M permet d’améliorer, d’accélérer et d’étendre les possibilités du code généré automatiquement par l’interface graphique.

Exporter de Power BI vers CSV ou TXT sans être limité par le nombre de lignes

Exporter de Power BI vers CSV ou TXT sans être limité par le nombre de lignes

Lors de la dernière session de formation Power BI Expert que j’ai animée, un stagiaire a soulevé la question de la limite du nombre de lignes qu’il est possible d’exporter à partir de Power BI vers un fichier CSV. Cette limite est fixée à 30 000 lignes. Mais alors comment faire lorsque, ce qui n’est pas rare, vous souhaitez exporter une table ou un visuel contenant plus de 30 000 lignes ? Dans cet article je vous propose la solution.