DAX, le langage qui libère la puissance de Power Pivot
DAX (Data Analysis Expressions) est le langage de formule utilisé par Power Pivot, Power BI et Analysis Services. Pour un analyste habitué à Excel, DAX paraît d’abord étrange : les formules ne pointent pas vers des cellules mais vers des colonnes et des tables entières, et elles s’exécutent dans un contexte de filtre implicite.
Maîtriser DAX, c’est pouvoir répondre en 10 secondes à des questions comme : quel est le CA cumulé de chaque boutique depuis le début de l’année, comment se compare-t-il à la même période l’an dernier, et quelle boutique a contribué le plus à la croissance globale ?
Les 3 concepts fondamentaux
Colonne calculée : une nouvelle colonne dans une table, calculée ligne par ligne. Exemple : Marge = Ventes[PrixVente] - Ventes[CoutAchat]. Stockée en mémoire, consomme de la RAM.
Mesure : un calcul dynamique qui dépend du contexte du tableau croisé. Exemple : CA Total := SUM(Ventes[Montant]). Calculée à la volée, performante.
Contexte de filtre : la combinaison de filtres implicite imposée par les lignes, colonnes et segments d’un tableau croisé. Comprendre le contexte est la clé de DAX.
Mesure : CA cumulé par boutique depuis le 1er janvier
Scénario : 3 boutiques Dakaroises (Plateau, Almadies, Pikine), données quotidiennes, on veut voir la courbe cumulative.
CA YTD :=
TOTALYTD(
SUM(Ventes[Montant]);
Calendrier[Date]
)
Placée dans un tableau croisé avec Mois en colonnes et Boutique en lignes, cette mesure affiche le cumul depuis janvier. À chaque mois, le total augmente jusqu’au reset au 1er janvier suivant.
Comparaison année précédente
CA YTD N-1 :=
CALCULATE(
[CA YTD];
SAMEPERIODLASTYEAR(Calendrier[Date])
)
Croissance YTD := DIVIDE([CA YTD] - [CA YTD N-1]; [CA YTD N-1])
Trois mesures, vision complète : valeur actuelle, référence historique, variation.
Classement des boutiques par contribution
Rang Boutique :=
RANKX(
ALL(Boutiques[Nom]);
[CA Total];
;
DESC
)
Cette mesure classe les boutiques par CA décroissant, utile dans un tableau de bord.
Top 3 produits par boutique
TopProduits :=
CONCATENATEX(
TOPN(3; VALUES(Produits[Nom]); [CA Total]);
Produits[Nom];
", "
)
Renvoie par exemple « Boubou, Tablier, Sac » pour chaque boutique.
Contexte : CALCULATE, le couteau suisse DAX
CALCULATE modifie le contexte de filtre. Exemples essentiels :
CA Almadies := CALCULATE([CA Total]; Boutiques[Nom]="Almadies")
CA Weekend := CALCULATE([CA Total]; Calendrier[JourSemaine] IN {"Samedi";"Dimanche"})
CA Hors Tabaski := CALCULATE([CA Total]; NOT(Calendrier[Periode]="Tabaski"))
Time intelligence avancée
DAX propose 35+ fonctions temporelles. Les 5 plus utiles :
- TOTALYTD, TOTALQTD, TOTALMTD : cumuls année/trimestre/mois
- SAMEPERIODLASTYEAR : même période l’an passé
- DATEADD : décalage libre en jours, mois ou années
- PREVIOUSMONTH, PREVIOUSQUARTER : période précédente
- PARALLELPERIOD : période parallèle décalée
Pièges courants
Oublier la table calendrier marquée : les fonctions time intelligence ne fonctionnent pas sans table de dates continue marquée comme telle. Utiliser SUM sur des colonnes calculées coûteuses en recalcul. Chaîner trop de CALCULATE imbriqués : favorisez les variables VAR pour la lisibilité.
Conclusion
DAX est un investissement rentable : 20 heures d’apprentissage vous transforment en analyste capable de produire des tableaux de bord de niveau consultant. Complément naturel à Power Pivot, il ouvre aussi la porte à Power BI.
Voir aussi
- Power Query : transformer et nettoyer ses données dans Excel
- Excel : automatiser ses rapports avec Power Query
- Power Query : transformer les données dans Excel
Étape 1 : Comprendre quand DAX devient indispensable
Une enseigne de cinq boutiques à Dakar, Saint-Louis, Thiès, Mbour et Touba, qui veut suivre le chiffre d’affaires cumulé jour par jour par point de vente, atteint vite les limites des formules classiques Excel. SOMME.SI fonctionne mais devient illisible et lent au-delà de 100 000 lignes. DAX (Data Analysis Expressions), disponible dans Power Pivot intégré à Excel, gère sans broncher des millions de lignes et exprime la logique métier en quelques lignes lisibles.
DAX repose sur deux concepts : les contextes de ligne (chaque ligne d’une table) et les contextes de filtre (les filtres actifs propagés par les segments et les colonnes/lignes du tableau croisé). Maîtriser cette distinction est la clé pour écrire des mesures CA cumulé qui réagissent correctement aux filtres de boutique, de date et de catégorie produit.
Étape 2 : Préparer la table des ventes
Ouvrez Excel, importez votre fichier des ventes via Données > Obtenir des données > À partir d’un fichier > À partir d’un classeur Excel. La table doit contenir au minimum les colonnes Date_Vente, Boutique, Produit, Montant_FCFA. Cliquez sur Charger dans et cochez Ajouter ces données au modèle de données.
La sortie attendue : la table apparaît dans la fenêtre Power Pivot accessible via Power Pivot > Gérer. Sans cette étape, vous ne pourrez pas créer de mesures DAX. Le marqueur de succès : la barre d’état Power Pivot indique le nombre de lignes importées (par exemple 247 850 lignes pour douze mois d’historique des cinq boutiques).
Étape 3 : Créer une table calendrier dédiée
DAX exige une table de dates continue pour les calculs cumulés. Dans Power Pivot, allez dans Conception > Table de dates > Nouveau. Excel génère une table Calendar avec une ligne par jour entre la première et la dernière date des ventes. Sans cette table, les fonctions DATESYTD et TOTALYTD renverront des résultats erronés ou vides.
Reliez ensuite Calendar[Date] à Ventes[Date_Vente] via la vue diagramme : glissez le champ Date de Calendar vers Date_Vente de Ventes. La sortie attendue : une flèche relie les deux tables, signalant une relation un-à-plusieurs avec Calendar comme côté un.
Étape 4 : Écrire la mesure CA total par boutique
Dans Power Pivot, sélectionnez la table Ventes, puis dans la zone des mesures en bas, écrivez :
CA_Total := SUM(Ventes[Montant_FCFA])
Validez par Entrée. Cette mesure renvoie la somme des ventes filtrées par le contexte courant. Insérez ensuite un tableau croisé dynamique : Insertion > Tableau croisé dynamique > Utiliser le modèle de données. Glissez Boutique en lignes, CA_Total en valeurs. La sortie attendue : une ligne par boutique avec le CA total, par exemple Dakar 84 250 000 FCFA, Touba 67 800 000 FCFA.
Étape 5 : Calculer le CA cumulé depuis le début de l’année
Pour le CA cumulé Year-To-Date par boutique, écrivez la mesure suivante dans Power Pivot :
CA_YTD := TOTALYTD(SUM(Ventes[Montant_FCFA]); Calendar[Date])
La fonction TOTALYTD applique automatiquement un filtre du 1er janvier de l’année courante à la date du contexte. Glissez Calendar[Date] en colonnes du tableau croisé et Boutique en lignes. La sortie attendue : pour chaque boutique, le CA s’accumule jour après jour et redémarre à zéro le 1er janvier suivant.
Étape 6 : Maîtriser CALCULATE et FILTER pour un cumul personnalisé
Si la période de cumul ne suit pas l’année calendaire (par exemple un exercice fiscal du 1er juillet au 30 juin), TOTALYTD ne suffit plus. Utilisez CALCULATE et FILTER :
CA_Cumule_Exercice :=
CALCULATE(
SUM(Ventes[Montant_FCFA]);
FILTER(
ALL(Calendar);
Calendar[Date] <= MAX(Calendar[Date])
&& Calendar[Date] >= DATE(YEAR(MAX(Calendar[Date]))-1; 7; 1)
)
)
Cette formule cumule depuis le 1er juillet de l’année précédente jusqu’à la date courante du contexte. ALL(Calendar) supprime le filtre de date pour permettre à FILTER de redéfinir la plage. La sortie attendue : un cumul exercice fiscal qui ne se réinitialise qu’au 1er juillet de chaque année.
Étape 7 : Comparer chaque boutique à la moyenne du réseau
Pour analyser la performance relative de chaque boutique, ajoutez une mesure qui isole le CA d’une boutique tout en calculant la moyenne du réseau. Utilisez SUMX et VALUES :
CA_Moyen_Reseau :=
AVERAGEX(
VALUES(Ventes[Boutique]);
CALCULATE(SUM(Ventes[Montant_FCFA]))
)
Glissez cette mesure à côté de CA_Total. La sortie attendue : pour chaque ligne boutique, vous voyez son propre CA et la moyenne réseau dans la même cellule contextuelle. Touba à 67 millions FCFA s’affiche en regard d’une moyenne réseau de 64 millions, soit légèrement supérieure à la moyenne.
Étape 8 : Classer les boutiques avec RANKX
Pour produire un classement automatique des boutiques par CA, utilisez RANKX :
Rang_Boutique :=
RANKX(
ALL(Ventes[Boutique]);
[CA_Total];
;
DESC;
DENSE
)
Le quatrième paramètre DESC classe du plus grand au plus petit. DENSE évite les sauts en cas d’ex-aequo. La sortie attendue : Dakar reçoit le rang 1, Touba le rang 2, etc. Cette mesure est précieuse pour un comité de direction qui veut visualiser instantanément le top et le bottom du réseau retail.
Étape 9 : Calculer la croissance par rapport à l’année précédente
Pour comparer le CA cumulé de cette année avec celui de l’année dernière sur la même période, créez une mesure utilisant SAMEPERIODLASTYEAR :
CA_YTD_AN :=
CALCULATE(
[CA_YTD];
SAMEPERIODLASTYEAR(Calendar[Date])
)
Puis la croissance en pourcentage :
Croissance_YTD :=
DIVIDE(
[CA_YTD] - [CA_YTD_AN];
[CA_YTD_AN]
)
DIVIDE est préférable à l’opérateur / car il renvoie un blanc si le dénominateur est zéro, évitant les #DIV/0! dans le tableau. La sortie attendue : pour Saint-Louis qui a réalisé 12 millions FCFA YTD cette année contre 10 millions l’an passé, la cellule affiche +20 %.
Étape 10 : Mettre en forme conditionnelle le tableau croisé
Sélectionnez la colonne Croissance_YTD du tableau croisé, puis Accueil > Mise en forme conditionnelle > Jeux d’icônes. Choisissez les flèches vertes/jaunes/rouges. Les croissances supérieures à 10 % apparaissent en flèche verte, entre 0 et 10 % en flèche jaune, négatives en rouge. Le directeur réseau identifie en trois secondes les boutiques en difficulté à Mbour ou à Thiès.
Pour creuser ce sujet sur la mise en forme, ajoutez une barre de données sur la colonne CA_YTD. Les barres proportionnelles permettent de comparer visuellement les volumes absolus, complétant utilement les pourcentages de croissance.
Étape 11 : Construire un dashboard Power Pivot interactif
Insérez plusieurs segments via Analyse de tableau croisé > Insérer un segment : un segment Boutique, un segment Année, un segment Catégorie produit. Connectez-les à plusieurs tableaux croisés et graphiques de la même feuille via Connexions de rapport.
La sortie attendue : un dashboard où le directeur clique sur une boutique et tous les visuels (CA YTD, croissance, top 10 produits, courbe mensuelle) se filtrent simultanément. C’est l’équivalent d’un Power BI embarqué dans Excel, parfait pour les PME ouest-africaines qui n’ont pas encore basculé sur les licences Power BI Pro.
Étape 12 : Optimiser les performances DAX
Sur 250 000 lignes, certaines mesures peuvent ralentir le rafraîchissement à plus de cinq secondes. Trois optimisations clés. Premièrement, utilisez DIVIDE au lieu des conditions IF sur les divisions. Deuxièmement, préférez SUMX avec VALUES à des doubles boucles imbriquées. Troisièmement, vérifiez que la table calendrier est bien marquée comme Table de dates via Power Pivot, ce qui permet à Excel d’optimiser les fonctions temporelles.
Si le rafraîchissement reste lent, désactivez les calculs automatiques via Power Pivot > Paramètres > Mode de calcul > Manuel, modifiez plusieurs mesures, puis rebasculez en automatique. Cette astuce évite que chaque modification déclenche un recalcul complet.
Étape 13 : Documenter chaque mesure DAX
Le langage DAX accepte les commentaires en ligne avec // et en bloc avec /* ... */. Annotez chaque mesure avec son objectif métier, ses dépendances et la date de création. Pour une équipe analytics répartie entre Dakar et Abidjan, cette discipline divise par trois le temps d’onboarding d’un nouveau contrôleur de gestion confronté au modèle.
Pour étoffer le tableau et brancher le modèle sur des sources temps réel, consultez nos guides Connecter une API REST avec Power Query et Suivi de trésorerie prévisionnelle 12 mois. La combinaison Power Query (collecte) + DAX (analyse) couvre tout le besoin business intelligence d’une PME retail multi-boutiques en zone OHADA.
Étape 14 : Industrialiser la diffusion mensuelle du dashboard
En fin de mois, exportez le dashboard en PDF via Fichier > Exporter > Créer PDF/XPS et envoyez-le par email aux directeurs de boutique. Pour automatiser, utilisez Power Automate avec un déclencheur planifié au 5 de chaque mois : ouverture du fichier, rafraîchissement, export PDF, envoi par email. Le directeur de la boutique de Touba reçoit son rapport personnalisé sans intervention manuelle, et la performance de chaque point de vente devient un sujet de comité hebdomadaire concret et chiffré.
Étape 15 : Auditer le modèle avant la mise en production
Avant de livrer le classeur, faites trois vérifications. Premièrement, contrôlez que la somme des CA YTD par boutique au 31 décembre égale exactement le total annuel des ventes. Deuxièmement, vérifiez sur deux ou trois lignes que la croissance YTD recalculée à la main correspond au résultat DAX. Troisièmement, testez le dashboard avec un filtre extrême (une seule boutique, un seul mois) et vérifiez qu’aucune cellule n’affiche d’erreur. Ces contrôles, hérités des cabinets d’audit de Plateau et d’Almadies, garantissent un livrable fiable pour la direction générale.