Business Digital

Importer et nettoyer des données avec Power Query dans Power BI Desktop

13 min de lecture

La phase la plus chronophage d’un projet décisionnel n’est presque jamais la création des graphiques : c’est le moment où l’on récupère des fichiers exportés à la main, des extractions comptables aux colonnes mal nommées et des tableurs où une même région s’écrit de trois façons différentes. Power Query, l’outil de préparation de données intégré à Power BI Desktop, sert précisément à transformer ce désordre en une table propre, typée et reproductible. Une fois vos étapes définies, elles se rejouent automatiquement à chaque actualisation : vous nettoyez une fois, le travail se répète seul ensuite.

Ce tutoriel s’inscrit dans une série consacrée à Power BI et Microsoft Fabric. Pour la vue d’ensemble (architecture, licences, feuille de route), commencez par le guide de référence Power BI et Microsoft Fabric. Ici, on se concentre sur une compétence précise : importer puis nettoyer des données dans l’éditeur Power Query de Power BI Desktop, étape par étape.

Prérequis

  • Power BI Desktop installé (l’application est gratuite et reçoit une mise à jour mensuelle ; téléchargeable depuis le Microsoft Store ou le centre de téléchargement Microsoft).
  • Un jeu de données d’exemple : un fichier CSV ou Excel de ventes avec quelques colonnes (date, région, produit, montant). Peu importe s’il est imparfait — c’est même mieux pour s’exercer.
  • Niveau : débutant à intermédiaire. Aucune connaissance préalable du langage M n’est requise, mais on l’introduira progressivement.
  • Temps estimé : 45 à 60 minutes.

Étape 1 — Ouvrir l’éditeur Power Query

Avant de toucher au moindre graphique, il faut comprendre que Power BI sépare nettement deux mondes : la préparation des données (Power Query) et leur analyse (le modèle et les visuels). Tout ce qui relève du nettoyage, du typage et de la mise en forme des colonnes se fait dans l’éditeur Power Query, en amont. On y accède pour garder le modèle final léger et fiable.

Dans Power BI Desktop, ouvrez l’onglet Accueil du ruban, puis cliquez sur Transformer les données. Une nouvelle fenêtre s’ouvre : c’est l’éditeur Power Query. Si vous n’avez pas encore chargé de source, utilisez d’abord Obtenir les données pour en sélectionner une, puis choisissez Transformer les données plutôt que Charger directement.

Une fois dans l’éditeur, repérez le volet Étapes appliquées, à droite. Chaque action que vous effectuez y crée une ligne. C’est le cœur de la philosophie de Power Query : vous ne modifiez pas les données « à la main », vous enregistrez une recette d’étapes qui sera rejouée à l’identique à chaque actualisation. Si vous voyez déjà des étapes nommées Source et En-têtes promus, c’est normal : Power Query a détecté automatiquement la structure du fichier.

Étape 2 — Se connecter à une source et lire l’aperçu

La connexion détermine la suite : un fichier plat (CSV, Excel) n’offre pas les mêmes possibilités d’optimisation qu’une base SQL. Pour ce tutoriel, partons d’un CSV, le cas le plus fréquent quand on récupère un export. L’objectif de cette étape est de vérifier que Power BI lit correctement le séparateur, l’encodage et les en-têtes.

let
    Source = Csv.Document(
        File.Contents("C:\data\ventes.csv"),
        [Delimiter=";", Encoding=65001, QuoteStyle=QuoteStyle.Csv]
    ),
    EnTetesPromus = Table.PromoteHeaders(Source, [PromoteAllScalars=true])
in
    EnTetesPromus

Ce code, que Power Query génère pour vous, mérite d’être lu une fois : Delimiter=";" indique le point-virgule comme séparateur (courant sur les exports francophones), Encoding=65001 correspond à l’UTF-8 (ce qui évite les accents transformés en symboles bizarres) et Table.PromoteHeaders promeut la première ligne en noms de colonnes. Si vos accents s’affichent mal, c’est presque toujours un problème d’encodage : revenez sur l’étape Source et changez l’encodage. Vous devez maintenant voir un tableau avec des en-têtes lisibles ; sinon, ajustez le délimiteur.

