Girault Conceptions

Power BI — Master 2 PPA Supply Chain

← Retour à la liste des exercices
Exercice TOP · Rang 3

3️⃣ DAX Basics — Mes premières mesures

Apprendre la syntaxe DAX, colonnes calculées, mesures, contexte de filtre et de ligne — adapté à NordSupply.

Source Microsoft Learn DAX expliqué pas à pas

⏱ Durée 2h
👤 Niveau Débutant DAX — prérequis idéal avant TP 5-6
🌐 Langue FR
🔗 Voir l'article original ↗

🎯 Énoncé — Mes premières mesures DAX

Cet exercice vous fait écrire vos premières formules DAX. Vous allez créer 2 colonnes calculées et 5 mesures, puis comprendre quand utiliser l'une ou l'autre.

📊 Données utilisées : notre base PostgreSQL NordSupply (vous pourrez réutiliser ce que vous avez chargé au TP 2). Pas besoin du Contoso Sample — nos données sont parfaites pour cet exercice.

📋 Prérequis

  • TP 02 terminé (PostgreSQL commerce chargé)
  • TP 04 recommandé (relations en place)

🛠️ Étape 1 — Comprendre la différence (théorie)

Colonne calculéeMesure
ÉvaluéeAu chargementÀ l'affichage
ContexteLigne (RowContext)Filtre (FilterContext)
StockageDans la table (mémoire)Aucun
UsageSlicer / catégorie / filtreAgrégat dans visuel
Quand l'utiliser ?Quand on a besoin d'une valeur par ligneQuand on a besoin d'un total qui réagit aux filtres

🛠️ Étape 2 — Créer 2 colonnes calculées

Colonne 1 : dans la table lignes_commandeModélisation > Nouvelle colonne

Montant Ligne = lignes_commande[quantite] * lignes_commande[prix_unitaire]

→ Vérifiez que la colonne apparaît bien dans la table avec un montant par ligne.

Colonne 2 : dans la table clients

Segment CA =
SWITCH(
    TRUE(),
    RELATED... // pas possible ici car clients est dimension !
    [CA Client] > 50000, "A - Grand compte",
    [CA Client] > 10000, "B - Compte moyen",
                         "C - Petit compte"
)

⚠️ Problème : [CA Client] est une mesure. On ne peut pas utiliser une mesure dans une colonne calculée sans précaution. Il faut convertir le contexte avec CALCULATE. Version corrigée :

Segment CA =
VAR _ca =
    CALCULATE(
        SUMX( lignes_commande, lignes_commande[quantite] * lignes_commande[prix_unitaire] ),
        RELATEDTABLE( commandes )
    )
RETURN
    SWITCH( TRUE(),
        _ca > 50000, "A - Grand compte",
        _ca > 10000, "B - Compte moyen",
                     "C - Petit compte"
    )

🛠️ Étape 3 — Créer 5 mesures essentielles

Dans la table _Mesures (créez-la si elle n'existe pas) :

Mesure 1 — CA Total

CA Total =
SUMX( lignes_commande, lignes_commande[quantite] * lignes_commande[prix_unitaire] )

Mesure 2 — Nombre de commandes

Nb Commandes = DISTINCTCOUNT( commandes[id] )

Mesure 3 — Panier moyen

Panier Moyen = DIVIDE( [CA Total], [Nb Commandes], 0 )

Mesure 4 — CA par client (utilise RELATED)

CA Client =
CALCULATE(
    [CA Total],
    USERELATIONSHIP( commandes[id_client], clients[id] )
)

Mesure 5 — % du total (contexte de filtre)

% du Total =
DIVIDE(
    [CA Total],
    CALCULATE( [CA Total], ALL( clients ) ),
    0
)

🛠️ Étape 4 — Tester dans un visuel

  1. Insérez un tableau
  2. Colonnes : clients[raison_sociale], [CA Total], [% du Total], [Segment CA]
  3. Triez par [CA Total] décroissant
  4. Activez la mise en forme conditionnelle en barres sur [% du Total]

🧠 Quiz de validation

  1. Q1. SUMX vs SUM — quelle est la différence ?
  2. Q2. Si je crée une colonne = [CA Total] dans la table clients, quel sera son résultat sans CALCULATE ?
  3. Q3. À quoi sert RELATED ?
  4. Q4. Pourquoi mettre ALL( clients ) dans la mesure "% du Total" ?
  5. Q5. Une mesure peut-elle être utilisée comme dimension dans un slicer ?

✅ Solution attendue

👉 Cliquez pour voir les réponses

Q1. SUM agrège une colonne déjà existante. SUMX agrège une expression calculée ligne par ligne (itérateur). Idéal pour quantité × prix_unitaire.

Q2. Le total général du CA répété pour chaque ligne (le contexte de ligne n'active pas les filtres). Pour avoir le CA par client, il faut CALCULATE( [CA Total] ).

Q3. RELATED permet d'aller chercher une valeur dans une table reliée (côté "1" de la relation), depuis le côté "*".

Q4. Pour ignorer le filtre actuel sur clients et obtenir le total général comme dénominateur.

Q5. NON. Seules les colonnes (calculées ou non) peuvent servir de dimension/slicer. Les mesures sont toujours des agrégats.

📝 Livrable

Sauvegardez votre fichier sous DAX_Basics_NomGroupe.pbix et déposez-le dans /travaux/.