Langage M (Power Query) : comprendre sa logique et sa différence avec DAX

Le langage M transforme vos données dans Power Query et Power BI, tandis que DAX les analyse. Découvrez la syntaxe de M, des exemples concrets et les différences avec DAX.

Martin

⎪

voir la bio

🗓️ Publié le

21.10.2026

🖋️ Mis à jour le :

21.10.2026

Martin

⎪

voir la bio

👀 Temps de lecture :

2mn

Sommaire

Formation Excel Power Query M

Transformez vos données en rapports automatisés et fiables !

en savoir plus

Sommaire

Lorsque vous importez des données dans Power BI ou Excel, tout se passe dans Power Query : vous cliquez sur « Supprimer les doublons », « Fractionner la colonne » ou « Filtrer les lignes », et la transformation s’applique. Ce que beaucoup ignorent, c’est qu’un langage s’écrit en coulisses à chacun de vos clics : le langage M.

Le comprendre vous permet de dépanner une requête qui plante, d’automatiser des transformations répétitives et d’aller bien au-delà de ce que l’interface propose. Et surtout, de ne plus le confondre avec DAX, l’autre langage de Power BI, qui n’a pas du tout le même rôle. Si vous hésitez encore sur la répartition des rôles entre les deux outils, notre article sur les différences entre Power Query et Power BI vous donnera une vision d’ensemble.

Qu’est-ce que le langage M ?

Le langage M (pour Mashup) est le langage de formules de Power Query. Son nom officiel est Power Query Formula Language. Il sert à extraire, nettoyer et transformer des données avant qu’elles ne soient chargées dans votre modèle.

On le retrouve partout où Power Query est présent :

  • Power BI Desktop (« Transformer les données »)
  • Excel (onglet Données, « Obtenir et transformer »)
  • Les flux de données (dataflows) du service Power BI et de Microsoft Fabric

Chaque clic dans l’éditeur Power Query génère une ligne de code M. Vous pouvez la consulter et la modifier dans l’Éditeur avancé (onglet Affichage).

La structure d’une requête M : let … in

Une requête M se lit comme une recette : une suite d’étapes, chacune s’appuyant sur la précédente. Elle suit toujours la structure let … in.

let

   Source = Excel.Workbook(File.Contents("C:\Data\ventes.xlsx"), null, true),

   Feuille = Source{[Item="Ventes", Kind="Sheet"]}[Data],

   Entetes = Table.PromoteHeaders(Feuille, [PromoteAllScalars=true]),

   Types = Table.TransformColumnTypes(Entetes, {{"Date", type date}, {"Montant", type number}}),

   Filtre = Table.SelectRows(Types, each [Montant] > 0)

in

   Filtre

Voici comment lire ce code :

  • let ouvre le bloc des étapes. Chaque étape porte un nom (Source, Feuille, Entetes…), ce sont les « Étapes appliquées » que vous voyez dans le volet de droite de l’éditeur.
  • Chaque étape utilise le résultat de la précédente comme point de départ.
  • in indique quelle étape constitue le résultat final de la requête.
  • Les fonctions M sont rangées par famille : Table. pour les tables, Text. pour le texte, Date. pour les dates, List. pour les listes, etc.
  • each [Montant] > 0 est une écriture raccourcie de fonction : elle signifie « pour chaque ligne, garder celles dont le montant est supérieur à 0 ».

Ces fonctions sont celles que l’interface utilise quand vous fusionnez plusieurs tables avec Power Query ou quand vous combinez des données provenant de plusieurs sources : à chaque fois, une fonction M est écrite pour vous.

Les points à connaître avant de se lancer sur le langage M

  • M est sensible à la casse. Table.SelectRows fonctionne, table.selectrows renvoie une erreur. C’est la cause la plus fréquente de messages d’erreur chez les débutants.
  • Les structures de données de M sont les valeurs simples (texte, nombre, date), les listes {1, 2, 3}, les enregistrements [Nom="Léa", Age=32] et les tables.
  • Les noms d’étapes avec espaces doivent s’écrire sous la forme #"Colonnes renommées".
  • L’évaluation est « paresseuse » : M ne calcule que ce qui est nécessaire au résultat final.
  • Le repliement de requête (query folding) : lorsque la source est une base de données, Power Query peut traduire vos étapes en SQL pour que le calcul se fasse côté serveur, ce qui accélère nettement l’actualisation.

Le langage M permet aussi de réaliser des constructions plus avancées, comme créer une table de dates avec un calendrier fiscal, un cas d’usage très courant en entreprise.

Et DAX, alors ?

DAX (Data Analysis Expressions) est un tout autre langage. Il intervient après Power Query, une fois les données chargées dans le modèle. Il sert à calculer des indicateurs : chiffre d’affaires, marge, évolution par rapport à l’an dernier, cumul annuel, etc.

Un exemple de mesure DAX :

CA = SUM(Ventes[Montant])

CA N-1 = CALCULATE([CA], SAMEPERIODLASTYEAR(Calendrier[Date]))

Une image simple pour retenir la différence : M prépare les ingrédients (lavage, découpe, tri), DAX cuisine le plat (calculs, indicateurs).

M vs DAX : les différences clés

  • Rôle : M transforme et prépare les données ; DAX calcule des indicateurs et enrichit le modèle.
  • Moment d’exécution : M s’exécute lors de l’actualisation des données ; DAX se recalcule à la volée selon les filtres et les visuels du rapport.
  • Où l’écrire : M dans l’éditeur Power Query ; DAX dans la vue Modèle, la vue Rapport ou la barre de formule (mesures, colonnes calculées, tables calculées).
  • Logique : M est un langage fonctionnel, qui enchaîne des étapes ; DAX repose sur le contexte de filtre, qui change selon l’endroit où la mesure est affichée.
  • Casse : M est sensible à la casse ; DAX ne l’est pas.
  • Disponibilité : M fonctionne dans Excel, Power BI et Fabric ; DAX fonctionne dans Power BI, Power Pivot (Excel) et SQL Server Analysis Services.
  • Aspect : M ressemble à une suite d’instructions (Table.…, Text.…) ; DAX ressemble aux formules Excel (SUM, IF, CALCULATE).

M ou DAX : comment choisir ?

La règle d’or : transformez en amont avec M, calculez en aval avec DAX.

  • Nettoyer, filtrer, fusionner ou pivoter des données, changer des types, combiner plusieurs fichiers : M.
  • Créer un total, un pourcentage, un cumul, une comparaison de périodes ou tout calcul qui doit réagir aux segments et aux filtres du rapport : DAX.

Une colonne peut parfois se créer indifféremment en M ou en DAX. Privilégiez alors M : le calcul est fait une seule fois à l’actualisation, le modèle est plus léger et plus rapide.

Par où commencer ?

  1. Faites vos transformations avec l’interface, sans écrire de code.
  2. Ouvrez l’Éditeur avancé pour observer le code M généré.
  3. Modifiez-le petit à petit : renommez une étape, changez un paramètre, ajoutez une fonction.
  4. Une fois à l’aise avec M, abordez DAX et la notion de contexte de filtre.

Martin

Martin est CTO de Solpedinn depuis sa création. Diplômé de Sciences Politiques, Martin souhaite mettre ses compétences au service de ses passions : le jeu, la pédagogie et la technique. C’est en associant ces trois sciences que l’identité de Solpedinn s’est créée et grâce à son savoir-faire qu’elle s’est développée.