Étape 3 — Typer les colonnes correctement

C’est l’erreur numéro un des débutants : laisser une colonne de montants en « texte » ou une date au mauvais format. Tant que le type n’est pas correct, vos additions, vos moyennes et votre intelligence temporelle échoueront silencieusement plus tard. On fixe donc le type de chaque colonne dès maintenant, et surtout on le fait explicitement plutôt que de se fier à la détection automatique.

TypeDefini = Table.TransformColumnTypes(
    EnTetesPromus,
    {
        {"Date", type date},
        {"Region", type text},
        {"Produit", type text},
        {"Montant", Currency.Type}
    }
)

Chaque paire entre accolades associe une colonne à son type : type date pour la date, type text pour les libellés, Currency.Type pour un montant monétaire (qui évite les erreurs d’arrondi des décimaux flottants). Après cette étape, l’icône en haut de chaque colonne doit refléter le bon type — un petit calendrier pour les dates, un symbole monétaire pour les nombres. Si une cellule devient une erreur (mot Error), c’est qu’une valeur ne correspond pas au type demandé : on traite ce cas à l’étape suivante.

Un point culturel utile : Power Query interprète les dates selon le paramètre régional du fichier, pas celui de votre Windows. Si vos dates « 03/04 » sont lues comme le 4 mars au lieu du 3 avril, utilisez l’option Utiliser les paramètres régionaux du menu de changement de type pour forcer le format jour/mois.

Étape 4 — Supprimer le superflu et gérer les valeurs manquantes

Un export contient presque toujours des colonnes inutiles (codes internes, champs vides) et des lignes parasites (totaux intermédiaires, lignes vides en bas de fichier). Les conserver alourdit le modèle et fausse les agrégations. L’objectif ici est d’obtenir une table où chaque ligne est une vraie observation et chaque colonne une vraie information.

Pour retirer des colonnes, sélectionnez-les puis clic droit, Supprimer les colonnes. Pour filtrer les lignes, utilisez le menu déroulant d’en-tête, comme dans un tableur. Power Query traduit ces gestes en code. Voici l’équivalent en M d’un filtre qui ne garde que les montants strictement positifs et non nuls :

LignesValides = Table.SelectRows(
    TypeDefini,
    each [Montant] <> null and [Montant] > 0
)

La fonction Table.SelectRows garde uniquement les lignes pour lesquelles la condition est vraie. Le mot-clé each introduit une condition évaluée ligne par ligne, et [Montant] désigne la valeur de la colonne sur la ligne courante. Après application, le nombre de lignes affiché en bas de l’éditeur doit diminuer : c’est le signal que le filtre a bien retiré les lignes vides et les éventuels remboursements négatifs. Pour remplacer plutôt que supprimer, utilisez Remplacer les valeurs ou, pour les erreurs de type, Remplacer les erreurs.

Étape 5 — Transformer les colonnes : fractionner, extraire, remplacer

Les données réelles arrivent rarement dans la forme dont on a besoin. Un champ « Région-Ville » concatène deux informations ; une référence produit contient un préfixe à isoler ; un libellé comporte des espaces de fin invisibles qui empêchent les regroupements. Cette étape consiste à découper et normaliser ces colonnes pour qu’elles deviennent exploitables.

Le ruban Transformer regroupe ces opérations : Fractionner la colonne (par délimiteur ou par nombre de caractères), Extraire (les n premiers caractères, le texte avant un séparateur), Format (mettre en minuscules, supprimer les espaces superflus avec Supprimer les espaces). Pour fractionner « Dakar-Plateau » en deux colonnes sur le tiret, le code généré ressemble à :

