1 | Introduction au langage M
En bref
- Objectifs : situer le langage M et les produits qui l'utilisent ; décrire ses principes (fonctionnel, sensible à la casse, évaluation à la demande) ; lire et écrire une expression let ... in.
- Prérequis : page « Découvrir l'éditeur Power Query ».
- Niveau : intermédiaire.
Pourquoi ?
Le langage M est le langage de formule de Power Query (nom officiel : Power Query Formula Language, « M » étant son nom courant). Il décrit chaque étape de préparation des données. Le connaître permet d'aller au-delà de ce que proposent les menus : automatiser une tâche répétitive, écrire une fonction personnalisée, corriger une étape sans la recréer, ou simplifier les calculs DAX en préparant mieux les données en amont.
Notions clés
D'où vient M et où le trouve-t-on ?
Les outils d'ETL (extraction, transformation et chargement) comme SQL Server Integration Services sont puissants mais réservés aux spécialistes. Power Query et son langage M sont nés du projet Data Explorer de Microsoft pour rendre cette préparation accessible aux analystes ; Power Query est apparu dans Excel en 2013, puis dans Power BI.
Le même langage est aujourd'hui utilisé, avec quelques différences de connecteurs et de fonctions disponibles, dans :
- Power BI Desktop et le service Power BI (actualisation des modèles sémantiques) ;
- les Dataflow Gen2 de Microsoft Fabric et Data Factory (Power Query Online) ;
- Excel (Données > Obtenir des données) ;
- Power Apps et Power Automate (dataflows et actions Power Query) ;
- SQL Server Analysis Services et Azure Analysis Services (modèles tabulaires) ;
- Visual Studio Code, avec l'extension Power Query / M Language. Source
Il existe deux expériences de création : Power Query Desktop (Power BI Desktop, Excel) et Power Query Online (dataflows, Fabric). Elles sont presque identiques pour l'utilisateur.
Les principes du langage
- Fonctionnel : une requête est une expression qui calcule une valeur. Les valeurs ne sont jamais modifiées sur place : chaque étape produit une nouvelle table à partir de la précédente. Les fonctions sont elles-mêmes des valeurs, qu'on peut passer en argument (c'est ce que fait
each). - Sensible à la casse :
Text.Upperfonctionne,text.upperprovoque une erreur ; une colonne « Montant » est différente d'une colonne « montant ». - Évaluation à la demande : une étape n'est calculée que si le résultat en a besoin. Les étapes d'un
letpeuvent être écrites dans n'importe quel ordre ; c'est la dépendance entre elles qui compte. Source - Typage dynamique : le type des valeurs est vérifié à l'exécution ; on peut aussi déclarer le type des paramètres et des colonnes (chapitre 5).
- Bibliothèque de fonctions : les fonctions sont nommées par famille,
Famille.Action:Text.Start,Date.Year,Table.SelectRows,List.Sum. - Commentaires :
//pour une ligne,/* ... */pour un bloc.
Exemples d'expressions simples :
Text.Start("Bonjour tout le monde", 7) // renvoie "Bonjour"
Date.Year(#date(2026, 10, 18)) // renvoie 2026
Text.From(42) // renvoie "42"L'expression let ... in
Une requête est presque toujours une expression let ... in. La partie let contient une liste de variables (les étapes) séparées par des virgules ; la partie in indique la valeur renvoyée, en général la dernière étape. Source
let
PrixHT = 250,
TauxTVA = 0.2,
PrixTTC = PrixHT * (1 + TauxTVA)
in
PrixTTCCette requête renvoie 300. Chaque nom de variable correspond à une ligne du volet Étapes appliquées.
Un nom d'étape qui contient des espaces ou des accents s'écrit entre guillemets précédés d'un dièse : #"Type modifié". C'est le cas des étapes générées par l'interface française.
Pas à pas
1. Dans l'éditeur Power Query, Accueil > Nouvelle source > Requête vide.
2. Ouvrez Accueil > Éditeur avancé et remplacez le code par l'exemple PrixTTC ci-dessus. Cliquez sur Terminé.
3. Observez le volet Étapes appliquées : il affiche les étapes PrixHT, TauxTVA et PrixTTC. Cliquez sur chacune pour voir sa valeur.
[Capture : requête vide avec les trois étapes PrixHT, TauxTVA et PrixTTC, valeur 300 affichée]
4. Inversez l'ordre des lignes PrixHT et TauxTVA dans l'éditeur avancé : le résultat ne change pas, car M évalue les étapes selon leurs dépendances.
5. Écrivez text.start("Bonjour", 3) dans une nouvelle étape : l'erreur obtenue illustre la sensibilité à la casse.
Pièges et bonnes pratiques
- Une virgule manquante en fin de ligne, ou une virgule en trop avant
in, est l'erreur de syntaxe la plus fréquente. - Le nom renvoyé après
indétermine le résultat de la requête : si vous ajoutez une étape à la main, mettez à jour la lignein. - Donnez aux étapes des noms sans espaces quand vous écrivez du code (
TypeModifie), pour éviter la syntaxe#"...".
À retenir
- M est le langage de Power Query, commun à Power BI, Excel, Fabric et Power Platform.
- C'est un langage fonctionnel et sensible à la casse.
- Une requête est une expression
let ... in: des étapes nommées, puis la valeur renvoyée. - Les noms d'étapes avec espaces s'écrivent
#"Nom de l'étape".