BIWORKS

Langage M Power Query : syntaxe, fonctions et exemples

Mis à jour le

Le langage M (Power Query Formula Language) est le langage de Power Query, l’outil de préparation de données intégré à Power BI et à Excel. Chaque clic dans l’éditeur Power Query (filtrer une colonne, fusionner deux tables, changer un type) écrit en réalité une ligne de code M. Le lire et savoir l’ajuster permet d’aller bien au-delà de ce que propose l’interface.

Table des matières

Le langage M dans le processus ETL

Dans Power BI, le M couvre les étapes Extract et Transform du processus ETL : se connecter aux sources, puis nettoyer et mettre en forme les données avant de les charger dans le modèle. C’est un langage fonctionnel : chaque étape est une expression qui prend le résultat de l’étape précédente et renvoie une nouvelle table. Pour une vue d’ensemble de l’outil, lisez notre guide Power Query, c’est quoi ?.

Où voir et écrire du M ?

  • Barre de formule de l’éditeur Power Query (menu Affichage > Barre de formule) : le code de l’étape sélectionnée.
  • Éditeur avancé (Accueil > Éditeur avancé) : la requête complète, modifiable.
  • Requête vide (Nouvelle source > Requête vide) : pour écrire une requête ou une fonction de zéro.
  • Le même code fonctionne dans Excel, Power BI Desktop, les flux de données et les Dataflow Gen2 de Microsoft Fabric.

La structure let … in

Toute requête M suit la même structure : une suite d’étapes nommées dans le bloc let, et le résultat renvoyé après in.

let
    Source = Csv.Document(File.Contents("C:\Exports\ventes.csv"), [Delimiter=";", Encoding=65001]),
    EnTetes = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    Types = Table.TransformColumnTypes(EnTetes, {{"Date", type date}, {"Montant", type number}}),
    SansVides = Table.SelectRows(Types, each [Montant] <> null),
    Ajout = Table.AddColumn(SansVides, "Année", each Date.Year([Date]), Int64.Type)
in
    Ajout

Chaque nom d’étape correspond à une ligne du volet Étapes appliquées. Le mot-clé each est un raccourci pour une fonction appliquée à chaque ligne, et [Montant] désigne la colonne de la ligne en cours.

Types et valeurs

TypeExempleRemarque
Texte"Paris"Guillemets doubles
Nombre42, 3.14Le point est le séparateur décimal
Date#date(2026, 9, 23)Aussi #datetime, #duration
Logiquetrue, false
Liste{1, 2, 3}Accolades
Enregistrement[Nom = "BIWORKS", Ville = "Le Mans"]Une « ligne »
TableRésultat de Table.FromRecords(...)Le type le plus courant
NullnullValeur manquante

Typer correctement les colonnes dès le début évite la plupart des erreurs de chargement et accélère les actualisations.

Les fonctions M essentielles

BesoinFonction
Filtrer des lignesTable.SelectRows
Garder ou supprimer des colonnesTable.SelectColumns, Table.RemoveColumns
Ajouter une colonne calculéeTable.AddColumn
Fusionner deux tablesTable.NestedJoin puis Table.ExpandTableColumn
Empiler des tablesTable.Combine
Regrouper et agrégerTable.Group
DépivoterTable.UnpivotOtherColumns
Remplacer des valeursTable.ReplaceValue
Gérer les erreurstry … otherwise
TexteText.Upper, Text.Trim, Text.Split, Text.PadStart
DatesDate.Year, Date.StartOfMonth, Date.AddMonths

Paramètres et fonctions personnalisées

Les paramètres (Accueil > Gérer les paramètres) rendent une solution portable : chemin de dossier, date de début, environnement de test ou de production.

Les fonctions personnalisées évitent de dupliquer la même logique. Exemple : une fonction qui nettoie un export comptable, appliquée ensuite à chaque fichier d’un dossier.

(fichier as binary) as table =>
let
    Source = Excel.Workbook(fichier, true),
    Donnees = Source{0}[Data],
    Types = Table.TransformColumnTypes(Donnees, {{"Compte", type text}, {"Débit", type number}, {"Crédit", type number}}),
    Solde = Table.AddColumn(Types, "Solde", each [Débit] - [Crédit], type number)
in
    Solde

Appelée via Ajouter une colonne > Appeler une fonction personnalisée sur la liste des fichiers d’un dossier, elle consolide automatiquement tous les exports.

M ou DAX ?

Langage MDAX
RôlePréparer les donnéesCalculer les indicateurs
MomentAvant le chargement, à l’actualisationAprès le chargement, à chaque affichage
ExemplesNettoyer, fusionner, dépivoterMarge, cumul annuel, comparaison N-1
OutilÉditeur Power QueryMesures du modèle

La règle : tout ce qui peut être préparé en amont doit l’être en M. Le DAX reste réservé aux calculs qui dépendent des filtres de l’utilisateur.

Bonnes pratiques

  • Renommez les étapes de façon explicite plutôt que de garder « Colonnes renommées 3 ».
  • Filtrez et supprimez les colonnes tôt pour réduire le volume traité.
  • Préservez le repli de requête (query folding) sur les bases de données : les premières étapes sont alors exécutées par le serveur source.
  • Paramétrez les chemins et les dates plutôt que de les écrire en dur.
  • Commentez le code complexe avec // ou /* … */.
  • Gérez les erreurs avec try … otherwise plutôt que de supprimer aveuglément les lignes en erreur.

Le langage M se maîtrise rapidement avec des cas concrets : nos formations Power BI, éligibles CPF, consacrent une large place à Power Query et à l’automatisation de vos imports comptables et commerciaux.

Questions fréquentes

Qu'est-ce que le langage M ?
Le langage M (Power Query Formula Language) est le langage de Power Query, l'outil de préparation de données d'Excel et de Power BI. Chaque action réalisée à la souris dans l'éditeur Power Query génère une étape en M, visible et modifiable dans l'éditeur avancé.
Quelle différence entre le langage M et le DAX ?
Le M prépare les données avant leur chargement : connexion, nettoyage, transformation. Le DAX calcule des indicateurs sur le modèle déjà chargé : mesures, cumuls, comparaisons. On utilise M en amont, DAX en aval.
Faut-il connaître le M pour utiliser Power Query ?
Non, l'interface graphique couvre la plupart des besoins. Connaître les bases du M devient utile pour créer des paramètres, des fonctions personnalisées, gérer les erreurs ou optimiser des requêtes complexes.
Le langage M est-il sensible à la casse ?
Oui. Les noms de fonctions, de colonnes et de variables doivent respecter exactement les majuscules et minuscules : Table.SelectRows fonctionne, table.selectrows provoque une erreur.

À lire aussi

Passez à la pratique : Formation Power BI avancée : DAX et Power Query (niveau intermédiaire, éligible CPF)

Formation Power BI avancée de 2 jours : Power Query, langage M et DAX complexe, préparation à la certification ENI RS7103. Éligible CPF, Qualiopi.

Voir la formation