Fractionnee = Table.SplitColumn(
    LignesValides,
    "Localisation",
    Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv),
    {"Region", "Quartier"}
)

Splitter.SplitTextByDelimiter définit le caractère de coupe, et la liste finale donne les noms des nouvelles colonnes. Vérifiez après coup que la coupe n’a pas généré de colonnes vides (cas où le délimiteur est absent de certaines lignes). Pensez aussi à appliquer Supprimer les espaces sur les colonnes texte qui serviront de clés : un « Nord » suivi d’un espace et un « Nord » sans espace sont, pour Power BI, deux valeurs différentes, ce qui casse silencieusement les regroupements.

Étape 6 — Dépivoter pour passer en format analytique

Beaucoup de tableurs sont conçus pour l’œil humain : une colonne par mois, par exemple. Or Power BI raisonne mieux sur un format « long », où chaque ligne représente une seule mesure. Transformer un tableau large en tableau long s’appelle dépivoter, et c’est l’une des transformations les plus puissantes de Power Query.

Sélectionnez les colonnes à conserver telles quelles (par exemple le produit), faites un clic droit et choisissez Dépivoter les autres colonnes. Le code obtenu :

Depivote = Table.UnpivotOtherColumns(
    Fractionnee,
    {"Produit"},
    "Mois",
    "Ventes"
)

Ici, {"Produit"} liste les colonnes qui restent fixes, tandis que toutes les autres (janvier, février, mars…) sont transformées en deux colonnes : une colonne Mois contenant l’ancien nom de colonne, et une colonne Ventes contenant la valeur. Le résultat compte beaucoup plus de lignes mais devient analysable : vous pouvez désormais filtrer par mois, agréger par trimestre, comparer dans le temps. Choisissez systématiquement Dépivoter les autres colonnes plutôt que Dépivoter les colonnes sélectionnées : ainsi, l’ajout d’un nouveau mois dans la source ne cassera pas la requête.

Étape 7 — Combiner plusieurs sources : fusionner et ajouter

Un projet réaliste mélange souvent plusieurs fichiers : les ventes d’un côté, le référentiel client de l’autre, et parfois douze exports mensuels à empiler. Power Query distingue deux opérations qu’il ne faut pas confondre. Ajouter des requêtes empile des tables qui ont la même structure, comme coller les lignes de douze fichiers mensuels bout à bout. Fusionner des requêtes rapproche deux tables sur une clé commune, comme aller chercher le nom du client à partir de son identifiant.

Fusionnee = Table.NestedJoin(
    Depivote, {"IDClient"},
    Clients, {"IDClient"},
    "DonneesClient", JoinKind.LeftOuter
)

Table.NestedJoin réalise une jointure de type LeftOuter : on garde toutes les lignes de ventes, et on y rattache les informations clients quand l’identifiant correspond. Après la jointure, une colonne DonneesClient apparaît sous forme de table imbriquée : cliquez sur l’icône d’expansion (les deux flèches dans l’en-tête) pour choisir les champs à déplier. Si après expansion vous voyez beaucoup de valeurs null, c’est que des identifiants de ventes n’existent pas dans le référentiel client — un signal précieux sur la qualité de vos données sources.

Étape 8 — Préserver le « query folding »

Quand la source est une base de données (SQL Server, PostgreSQL, etc.), Power Query peut traduire vos étapes en une requête SQL exécutée côté serveur. C’est le query folding, et c’est décisif pour la performance : au lieu de télécharger un million de lignes pour en filtrer dix mille, la base ne renvoie que les dix mille déjà filtrées. Comprendre ce mécanisme évite des actualisations interminables.

Pour vérifier qu’une étape « se replie », faites un clic droit dessus dans le volet Étapes appliquées : si Afficher la requête native est disponible, le folding fonctionne jusque-là. Dès qu’une étape ne peut plus être traduite en SQL (souvent l’ajout d’une colonne d’index ou une fonction M sans équivalent SQL), l’option disparaît et tout le reste est traité en mémoire par votre machine.

