🎯 Contexte
Le fichier livraisons.csv de NordSupply contient des données brutes issues du WMS :
dates au format texte, montants avec virgules, doublons, colonnes inutiles.
Avant toute analyse, il faut nettoyer et transformer.
Vous découvrirez l'éditeur Power Query et le langage M.
📋 Prérequis
- TP 02 terminé (sources connectées)
- Fichier .pbix avec au moins la table
livraisonschargée
🛠️ Étape 1 — Ouvrir Power Query
- Cliquer sur Accueil > Transformer les données
- L'éditeur Power Query s'ouvre dans une nouvelle fenêtre
- Identifier les 3 zones :
- Requêtes (gauche) : liste des tables
- Aperçu (centre) : prévisualisation
- Étapes appliquées (droite) : historique des transformations
🛠️ Étape 2 — Promouvoir les en-têtes
Si la 1ère ligne contient les noms de colonnes mais a été détectée comme données :
- Onglet Accueil > Utiliser la première ligne comme en-tête
🛠️ Étape 3 — Typer les colonnes
Cliquer sur l'icône à gauche du nom de colonne pour changer le type :
| Colonne | Type à appliquer |
|---|---|
| date_livraison | Date |
| montant | Nombre décimal |
| quantite | Nombre entier |
| statut | Texte |
⚠️ Erreur fréquente : si "1 234,56" n'est pas converti en nombre, c'est un problème de locale. Faire un clic-droit sur la colonne → Modifier le type > Avec les paramètres régionaux > Français (France).
🛠️ Étape 4 — Supprimer les doublons
- Sélectionner les colonnes clés :
numero_livraison - Onglet Accueil > Supprimer les lignes > Supprimer les doublons
💡 Vous devriez perdre quelques lignes (≈ 2-5%).
🛠️ Étape 5 — Ajouter des colonnes calculées
Onglet Ajouter une colonne > Colonne personnalisée :
Colonne 1 : Année
Date.Year([date_livraison])
Colonne 2 : Mois
Date.Month([date_livraison])
Colonne 3 : Nom du mois
Date.ToText([date_livraison], "MMMM")
Colonne 4 : Retard de livraison (en jours)
Duration.Days([date_livraison] - [date_promise])
🛠️ Étape 6 — Fusionner deux requêtes
Objectif : enrichir livraisons avec le nom du commercial.
- Accueil > Fusionner des requêtes
- Table de gauche :
livraisons, colonneid_commercial - Table de droite :
commerciaux, colonneid - Type de jointure : Externe gauche
- Cliquer sur la flèche de la nouvelle colonne → décocher tout sauf
nom_complet
🛠️ Étape 7 — Code M complet (avancé)
Visualisez le code généré : Affichage > Éditeur avancé
let
Source = Csv.Document(Web.Contents("https://powerbi-cours.app.girault-conceptions.com/downloads/livraisons.csv"),
[Delimiter=";", Columns=8, Encoding=65001, QuoteStyle=QuoteStyle.None]),
Headers = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
Typed = Table.TransformColumnTypes(Headers,{
{"numero_livraison", type text},
{"date_livraison", type date},
{"montant", type number},
{"quantite", Int64.Type},
{"statut", type text},
{"region", type text},
{"id_commercial", Int64.Type},
{"date_promise", type date}
}),
Dedup = Table.Distinct(Typed, {"numero_livraison"}),
AjoutAnnee = Table.AddColumn(Dedup, "Annee", each Date.Year([date_livraison]), Int64.Type),
AjoutMois = Table.AddColumn(AjoutAnnee, "Mois", each Date.Month([date_livraison]), Int64.Type),
AjoutRetard = Table.AddColumn(AjoutMois, "Retard_jours",
each Duration.Days([date_livraison] - [date_promise]), Int64.Type)
in
AjoutRetard
🛠️ Étape 8 — Fermer et appliquer
Accueil > Fermer et appliquer — les transformations sont alors poussées dans le modèle Power BI.
📊 Résultat attendu
- Table
livraisonspropre, typée, dédoublonnée - 4 colonnes calculées : Année, Mois, Nom du mois, Retard_jours
- Colonne
nom_completdu commercial fusionnée - ~ 8 à 10 étapes appliquées visibles dans le volet droit
✅ Critères d'évaluation
- Types de colonnes corrects (Date, Decimal, Integer)
- Doublons supprimés
- 4 colonnes calculées présentes
- Fusion réussie avec table commerciaux
- Code M lisible et commenté