Support formation Rapports Power BI

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.Upper fonctionne, text.upper provoque 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 let peuvent ê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
    PrixTTC

Cette 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 in détermine le résultat de la requête : si vous ajoutez une étape à la main, mettez à jour la ligne in.
  • 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".

Pour aller plus loin

  • Visite rapide du langage de formule M. Source
  • Spécification du langage M : introduction. Source
  • Spécification : expression let. Source
  • Concepts de base (environnements et variables). Source