Rappelons d’abord que Power Query est une UI (interface utilisateur) dont l’objectif est de générer simplement du code M afin de construire la requête qui sera ensuite – au moment où vous cliquez sur Fermer & appliquer – envoyée en partie ou en totalité à la source.
Comme toute UI, celle de Power Query se concentre sur les fonctionnalités les plus fréquentes, ainsi que sur les modalités les plus courantes de ces fonctionnalités. Power Query est un outil bien pensé, et ces fonctionnalités courantes sauront satisfaire la plupart des besoins. Mais 30% à 50% des possibilités du langage M ne sont pas proposées par l’UI !
Connaître un peu de M suffit déjà à accéder à des fonctionnalités utiles, et se constituer une petite bibliothèque de scripts M tout prêts, qu’il suffira de copier-coller dans l’éditeur, c’est gagner un temps précieux.
Dans ce premier billet, je vous propose de découvrir l’environnement, apprendre à lire un script M, et afficher la liste des fonctions.
L’éditeur de M
Les transformations que vous effectuez dans Power Query sont listées en étapes :
Or chaque étape est l’occasion d’insérer une ligne de code M. Sélectionnez l’étape, et pour peu que la barre de formule soit affichée, vous y voyez le code correspondant :
Notez ici le lien entre le nom de l’étape et la fonction M utilisée : Table.TransformColumnType
Ce qui va nous intéresser, c’est de pouvoir afficher toutes les lignes de code. C’est le rôle de l’éditeur avancé :
Lire le code M
De manière générale, la structure du code est le plus souvent la suivante :
let
Source = <nom de la source> ,
#"Etape 1" = Fonction_M (Source, paramètres) ,
#"Etape 2" = Fonction_M (#"Etape 1", paramètres) ,
#"Etape finale" = Fonction_M (#"Etape 2", paramètres)
in
#"Etape finale"
Le mot-clé LET (en minuscules) permet d’énoncer une série d’opérations, tandis que le mot-clé IN (en minuscules) indique ce qui ressortira. C’est le plus souvent la dernière étape, mais pas nécessairement : il est possible d’invoquer une étape antérieure, par exemple pour corriger le code.
Comme vous pouvez le constater, l’élément-clé est l’étape. Elle porte un nom et appelle une fonction à laquelle elle passe des paramètres. Si le nom de l’étape est un seul mot, il apparaît tel quel : Source, Feuil1_Sheet. S’il est composé de plusieurs termes, il apparaît encadré de guillemets et précédé d’un dièse : # »Etape 2″.
Attention, M est sensible à la casse : il faut impérativement respecter les minuscules et les majuscules (le plus souvent au début du nom de la fonction).
Autres remarques sur le code visible ci-dessus :
- Parmi les paramètres d’une fonction, vous retrouvez quasi-systématiquement une référence à une autre étape, le plus souvent celle qui précède
- Pour insérer un commentaire, faite précéder la ligne d’un double slash //
Afficher la librairie des fonctions
M regorge de fonctions : pouvoir trouver rapidement l’une d’entre elles et en afficher le fonctionnement, ainsi que des exemples, est donc essentiel.
Pour ça, il existe une fonction, #shared, qui permet de créer une table de référence. Une fois cette table créée dans votre fichier, vous aurez un accès facilité et très rapide (notamment grâce à l’utilisation des filtres de colonnes dans Power Query) au dictionnaire de fonctions.
Pour pouvoir saisir votre script M, une fois dans Power Query, cliquez sur Nouvelle source, puis Requête vide. Le code tient sur une ligne, il est donc inutile cette fois d’ouvrir l’éditeur avancé : dans la barre de formule, saisissez = #shared et validez (Entrée)
Pour terminer, cliquez sur En table, dans l’onglet Outil enregistrement > Convertir. Ceci afin de créer effectivement une table facile à utiliser (car vous pouvez utiliser les fonctions de filtre), avec nom de la fonction, description et exemples :
Voilà, les bases sont en place. N’hésitez pas, lorsque vous utilisez l’UI pour générer des transformations, à aller regarder le code M ; c’est comme ça que vous apprendrez au fur et à mesure.
Dans le prochain billet consacré à M, nous verrons des cas concrets d’utilisation de ce langage, simples et très très utiles.