La règle pratique : placez les opérations qui se replient (filtres, suppressions de colonnes, changements de type, jointures) au début de la requête, et reléguez les transformations non foldables à la fin. Ainsi, le maximum de travail est délégué au serveur. Ce réflexe prépare aussi le terrain pour l’actualisation incrémentielle, qui dépend justement de la capacité de la source à plier les filtres de date.

Étape 9 — Fermer, appliquer et paramétrer la source

Une fois la recette satisfaisante, il faut la transmettre au modèle. Mais avant de fermer, un dernier réflexe professionnel : remplacer le chemin de fichier en dur par un paramètre, pour que la requête ne soit pas liée à votre disque dur personnel.

Dans l’éditeur, allez dans Accueil > Gérer les paramètres > Nouveau paramètre, créez un paramètre texte CheminDossier, puis modifiez l’étape Source pour qu’elle utilise ce paramètre au lieu du chemin littéral. Ensuite, cliquez sur Fermer et appliquer (bouton en haut à gauche). Power BI exécute alors toutes vos étapes et charge la table résultante dans le modèle.

Le voyant à surveiller : en bas à droite de Power BI Desktop, un message indique le nombre de lignes chargées. S’il correspond à votre attente, la préparation est réussie. Vos données propres sont maintenant prêtes à être modélisées. L’étape logique suivante consiste à organiser ces tables en relations cohérentes : voir le tutoriel modéliser en schéma en étoile dans Power BI.

Erreurs fréquentes

Erreur Cause Solution
Accents transformés en caractères illisibles Mauvais encodage à l’import Modifier l’étape Source : encodage UTF-8 (65001)
Les sommes renvoient un résultat vide ou faux Colonne montant restée en type texte Forcer le type avec Table.TransformColumnTypes (Currency.Type)
Regroupements qui « dédoublent » une catégorie Espaces de fin invisibles dans les libellés Appliquer Transformer > Format > Supprimer les espaces
Actualisation très lente sur une base SQL Query folding cassé trop tôt Replacer filtres et jointures avant les étapes non foldables
La requête casse quand un nouveau mois arrive Colonnes figées en dur dans le dépivotage Utiliser « Dépivoter les autres colonnes »
Le rapport ne s’ouvre plus chez un collègue Chemin de fichier codé en dur Externaliser le chemin dans un paramètre

Tutoriels liés

Références

  • Documentation Power Query (Microsoft Learn) : présentation de l’éditeur, langage M et fonctions de table.
  • Référence du langage de formule M (Microsoft Learn) : Table.SelectRows, Table.UnpivotOtherColumns, Table.NestedJoin.
  • Guide « Query folding » de la documentation Power Query.

Questions fréquentes

Faut-il connaître le langage M pour utiliser Power Query ?
Non. L’interface génère le code à votre place pour la grande majorité des besoins. Lire le M devient utile quand vous voulez ajuster une étape finement ou comprendre pourquoi une transformation se comporte autrement que prévu.

Quelle différence avec le nettoyage fait directement dans les visuels ?
Les visuels agrègent et filtrent à l’affichage, mais ne corrigent pas les données sous-jacentes. Power Query intervient en amont, une fois pour toutes, ce qui garantit que toutes vos pages partent de la même base propre.

Mes étapes ralentissent-elles le rapport final ?
Elles s’exécutent à l’actualisation, pas à chaque interaction. Un nettoyage bien conçu, avec query folding préservé, n’a aucun impact sur la fluidité de navigation du rapport publié.

Power Query existe-t-il ailleurs que dans Power BI ?
Oui : le même moteur est présent dans Excel et, sous le nom de Dataflows Gen2, dans Microsoft Fabric. Les compétences acquises ici se transfèrent directement.

Service ITSkillsCenter

Application mobile Android et iOS

Création d'application mobile Android et iOS. À partir de 350 000 FCFA.

Démarrer mon projet
Publicité