Corrigés des exercices DAX
Ce document rassemble, pour les 8 thèmes d'exercices DAX, l'énoncé de chaque question, le résultat attendu, la formule DAX de la réponse et une courte explication.
Mode d'emploi
- Chaque thème correspond à deux PBIP dans
dax/exercices/:ExoN_Theme_Enonce(pour les stagiaires) etExoN_Theme_Corrige(mesures solutions rangées par dossier dans la table Ventes). - Les résultats attendus sont calculés sur le jeu de données des exercices (2024 et 2025) : ils permettent de vérifier rapidement la mesure d'un stagiaire sur une ligne témoin.
- Les « mesures fournies » existent déjà dans le PBIP énoncé (dossier
0. Mesures fournies). - Les formules sont celles du PBIP corrigé ; seule la mise en page (retours à la ligne) a été ajoutée ici.
- Source (support de formation gd.solutions)
Sommaire
- Thème 1 | Mesures de base et ratios (6 questions)
- Thème 2 | Comparaisons dans le temps (6 questions)
- Thème 3 | Parts et contributions (5 questions)
- Thème 4 | Classements et Top N (6 questions)
- Thème 5 | Analyse clients (6 questions)
- Thème 6 | Objectifs et budget (4 questions)
- Thème 7 | Délais et logistique (4 questions)
- Thème 8 | Textes et titres dynamiques (4 questions)
Jeu de données
- Ventes : 1582 lignes, 784 commandes sur 2024 et 2025 (date de commande, date de livraison, client, produit, pays, quantité, taux de remise, montant remisé).
- Produit : produit, couleur, catégorie, prix unitaire catalogue, coût unitaire.
- Client : client, segment (Particulier, Entreprise), pays, ville, date d'inscription.
- Geographie : pays et continent.
- Calendrier : table de dates marquée (année, trimestre, mois). Relation active sur Ventes[Date], inactive sur Ventes[DateLivraison].
- Objectifs : objectif mensuel par pays (daté du 1er du mois), sans relation avec le modèle.
Thème 1 | Mesures de base et ratios
- Fichiers :
Exo1_MesuresBase_EnonceetExo1_MesuresBase_Corrige. - Mesures fournies : aucune, les stagiaires partent de zéro.
Question 1.1 | CA, quantité et commandes
Énoncé
- Créez trois mesures : le chiffre d'affaires (somme des montants), la quantité vendue et le nombre de commandes.
- Attention : une commande peut contenir plusieurs lignes.
- Indice donné aux stagiaires :
SUMpour les deux premières,DISTINCTCOUNTsur le numéro de commande pour la troisième.
Résultat attendu
- Total : CA 1 073 897,36, quantité 3 909, 784 commandes.
- Ligne Vélos : CA 730 882,13, 341 commandes.
Réponse
CA = SUM ( Ventes[Montant] )
Quantité vendue = SUM ( Ventes[Quantite] )
Nb commandes = DISTINCTCOUNT ( Ventes[NumCommande] )Explication
COUNTROWS( Ventes ) compterait les lignes, pas les commandes :DISTINCTCOUNTcompte les numéros distincts.- Sur la ligne Vélos, une commande qui contient deux vélos n'est comptée qu'une fois.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 1.2 | Panier moyen
Énoncé
- Calculez le panier moyen : chiffre d'affaires moyen par commande.
- Indice donné aux stagiaires : réutilisez vos mesures
CAetNb commandes, et divisez avecDIVIDE.
Résultat attendu
- Total : 1 369,77.
- France : 1 378,31.
Réponse
Panier moyen = DIVIDE ( [CA], [Nb commandes] )Explication
DIVIDErenvoie vide au lieu d'une erreur quand le dénominateur est nul.- Réutiliser des mesures existantes garantit la cohérence des chiffres.
- Source (Microsoft Learn)
Question 1.3 | Prix moyen pondéré
Énoncé
- Calculez le prix moyen de vente pondéré par les quantités (chiffre d'affaires divisé par la quantité).
- Indice donné aux stagiaires : ne faites pas la moyenne de la colonne PrixUnitaire : un vélo vendu 10 fois doit compter 10 fois.
Résultat attendu
- Total : 274,72.
- Vêtements : 50,01.
Réponse
Prix moyen pondéré = DIVIDE ( [CA], [Quantité vendue] )Explication
AVERAGE ( Produit[PrixUnitaire] )donnerait la moyenne du catalogue, sans tenir compte des ventes.- Le prix obtenu intègre aussi les remises, car le montant est remisé.
- Source (Microsoft Learn) | Source (SQLBI)
Question 1.4 | Marge et taux de marge
Énoncé
- Calculez le coût des ventes (quantité x coût unitaire du produit), la marge et le taux de marge.
- Indice donné aux stagiaires : le coût unitaire est dans la table Produit : il faut un itérateur sur Ventes et
RELATED.
Résultat attendu
- Total : marge 407 386,33, taux 37,94 %.
- Vélos : taux de marge 37,01 %.
Réponse
Coût = SUMX ( Ventes, Ventes[Quantite] * RELATED ( Produit[CoutUnitaire] ) )
Marge = [CA] - [Coût]
Taux de marge = DIVIDE ( [Marge], [CA] )Explication
SUMXcalcule quantité x coût sur chaque ligne de vente ;RELATEDlit le coût du produit lié.- Le taux de marge se calcule sur les totaux, jamais en additionnant des taux.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 1.5 | Clients et CA par client
Énoncé
- Comptez les clients distincts qui ont acheté, puis calculez le CA moyen par client.
- Indice donné aux stagiaires :
DISTINCTCOUNTsur la colonne ClientID de Ventes (et nonCOUNTROWSde la table Client).
Résultat attendu
- Total : 130 clients, 8 260,75 par client.
- Entreprise : 26 clients, 16 840,58 par client.
Réponse
Nb clients = DISTINCTCOUNT ( Ventes[ClientID] )
CA moyen par client = DIVIDE ( [CA], [Nb clients] )Explication
- Compter dans Ventes donne les clients actifs ; compter la table Client donnerait tous les clients.
- Les segments Pays et Année montrent que le nombre de clients n'est pas additif.
- Source (Microsoft Learn)
Question 1.6 | Taux de remise moyen
Énoncé
- Calculez le CA brut (quantité x prix catalogue) puis le taux de remise moyen : part du CA brut abandonnée en remises.
- Indice donné aux stagiaires : Taux = ( CA brut - CA ) / CA brut. Le prix catalogue est dans Produit.
Résultat attendu
- Total : 3,25 %.
- France : 2,88 %.
Réponse
CA brut = SUMX ( Ventes, Ventes[Quantite] * RELATED ( Produit[PrixUnitaire] ) )
Taux de remise moyen = DIVIDE ( [CA brut] - [CA], [CA brut] )Explication
- La moyenne de la colonne TauxRemise ne tiendrait pas compte du poids de chaque vente.
- Écrire
1 - DIVIDE ( [CA], [CA brut] )afficherait 100 % sur les lignes sans vente. - Source (Microsoft Learn) | Source (Microsoft Learn)
Thème 2 | Comparaisons dans le temps
- Fichiers :
Exo2_Temps_EnonceetExo2_Temps_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )
Question 2.1 | CA N-1 et évolution
Énoncé
- Calculez le CA de l'année précédente pour la même période, puis le pourcentage d'évolution.
- Indice donné aux stagiaires :
SAMEPERIODLASTYEARdansCALCULATE;DIVIDEpour le pourcentage.
Résultat attendu
- Ligne 2025 : CA N-1 528 326,80, évolution 3,26 %.
- Mars 2025 : CA N-1 37 238,29.
Réponse
CA N-1 = CALCULATE ( [CA], SAMEPERIODLASTYEAR ( Calendrier[Date] ) )
% évolution N-1 = DIVIDE ( [CA] - [CA N-1], [CA N-1] )Explication
SAMEPERIODLASTYEARdécale d'un an les dates visibles : mois, trimestre ou année.- En 2024, CA N-1 est vide (pas de données 2023) et
DIVIDErenvoie vide. - Source (Microsoft Learn) | Source (SQLBI)
Question 2.2 | Cumul annuel
Énoncé
- Calculez le cumul depuis le 1er janvier (
YTD), puis le cumul de l'année précédente à la même date. - Indice donné aux stagiaires :
TOTALYTDpour le cumul ; pour N-1, appliquezSAMEPERIODLASTYEARà votre mesure de cumul.
Résultat attendu
- Juin 2025 : cumul 282 555,63, cumul N-1 274 821,22.
Réponse
Cumul annuel = TOTALYTD ( [CA], Calendrier[Date] )
Cumul annuel N-1 = CALCULATE ( [Cumul annuel], SAMEPERIODLASTYEAR ( Calendrier[Date] ) )Explication
TOTALYTDévalue le CA du 1er janvier à la dernière date visible.- Une mesure peut en réutiliser une autre dans
CALCULATE: le décalage s'applique au cumul. - Source (Microsoft Learn) | Source (Microsoft Learn)
Question 2.3 | Mois précédent
Énoncé
- Calculez le CA du mois précédent, puis l'écart avec le mois en cours (vide s'il n'y a pas de mois précédent).
- Indice donné aux stagiaires :
DATEADDavec -1 etMONTH; testezISBLANKpour l'écart.
Résultat attendu
- Mars 2025 : CA M-1 39 953,41, écart 2 303,09.
- Janvier 2024 : CA M-1 et écart vides.
Réponse
CA M-1 = CALCULATE ( [CA], DATEADD ( Calendrier[Date], -1, MONTH ) )
Écart M-1 = IF ( NOT ISBLANK ( [CA M-1] ), [CA] - [CA M-1] )Explication
DATEADDdécale chaque date visible d'un mois.- Sans le test
ISBLANK, janvier 2024 afficherait un écart égal au CA. - Source (Microsoft Learn) | Source (Microsoft Learn)
Question 2.4 | Moyenne mobile 3 mois
Énoncé
- Calculez la moyenne mobile sur 3 mois : CA des 3 derniers mois (mois en cours inclus) divisé par 3.
- Indice donné aux stagiaires :
DATESINPERIODà partir deMAX ( Calendrier[Date] ), sur -3 mois.
Résultat attendu
- Mars 2025 : 42 737,24.
- Janvier 2025 (inclut novembre et décembre 2024) : 40 788,55.
Réponse
Moyenne mobile 3 mois =
DIVIDE ( CALCULATE ( [CA], DATESINPERIOD ( Calendrier[Date], MAX ( Calendrier[Date] ), -3, MONTH ) ), 3 )Explication
- La période glissante traverse les années : janvier reprend novembre et décembre précédents.
- Sur la ligne d'une année, la valeur correspond aux 3 derniers mois de l'année.
- Source (Microsoft Learn) | Source (SQLBI)
Question 2.5 | 12 mois glissants
Énoncé
- Calculez le CA des 12 derniers mois glissants à la fin de chaque mois.
- Indice donné aux stagiaires : même principe que la moyenne mobile, avec -12 mois.
Résultat attendu
- Juin 2025 : 536 061,21 (juillet 2024 à juin 2025).
- Ligne 2025 : 545 570,56.
Réponse
CA 12 mois glissants =
CALCULATE ( [CA], DATESINPERIOD ( Calendrier[Date], MAX ( Calendrier[Date] ), -12, MONTH ) )Explication
- Cet indicateur lisse la saisonnalité : chaque point couvre une année complète.
- Avant décembre 2024, la période est incomplète (pas de données 2023).
- Source (Microsoft Learn)
Question 2.6 | Meilleur mois
Énoncé
- Pour chaque année, affichez le nom du meilleur mois et son CA.
- Indice donné aux stagiaires :
MAXXsurVALUES( Calendrier[Mois] ) pour le montant ;TOPN ( 1, ... )pour retrouver le nom.
Résultat attendu
- 2025 : juillet, 81 752,10.
- 2024 : juin, 59 290,67.
Réponse
CA du meilleur mois = MAXX ( VALUES ( Calendrier[Mois] ), [CA] )
Meilleur mois = MAXX ( TOPN ( 1, VALUES ( Calendrier[Mois] ), [CA] ), Calendrier[Mois] )Explication
MAXXévalue [CA] pour chaque mois visible (transition de contexte) et garde le plus grand.TOPN ( 1, ... )renvoie la ligne du meilleur mois ;MAXXen extrait le nom.- Source (Microsoft Learn) | Source (Microsoft Learn)
Thème 3 | Parts et contributions
- Fichiers :
Exo3_Parts_EnonceetExo3_Parts_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )
Question 3.1 | Part du total général
Énoncé
- Calculez la part de chaque produit dans le CA total, tous produits confondus, même si un segment de catégorie est utilisé.
- Indice donné aux stagiaires : le dénominateur ignore les filtres sur la table Produit :
ALL ( Produit ).
Résultat attendu
- Vélo route rouge : 6,78 %.
- Ligne Vélos : 68,06 %.
Réponse
% du total général = DIVIDE ( [CA], CALCULATE ( [CA], ALL ( Produit ) ) )Explication
ALL ( Produit )supprime tous les filtres de la table Produit, y compris le segment Catégorie.- Le filtre Pays (autre table) est conservé : la part est calculée dans le pays choisi.
- Source (Microsoft Learn)
Question 3.2 | Part du total affiché
Énoncé
- Calculez la part dans le total affiché : le total doit toujours faire 100 %, même avec le segment Catégorie.
- Indice donné aux stagiaires :
ALLSELECTEDgarde les filtres des segments et retire ceux de la vignette.
Résultat attendu
- Sans segment : identique à la question 1 (Vélo route rouge : 6,78 %).
- Segment Catégorie = Vélos : Vélo route rouge 9,96 %.
Réponse
% du total affiché = DIVIDE ( [CA], CALCULATE ( [CA], ALLSELECTED ( Produit ) ) )Explication
ALLSELECTEDretire les filtres des lignes de la matrice mais respecte la sélection du segment.- Comparez avec ALL : choisissez Vélos dans le segment, seul
ALLSELECTEDrevient à 100 %. - Source (Microsoft Learn) | Source (SQLBI)
Question 3.3 | Part dans la catégorie
Énoncé
- Calculez la part de chaque produit dans sa catégorie.
- Indice donné aux stagiaires : le dénominateur garde seulement le filtre sur la catégorie :
ALLEXCEPT.
Résultat attendu
- Casque rouge : 8,45 % des Accessoires.
- Chaque ligne de catégorie : 100 %.
Réponse
% dans la catégorie =
DIVIDE ( [CA], CALCULATE ( [CA], ALLEXCEPT ( Produit, Produit[Categorie] ) ) )Explication
- ALLEXCEPT supprime les filtres de Produit, sauf celui sur Categorie.
- Variante robuste :
REMOVEFILTERS ( Produit ), VALUES ( Produit[Categorie] ). - Source (Microsoft Learn) | Source (SQLBI)
Question 3.4 | Contribution à la croissance
Énoncé
- Calculez l'écart de CA 2025 vs 2024, puis la contribution de chaque pays à l'écart total.
- Indice donné aux stagiaires : Écart = CA 2025 - CA 2024 (filtres sur Calendrier[Annee]). Contribution = écart du pays / écart de tous les pays.
Résultat attendu
- Écart total : 17 243,76.
- France : écart 22 745,07, contribution 131,90 %.
Réponse
Écart 2025 vs 2024 =
CALCULATE ( [CA], Calendrier[Annee] = 2025 ) - CALCULATE ( [CA], Calendrier[Annee] = 2024 )
Contribution à la croissance =
DIVIDE ( [Écart 2025 vs 2024], CALCULATE ( [Écart 2025 vs 2024], ALL ( Geographie ) ) )Explication
- Une contribution peut dépasser 100 % ou être négative : certains pays reculent pendant que d'autres progressent.
- La somme des contributions vaut toujours 100 %.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 3.5 | Pareto 80/20
Énoncé
- Calculez le CA cumulé des produits triés du plus vendu au moins vendu, son pourcentage, puis une classe : A jusqu'à 80 %, B au-delà.
- Indice donné aux stagiaires : pour un produit, additionnez le CA de tous les produits qui ont un CA supérieur ou égal (
ADDCOLUMNS,FILTER,SUMX).
Résultat attendu
- Produit n° 1 (Vélo ville jaune) : 20,42 % cumulé.
- 8 produits sur 24 sont en classe A.
Réponse
CA cumulé Pareto =
VAR ca = [CA]
RETURN
SUMX ( FILTER ( ADDCOLUMNS ( ALLSELECTED ( Produit[Produit] ), "@CA", [CA] ), [@CA] >= ca ), [@CA] )
% cumulé Pareto = DIVIDE ( [CA cumulé Pareto], CALCULATE ( [CA], ALLSELECTED ( Produit ) ) )
Classe Pareto =
IF ( HASONEVALUE ( Produit[Produit] ), IF ( [% cumulé Pareto] <= 0.8, "A", "B" ) )Explication
ADDCOLUMNScalcule le CA de chaque produit ;FILTERgarde ceux qui font au moins autant que le produit en cours.- Triez la matrice par CA décroissant pour lire la courbe de Pareto.
- Source (Microsoft Learn) | Source (SQLBI)
Thème 4 | Classements et Top N
- Fichiers :
Exo4_Classements_EnonceetExo4_Classements_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )
- Table fournie : ParamTopN (GENERATESERIES de 1 à 10, paramètre du Top N).
- Table fournie : ProduitsAutres (liste des produits plus une ligne « Autres », sans relation).
Question 4.1 | Rang des produits
Énoncé
- Calculez le rang de chaque produit selon son CA (1 = meilleur). Le total ne doit pas afficher de rang.
- Indice donné aux stagiaires :
RANKXsurALL( Produit[Produit] ) ;HASONEVALUEpour masquer le total.
Résultat attendu
- Rang 1 : Vélo ville jaune ; rang 2 : Vélo ville bleu.
- Casque rouge : rang 24.
Réponse
Rang produit =
IF ( HASONEVALUE ( Produit[Produit] ), RANKX ( ALL ( Produit[Produit] ), [CA] ) )Explication
RANKXévalue [CA] pour chaque produit de la tableALL, puis situe le produit en cours.- Sans
ALL, chaque ligne ne verrait qu'un produit et aurait le rang 1. - Source (Microsoft Learn) | Source (SQLBI)
Question 4.2 | Rang dans la catégorie
Énoncé
- Calculez le rang de chaque produit à l'intérieur de sa catégorie.
- Indice donné aux stagiaires : la table de
RANKXdoit contenir les produits de la même catégorie :CALCULATETABLEavecALLEXCEPT.
Résultat attendu
- Accessoires : 1er Sacoche, 2e Casque blanc.
Réponse
Rang dans la catégorie =
IF ( HASONEVALUE ( Produit[Produit] ), RANKX ( CALCULATETABLE ( VALUES ( Produit[Produit] ), ALLEXCEPT ( Produit, Produit[Categorie] ) ), [CA] ) )Explication
CALCULATETABLErenvoie les produits de la catégorie en cours, quel que soit le produit de la ligne.- Le rang repart à 1 dans chaque catégorie.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 4.3 | CA des 3 meilleurs produits
Énoncé
- Pour chaque pays, calculez le CA réalisé par ses 3 meilleurs produits.
- Indice donné aux stagiaires :
TOPN ( 3, VALUES ( Produit[Produit] ), [CA] )renvoie une table : itérez dessus avecSUMX.
Résultat attendu
- France : 145 881,07.
- Total : 506 905,80.
Réponse
CA top 3 produits = SUMX ( TOPN ( 3, VALUES ( Produit[Produit] ), [CA] ), [CA] )Explication
- Les 3 meilleurs produits sont recalculés dans chaque pays.
- Le total n'est pas la somme des lignes : c'est le top 3 tous pays confondus.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 4.4 | Top N dynamique
Énoncé
- La table ParamTopN (1 à 10) est fournie. Affichez le CA seulement pour les N meilleurs produits, N étant choisi dans le segment (5 par défaut).
- Indice donné aux stagiaires :
SELECTEDVALUE ( ParamTopN[Value], 5 )pour lire N ;RANKXsurALLSELECTEDpour le rang.
Résultat attendu
- N = 5 : Vélo ville jaune, Vélo ville bleu, Vélo route noir, VTT noir, Vélo route rouge.
- Les autres produits disparaissent de la matrice (valeur vide).
Réponse
N choisi = SELECTEDVALUE ( ParamTopN[Value], 5 )
CA Top N =
IF ( HASONEVALUE ( Produit[Produit] ), IF ( RANKX ( ALLSELECTED ( Produit[Produit] ), [CA] ) <= [N choisi], [CA] ) )Explication
- Une mesure vide fait disparaître la ligne : seule la mesure CA Top N doit être dans le visuel.
- ParamTopN est un paramètre de simulation (Modélisation, Nouveau paramètre).
- Source (Microsoft Learn) | Source (SQLBI)
Question 4.5 | Meilleur produit par pays
Énoncé
- Affichez le nom du meilleur produit de chaque pays.
- Indice donné aux stagiaires :
TOPN ( 1, ... )renvoie une ligne ; MAXX permet d'en lire le nom.
Résultat attendu
- France : Vélo ville jaune.
- Total : Vélo ville jaune.
Réponse
Meilleur produit = MAXX ( TOPN ( 1, VALUES ( Produit[Produit] ), [CA] ), Produit[Produit] )Explication
- En cas d'égalité,
TOPNrenvoie plusieurs lignes :MAXXgarde alors le dernier nom par ordre alphabétique. - Même technique pour le meilleur client, le meilleur mois...
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 4.6 | Top 5 et Autres
Énoncé
- La table ProduitsAutres (produits + une ligne « Autres ») est fournie. Affichez le CA des 5 meilleurs produits, et le reste regroupé sur la ligne Autres.
- Indice donné aux stagiaires : lisez la ligne avec
SELECTEDVALUE; calculez le top 5 avecTOPN;EXCEPTdonne les produits hors top 5.
Résultat attendu
- Autres : 408 795,45.
- Total : 1 073 897,36.
Réponse
CA Top 5 et Autres =
VAR p = SELECTEDVALUE ( ProduitsAutres[Produit] )
VAR top5 = TOPN ( 5, ALL ( Produit[Produit] ), [CA] )
RETURN
SWITCH ( TRUE (), NOT HASONEVALUE ( ProduitsAutres[Produit] ), [CA], p = "Autres", CALCULATE ( [CA], EXCEPT ( ALL ( Produit[Produit] ), top5 ) ), p IN top5, CALCULATE ( [CA], Produit[Produit] = p ) )Explication
- La table ProduitsAutres n'est reliée à rien : la mesure traduit chaque ligne en filtre sur Produit.
- Les produits hors top 5 renvoient vide et disparaissent ; triez la matrice par la mesure.
- Source (SQLBI) | Source (Microsoft Learn)
Thème 5 | Analyse clients
- Fichiers :
Exo5_Clients_EnonceetExo5_Clients_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )Nb commandes = DISTINCTCOUNT ( Ventes[NumCommande] )
Question 5.1 | Clients actifs
Énoncé
- Comptez les clients actifs : clients ayant passé au moins une commande sur la période.
- Indice donné aux stagiaires :
DISTINCTCOUNTsur Ventes[ClientID].
Résultat attendu
- 2025 : 111 clients ; mars 2025 : 29.
- Total : 130.
Réponse
Clients actifs = DISTINCTCOUNT ( Ventes[ClientID] )Explication
- Le total n'est pas la somme des mois : un même client peut acheter plusieurs mois.
- La table Client contient aussi des clients sans achat sur la période.
- Source (Microsoft Learn)
Question 5.2 | Nouveaux clients
Énoncé
- Comptez les nouveaux clients : clients dont la toute première commande a lieu dans la période affichée.
- Indice donné aux stagiaires : pour chaque client actif (
VALUES), calculez sa première date d'achat en ignorant le calendrier (ALL), puis comparez au début de la période.
Résultat attendu
- 2025 : 23 ; mars 2025 : 1.
- 2024 : tous les clients actifs sont nouveaux (pas de données avant).
Réponse
Nouveaux clients =
VAR debut = MIN ( Calendrier[Date] )
RETURN
COUNTROWS ( FILTER ( VALUES ( Ventes[ClientID] ), CALCULATE ( MIN ( Ventes[Date] ), ALL ( Calendrier ) ) >= debut ) )Explication
CALCULATEdéclenche la transition de contexte : le client de la ligne devient un filtre.ALL( Calendrier ) retire le filtre de période pour retrouver la première commande de toute l'histoire.- Source (SQLBI) | Source (Microsoft Learn)
Question 5.3 | Clients perdus
Énoncé
- Comptez les clients perdus : clients ayant acheté l'année précédente mais aucune fois dans la période.
- Indice donné aux stagiaires : liste des clients de N-1 (
CALCULATETABLE+DATEADD), moins la liste des clients actuels (EXCEPT).
Résultat attendu
- 2025 : 19 clients perdus.
- 2024 : vide (pas de données 2023).
Réponse
Clients perdus =
VAR avant = CALCULATETABLE ( VALUES ( Ventes[ClientID] ), DATEADD ( Calendrier[Date], -1, YEAR ) )
RETURN
COUNTROWS ( EXCEPT ( avant, VALUES ( Ventes[ClientID] ) ) )Explication
EXCEPTrenvoie les lignes de la 1re table absentes de la 2nde.- Au niveau mois, la définition devient « client du même mois l'an dernier » : préférez l'année.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 5.4 | Fréquence d'achat
Énoncé
- Calculez la fréquence d'achat : nombre moyen de commandes par client actif.
- Indice donné aux stagiaires : Nb commandes divisé par le nombre de clients distincts.
Résultat attendu
- Total : 6,03.
- Entreprise : 11,42.
Réponse
Fréquence d'achat = DIVIDE ( [Nb commandes], DISTINCTCOUNT ( Ventes[ClientID] ) )Explication
- Les clients Entreprise commandent plus souvent que les particuliers.
- Filtrez une année : la fréquence porte alors sur cette seule année.
- Source (Microsoft Learn)
Question 5.5 | Dernière commande
Énoncé
- Affichez la date de la dernière commande de chaque client, et le nombre de jours écoulés jusqu'au 31/12/2025.
- Indice donné aux stagiaires : MAX ( Ventes[Date] ) ; DATEDIFF en jours avec DATE ( 2025, 12, 31 ).
Résultat attendu
- Alice Bernard : 24/10/2024, soit 433 jours.
Réponse
Dernière commande = MAX ( Ventes[Date] )
Jours depuis la dernière commande =
IF ( NOT ISBLANK ( [Dernière commande] ), DATEDIFF ( [Dernière commande], DATE ( 2025, 12, 31 ), DAY ) )Explication
- Une date fixe rend l'exercice reproductible ; en production, utilisez
TODAY (). - Triez par nombre de jours décroissant pour repérer les clients à relancer.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 5.6 | Segmentation des clients
Énoncé
- Classez chaque client : Or à partir de 12 000 de CA, Argent à partir de 5 000, Bronze en dessous. Comptez aussi les clients Or.
- Indice donné aux stagiaires :
SWITCH ( TRUE (), ... )pour la classe ;FILTERsurVALUES ( Ventes[ClientID] )pour compter.
Résultat attendu
- 30 clients Or, 55 Argent, 45 Bronze (toutes années).
Réponse
Classe client =
VAR ca = [CA]
RETURN
IF ( HASONEVALUE ( Client[Client] ), SWITCH ( TRUE (), ISBLANK ( ca ), BLANK (), ca >= 12000, "Or", ca >= 5000, "Argent", "Bronze" ) )
Nb clients Or = COUNTROWS ( FILTER ( VALUES ( Ventes[ClientID] ), [CA] >= 12000 ) )Explication
SWITCH ( TRUE (), ... )teste les conditions dans l'ordre : la première vraie l'emporte.- Choisissez une année : la classe change, car elle dépend du CA de la période.
- Source (Microsoft Learn) | Source (SQLBI)
Thème 6 | Objectifs et budget
- Fichiers :
Exo6_Objectifs_EnonceetExo6_Objectifs_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )
Question 6.1 | Objectif par TREATAS
Énoncé
- La table Objectifs (Pays, Date du 1er du mois, Objectif) n'est reliée à rien. Créez la mesure Objectif période qui suit les filtres Pays et dates.
- Indice donné aux stagiaires : deux
TREATASdansCALCULATE: les pays visibles vers Objectifs[Pays], les dates visibles vers Objectifs[Date].
Résultat attendu
- France 2025 : 152 500,00.
- Total 2024 et 2025 : 1 138 700,00.
Réponse
Objectif période =
CALCULATE ( SUM ( Objectifs[Objectif] ), TREATAS ( VALUES ( Geographie[Pays] ), Objectifs[Pays] ), TREATAS ( VALUES ( Calendrier[Date] ), Objectifs[Date] ) )Explication
TREATASapplique les valeurs d'une colonne comme filtre sur une autre, comme une relation virtuelle.- Les objectifs sont datés du 1er du mois : un mois ou une année visible contient bien cette date.
- Source (Microsoft Learn) | Source (SQLBI)
Question 6.2 | Écart et taux d'atteinte
Énoncé
- Calculez l'écart à l'objectif (CA - objectif) et le taux d'atteinte (CA / objectif).
- Indice donné aux stagiaires : réutilisez la mesure Objectif période de la question 1.
Résultat attendu
- France 2025 : écart -3 296,32, taux 97,84 %.
Réponse
Écart à l'objectif = [CA] - [Objectif période]
Taux d'atteinte = DIVIDE ( [CA], [Objectif période] )Explication
- Un écart négatif signale un retard sur l'objectif.
- Le taux d'atteinte se lit mieux avec une mise en forme conditionnelle (question 4).
- Source (Microsoft Learn)
Question 6.3 | Objectif cumulé
Énoncé
- Calculez le CA cumulé et l'objectif cumulé depuis le début de l'année.
- Indice donné aux stagiaires :
TOTALYTDpour le CA ;CALCULATE ( [Objectif période], DATESYTD ( ... ) )pour l'objectif.
Résultat attendu
- Juin 2025, tous pays : CA cumulé 282 555,63, objectif cumulé 315 600,00.
Réponse
CA cumulé = TOTALYTD ( [CA], Calendrier[Date] )
Objectif cumulé = CALCULATE ( [Objectif période], DATESYTD ( Calendrier[Date] ) )Explication
DATESYTDmodifie les dates visibles ;TREATASles transmet ensuite à la table Objectifs.- C'est l'intérêt de réutiliser une mesure : la logique
TREATASn'est écrite qu'une fois. - Source (Microsoft Learn) | Source (Microsoft Learn)
Question 6.4 | Statut avec icône
Énoncé
- Affichez un statut : « Atteint » à partir de 100 %, « Proche » à partir de 95 %, « En retard » sinon, précédé d'un rond (
UNICHAR ( 9679 )), et une mesure Couleur statut (vert, orange, rouge) pour colorer le texte. - Indice donné aux stagiaires :
SWITCH ( TRUE (), ... )sur le taux d'atteinte ; la couleur s'applique par Mise en forme conditionnelle, Couleur de police, Valeur de champ.
Résultat attendu
- 2025 : Allemagne Atteint, Belgique Atteint, Canada En retard, États-Unis Proche, France Proche, Royaume-Uni En retard.
Réponse
Statut objectif =
VAR t = [Taux d'atteinte]
RETURN
SWITCH ( TRUE (), ISBLANK ( t ), BLANK (), t >= 1, UNICHAR ( 9679 ) & " Atteint", t >= 0.95, UNICHAR ( 9679 ) & " Proche", UNICHAR ( 9679 ) & " En retard" )
Couleur statut =
VAR t = [Taux d'atteinte]
RETURN
SWITCH ( TRUE (), ISBLANK ( t ), BLANK (), t >= 1, "#1E8E3E", t >= 0.95, "#F29900", "#D93025" )Explication
- La couleur de police de Statut objectif est pilotée par la mesure Couleur statut (fx, Valeur de champ).
- Les mesures de la question 2 sont reprises ici pour que la page fonctionne seule.
- Source (Microsoft Learn) | Source (Microsoft Learn, mise en forme)
Thème 7 | Délais et logistique
- Fichiers :
Exo7_Delais_EnonceetExo7_Delais_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )Nb commandes = DISTINCTCOUNT ( Ventes[NumCommande] )
Question 7.1 | Délai moyen de livraison
Énoncé
- Calculez le délai moyen de livraison en jours (date de livraison - date de commande), ligne par ligne.
- Indice donné aux stagiaires :
AVERAGEXsur Ventes avecDATEDIFF ( ..., DAY ).
Résultat attendu
- Total : 4,9 jours.
- France : 5,1 jours.
Réponse
Délai moyen (jours) =
AVERAGEX ( Ventes, DATEDIFF ( Ventes[Date], Ventes[DateLivraison], DAY ) )Explication
AVERAGEXcalcule le délai de chaque ligne, puis en fait la moyenne.- Une colonne calculée « Délai » ferait aussi l'affaire, au prix d'un peu de mémoire.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 7.2 | Commandes livrées en 5 jours
Énoncé
- Calculez le pourcentage de commandes livrées en 5 jours ou moins. Raisonnez par commande, pas par ligne.
- Indice donné aux stagiaires :
FILTERsurVALUES ( Ventes[NumCommande] ); pour chaque commande,CALCULATE ( DATEDIFF ( MAX (...), MAX (...), DAY ) ).
Résultat attendu
- Total : 64,67 %.
- France : 66,50 %.
Réponse
% livrées en 5 jours =
DIVIDE ( COUNTROWS ( FILTER ( VALUES ( Ventes[NumCommande] ), CALCULATE ( DATEDIFF ( MAX ( Ventes[Date] ), MAX ( Ventes[DateLivraison] ), DAY ) ) <= 5 ) ), [Nb commandes] )Explication
CALCULATEdéclenche la transition de contexte :MAXlit les dates de la commande en cours.- Compter les lignes donnerait plus de poids aux grosses commandes.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 7.3 | CA par date de livraison
Énoncé
- Le calendrier est relié à Ventes[Date] (active) et à Ventes[DateLivraison] (inactive). Calculez le CA par date de livraison.
- Indice donné aux stagiaires :
USERELATIONSHIPdansCALCULATEactive la relation inactive.
Résultat attendu
- Janvier 2025 : par commande 46 001,82, par livraison 45 442,90.
Réponse
CA par date de livraison =
CALCULATE ( [CA], USERELATIONSHIP ( Ventes[DateLivraison], Calendrier[Date] ) )Explication
- Les commandes de fin de mois sont livrées le mois suivant : le CA glisse d'un mois à l'autre.
- Le total reste identique : seules les dates changent.
- Source (Microsoft Learn)
Question 7.4 | Commandes en retard
Énoncé
- Comptez les commandes livrées en plus de 7 jours.
- Indice donné aux stagiaires : même structure que la question 2, avec la condition > 7 et
COUNTROWS.
Résultat attendu
- Total : 120 commandes.
- France : 36 commandes.
Réponse
Commandes en retard =
COUNTROWS ( FILTER ( VALUES ( Ventes[NumCommande] ), CALCULATE ( DATEDIFF ( MAX ( Ventes[Date] ), MAX ( Ventes[DateLivraison] ), DAY ) ) > 7 ) )Explication
COUNTROWSd'une table vide renvoie vide : ajoutez + 0 pour afficher 0.- Réutilisable pour tout seuil : délai, montant, quantité.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Thème 8 | Textes et titres dynamiques
- Fichiers :
Exo8_Textes_EnonceetExo8_Textes_Corrige. - Mesures fournies :
CA = SUM ( Ventes[Montant] )
Question 8.1 | Titre dynamique
Énoncé
- Créez un titre du type « CA France | 2025 », qui reprend le pays et l'année sélectionnés, ou « tous pays » et « 2024 et 2025 » sans sélection. Liez-le au titre du visuel (fx).
- Indice donné aux stagiaires :
SELECTEDVALUEpour le pays ;HASONEVALUEetFORMATpour l'année (numérique).
Résultat attendu
- Sans sélection : « CA tous pays | 2024 et 2025 ».
- France et 2025 : « CA France | 2025 ».
Réponse
Titre du rapport =
"CA " & SELECTEDVALUE ( Geographie[Pays], "tous pays" ) & " | " & IF ( HASONEVALUE ( Calendrier[Annee] ), FORMAT ( VALUES ( Calendrier[Annee] ), "0" ), "2024 et 2025" )Explication
- Titre du visuel : Mise en forme, Titre, bouton fx, Valeur de champ, mesure Titre du rapport.
FORMATconvertit l'année en texte et évite un mélange de types.- Source (Microsoft Learn) | Source (Microsoft Learn, titres)
Question 8.2 | Liste des catégories
Énoncé
- Affichez la liste des catégories visibles, séparées par des virgules et triées par ordre alphabétique.
- Indice donné aux stagiaires :
CONCATENATEXsurVALUES ( Produit[Categorie] ).
Résultat attendu
- Sans sélection : « Accessoires, Composants, Vélos, Vêtements ».
- Ligne Vélos de la matrice : « Vélos ».
Réponse
Catégories sélectionnées =
CONCATENATEX ( VALUES ( Produit[Categorie] ), Produit[Categorie], ", ", Produit[Categorie], ASC )Explication
- Les 4e et 5e arguments de
CONCATENATEXfixent l'ordre de tri. - Au-delà de quelques valeurs, affichez plutôt leur nombre (
COUNTROWS). - Source (Microsoft Learn)
Question 8.3 | Libellé du meilleur produit
Énoncé
- Créez un libellé du type « Meilleur produit : VTT noir (12 345 €) ».
- Indice donné aux stagiaires : trouvez le nom avec TOPN et MAXX dans une variable, puis
FORMATpour le montant.
Résultat attendu
- Total : meilleur produit Vélo ville jaune (219 290 €).
- France : Vélo ville jaune (64 583 €).
Réponse
Libellé meilleur produit =
VAR p = MAXX ( TOPN ( 1, VALUES ( Produit[Produit] ), [CA] ), Produit[Produit] )
RETURN
"Meilleur produit : " & p & " (" & FORMAT ( CALCULATE ( [CA], Produit[Produit] = p ), "#,##0 €" ) & ")"Explication
- La variable p évite de recalculer le meilleur produit deux fois.
- FORMAT renvoie du texte : à réserver aux libellés, jamais aux valeurs à additionner.
- Source (Microsoft Learn) | Source (Microsoft Learn)
Question 8.4 | Message sans donnée
Énoncé
- Affichez le CA mis en forme, ou le message « Aucune vente pour cette sélection » quand il n'y a pas de vente.
- Indice donné aux stagiaires :
IF ( ISBLANK ( [CA] ), ... ); utilisez la mesure dans une carte.
Résultat attendu
- Pays = Allemagne, année = 2025, ligne Casquette : « Aucune vente pour cette sélection ».
Réponse
CA ou message =
IF ( ISBLANK ( [CA] ), "Aucune vente pour cette sélection", FORMAT ( [CA], "#,##0.00 €" ) )Explication
- Une carte vide affiche « (Vide) » : le message est plus clair pour l'utilisateur.
- Dans une matrice, la mesure affiche le message sur chaque produit sans vente, et fait réapparaître ces lignes.
- Source (Microsoft Learn) | Source (Microsoft Learn)