🎯 Contexte — TP de révision transversal
Ce TP bonus rejoue, de bout en bout, l'ensemble des compétences vues pendant le semestre, mais sur un nouveau jeu de données : Maven Market, une chaîne de distribution implantée aux États-Unis, au Canada et au Mexique. C'est le jumeau de NordSupply (produits, clients, magasins, régions, transactions, retours) : idéal pour vérifier que vous savez refaire la chaîne complète sans guidage pas-à-pas.
Objectif : construire seul·e un tableau de bord commercial « Topline Performance » couvrant Power Query, la modélisation en étoile, les mesures DAX (dont la Time Intelligence) et un rapport interactif.
⬇️ Téléchargements du TP
Énoncé complet au format PDF :
Les 8 fichiers de données (à enregistrer dans un même dossier local MavenMarket) :
- 🗓️ MavenMarket_Calendar.csv
- 👥 MavenMarket_Customers.csv
- 📦 MavenMarket_Products.csv
- 🗺️ MavenMarket_Regions.csv
- ↩️ MavenMarket_Returns_1997-1998.csv
- 🏬 MavenMarket_Stores.csv
- 🧾 MavenMarket_Transactions_1997.csv
- 🧾 MavenMarket_Transactions_1998.csv
💡 Les deux fichiers Transactions (1997 et 1998) ont la même structure : c'est l'occasion d'utiliser le connecteur Dossier de Power Query pour les combiner automatiquement.
🗂️ Le modèle de données (schéma réel)
| Table | Rôle | Colonnes principales |
|---|---|---|
Transactions | Faits — ventes | transaction_date, stock_date, product_id, customer_id, store_id, quantity |
Returns | Faits — retours | return_date, product_id, store_id, quantity |
Products | Dimension produit | product_id, product_brand, product_name, product_retail_price, product_cost |
Customers | Dimension client | customer_id, first_name, last_name, birthdate, gender, customer_country |
Stores | Dimension magasin | store_id, region_id, store_type, store_city, store_country |
Regions | Dimension région | region_id, sales_district, sales_region |
Calendrier | Dimension temps | date |
🔧 Phase 1 — Préparation des données (Power Query)
- Importer les 6 tables simples (Calendar, Customers, Products, Regions, Returns, Stores) via Texte/CSV.
- Pour les ventes : Obtenir les données > Dossier → pointer le dossier contenant les 2 fichiers
Transactions_1997/1998→ Combiner et transformer. - Vérifier/forcer les types (dates, décimaux pour prix/coût, entiers pour quantités).
- Table
Customers— colonnes personnalisées :
// Nom complet
= [first_name] & " " & [last_name]
// Année de naissance
= Date.Year([birthdate])
Table Products — prix remisé (-10 %) :
= [product_retail_price] * 0.9
Table Calendrier (à partir de la colonne date) — ajouter les colonnes temporelles :
Année = Date.Year([date])
Mois = Date.Month([date])
NomMois = Date.MonthName([date])
Trimestre = "T" & Text.From(Date.QuarterOfYear([date]))
NomJour = Date.DayOfWeekName([date])
EstWeekend = if Date.DayOfWeek([date], Day.Monday) >= 5 then "Y" else "N"
🔗 Phase 2 — Modélisation (schéma en étoile)
| Table « plusieurs » | Clé | Table « un » |
|---|---|---|
| Transactions | product_id | Products |
| Transactions | customer_id | Customers |
| Transactions | store_id | Stores |
| Transactions | transaction_date | Calendrier (date) |
| Returns | product_id | Products |
| Returns | store_id | Stores |
| Returns | return_date | Calendrier (date) |
| Stores | region_id | Regions |
- Marquer
Calendriercomme table de dates (indispensable à la Time Intelligence). - Masquer les colonnes clés de la vue Rapport.
🧮 Phase 3 — Mesures DAX & Time Intelligence
Regrouper les mesures dans une table dédiée _Mesures.
Mesures de base
Quantity Sold = SUM(Transactions[quantity])
Total Transactions = COUNTROWS(Transactions)
Quantity Returned = SUM(Returns[quantity])
Total Returns = COUNTROWS(Returns)
Return Rate = DIVIDE([Quantity Returned], [Quantity Sold], "Aucune vente")
Chiffre d'affaires, coût, marge
Total Revenue =
SUMX(Transactions, Transactions[quantity] * RELATED(Products[product_retail_price]))
Total Cost =
SUMX(Transactions, Transactions[quantity] * RELATED(Products[product_cost]))
Total Profit = [Total Revenue] - [Total Cost]
Profit Margin = DIVIDE([Total Profit], [Total Revenue], 0)
Contexte de filtre & Time Intelligence
Weekend Transactions =
CALCULATE([Total Transactions], Calendrier[EstWeekend] = "Y")
Revenue 60 jours =
CALCULATE([Total Revenue],
DATESINPERIOD(Calendrier[date], MAX(Calendrier[date]), -60, DAY))
Last Month Revenue =
CALCULATE([Total Revenue], DATEADD(Calendrier[date], -1, MONTH))
Revenue YTD = TOTALYTD([Total Revenue], Calendrier[date])
Revenue N-1 =
CALCULATE([Total Revenue], SAMEPERIODLASTYEAR(Calendrier[date]))
Revenue Target = [Last Month Revenue] * 1.1
Rang Marque =
RANKX(ALL(Products[product_brand]), [Total Revenue], , DESC)
💡 Sachez expliquer la différence entre contexte de ligne (SUMX)
et contexte de filtre (CALCULATE), et le rôle de RELATED.
📊 Phase 4 — Rapport « Topline Performance »
- En-tête avec titre + logo.
- Cartes KPI : Total Transactions, Total Profit, Total Returns (avec tendance vs mois précédent).
- Matrice transactions/profit par
product_brandavec mise en forme conditionnelle (barres de données). - Carte géographique par
store_country/sales_region. - Treemap par marque, graphique en courbes du CA dans le temps.
- Jauge CA réel vs
Revenue Target. - Segments (année, mois, pays), signets + boutons de navigation.
🏅 Compléments obligatoires (pour couvrir 100 % du programme)
- Drillthrough vers une page de détail produit ou magasin.
- RLS : un rôle filtrant par
store_country(ex. un manager ne voit que son pays). - Publication sur Power BI Service + actualisation planifiée.
✅ Critères d'évaluation (sur 20)
| Critère | Points |
|---|---|
| Préparation des données (types, colonnes, dossier combiné) | /4 |
| Modélisation en étoile + table de dates | /4 |
| Mesures DAX (base + ≥ 3 Time Intelligence) | /5 |
| Rapport & visuels (lisibilité, mise en forme conditionnelle) | /4 |
| Interactivité (segments, signets, interactions) | /2 |
| Qualité globale & restitution | /1 |
| Bonus (drillthrough · RLS · publication) | +1 |
📚 Pour aller plus loin
Cette révision rebalaie les notions des séances S3 à S9. Reportez-vous aux PDF de cours correspondants en cas de blocage, et comparez votre démarche à celle suivie sur NordSupply.