TL;DR : Dans cet article, nous allons explorer en profondeur le langage DAX (Data Analysis Expressions) utilisé dans Power BI. DAX est un ensemble de fonctions, d’opérateurs et de constantes qui peuvent être combinés pour créer des formules et des expressions dans Power BI, Analysis Services et Power Pivot dans les modèles de données Excel.
Ce guide, pensé comme une véritable tutoriel complet et pratique, s’adresse aux débutants mais aussi aux utilisateurs confirmés qui souhaitent renforcer leurs compétences. Avec des explications claires, des exemples pratiques et des astuces avancées, il vous accompagnera pas à pas pour comprendre et maîtriser DAX.
Introduction à DAX dans Power BI
Le langage DAX (Data Analysis Expressions) est au cœur de Power BI, Power Pivot et Analysis Services. Il s’agit d’un langage de formules spécialement conçu pour la modélisation de données et la création de calculs dynamiques. On pourrait le comparer aux formules Excel, mais avec une différence fondamentale : là où Excel se limite généralement à des calculs cellule par cellule, DAX travaille avec des modèles relationnels complets. Autrement dit, il permet d’exploiter les relations entre plusieurs tables et d’effectuer des analyses qui s’adaptent automatiquement aux filtres appliqués dans vos rapports.
Pourquoi DAX est-il si important ?
Dans un contexte professionnel, les bases de données sont rarement simples. Vous pouvez avoir des millions de lignes de ventes, des tables clients, des tables produits et des dimensions temporelles. Comment répondre rapidement à des questions comme :
Quel est le chiffre d’affaires réalisé dans chaque région ce mois-ci ?
Quelle est la croissance des ventes par rapport à l’année dernière ?
Quels sont les produits qui contribuent le plus à mon revenu global ?
Avec DAX, vous n’avez pas besoin de recréer ou de filtrer vos données manuellement : les formules se connectent directement à votre modèle et s’adaptent au contexte choisi (par date, produit, région, etc.). Cette flexibilité est ce qui fait la puissance de DAX.
Les avantages clés de DAX
Automatisation des calculs complexes : plutôt que de créer des dizaines de colonnes ou de requêtes manuelles, une seule mesure DAX peut s’adapter à différents filtres et fournir des résultats dynamiques.
Création d’indicateurs métiers (KPI) : marge brute, taux de conversion, croissance annuelle… autant d’indicateurs que vous pouvez calculer et suivre directement dans vos tableaux de bord.
Analyses temporelles simplifiées : grâce aux fonctions dites de Time Intelligence, il devient facile de comparer une période donnée à une autre (mois précédent, même mois de l’an dernier, cumul depuis le début de l’année).
Modèles dynamiques et interactifs : une formule DAX ne donne pas un résultat fixe, elle s’adapte en temps réel aux filtres appliqués dans vos visuels ou segments (par produit, par région, par période, etc.).
En résumé, DAX est l’outil qui transforme Power BI d’un simple outil de visualisation en une véritable plateforme d’analyse décisionnelle avancée.
Comprendre les concepts fondamentaux de DAX
Avant d’écrire vos premières formules, il est indispensable de bien comprendre comment DAX interprète vos données.
Trois notions constituent le cœur du langage : le contexte de ligne, le contexte de filtre et le contexte de calcul.
1. Contexte de ligne
Le contexte de ligne correspond à l’idée que chaque ligne d’une table est une entité indépendante. Lorsque vous créez une colonne calculée, DAX évalue la formule ligne par ligne, en tenant compte des valeurs spécifiques de chaque enregistrement.
Exemple simple :
Profit = Sales[Revenue] - Sales[Cost]
Ici, la colonne Profit sera calculée pour chaque ligne de la table Sales en soustrayant le coût du revenu.
Exemple avancé :
Vous pouvez utiliser une fonction itérative comme SUMX :
Total Profit = SUMX(Sales, Sales[Revenue] - Sales[Cost])
Ici, SUMX parcourt chaque ligne de la table Sales, calcule le profit ligne par ligne, puis additionne le tout.
À retenir : le contexte de ligne agit localement sur chaque enregistrement.
2. Contexte de filtre
Le contexte de filtre est l’ensemble des restrictions appliquées aux données avant que DAX n’exécute le calcul. Ces filtres peuvent provenir de :
Un visuel Power BI (par exemple un graphique filtré sur une région ou une période).
Un segment (slicer) choisi par l’utilisateur.
Une relation entre tables qui restreint les valeurs visibles.
Des fonctions DAX comme CALCULATE ou FILTER qui modifient explicitement le filtre actif.
Exemple basique :
Si vous affichez les ventes dans un visuel filtré sur l’année 2024, toutes vos formules DAX prendront uniquement les données de 2024 en compte.
Exemple avec CALCULATE :
Sales 2024 = CALCULATE(SUM(Sales[Amount]), YEAR(Calendar[Date]) = 2024)
Cette mesure calcule le total des ventes mais uniquement pour l’année 2024, peu importe les autres filtres appliqués dans le rapport.
À retenir : le contexte de filtre agit globalement et influence quelles lignes sont disponibles pour le calcul.
3. Contexte de calcul
Le contexte de calcul résulte de la combinaison du contexte de ligne et du contexte de filtre. C’est ce qui permet à DAX d’exécuter des formules complexes de manière dynamique.
Exemple illustratif :
Imaginez une table avec les ventes de plusieurs produits, et un visuel filtré sur Trimestre 1 - 2024.
Le contexte de filtre sélectionne uniquement les ventes du premier trimestre 2024.
Le contexte de ligne calcule le chiffre d’affaires produit par produit.
Ensemble, ils définissent le contexte de calcul.
Exemple pratique :
Sales Growth =
VAR PrevYearSales = CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Calendar[Date]))
RETURN DIVIDE(SUM(Sales[Amount]) - PrevYearSales, PrevYearSales)
Dans cet exemple :
À retenir : maîtriser le contexte de calcul est indispensable pour écrire des mesures fiables et éviter des résultats inattendus.
Les principales catégories de fonctions DAX
Le langage DAX est riche de centaines de fonctions, mais celles-ci se regroupent en grandes catégories. Chacune répond à des besoins spécifiques : calculs numériques, filtrage dynamique, gestion des relations entre tables ou encore analyses temporelles. Voici un panorama détaillé, avec explications et exemples pratiques.
Fonctions d’agrégation
Ces fonctions servent à résumer les données. Elles sont la base de toute analyse.
- SUM : additionne les valeurs d’une colonne. Exemple :
SUM(Sales[Amount]) calcule le chiffre d’affaires total. - SUMX : effectue une somme itérative, utile quand le total dépend de plusieurs colonnes. Exemple :
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice]) calcule le total basé sur quantité × prix. - AVERAGE : calcule la moyenne simple d’une colonne. Exemple :
AVERAGE(Sales[Amount]). - AVERAGEX : comme SUMX mais pour la moyenne, permettant d’itérer ligne par ligne. Exemple :
AVERAGEX(Products, Products[Price] * Products[Discount]). - COUNT : compte les valeurs non vides d’une colonne.
- DISTINCTCOUNT : compte uniquement les valeurs uniques, très utile pour identifier le nombre de clients distincts par exemple.
Fonctions de filtre et de contexte
Ces fonctions permettent de modifier ou de contrôler le contexte d’évaluation des mesures.
- CALCULATE : le « roi » des fonctions DAX. Il modifie le contexte de filtre avant d’effectuer le calcul. Exemple :
CALCULATE(SUM(Sales[Amount]), Sales[Category] = "Électronique") calcule uniquement les ventes électroniques. - FILTER : retourne une table filtrée. Exemple :
FILTER(Sales, Sales[Amount] > 1000) ne conserve que les ventes supérieures à 1000. - ALL : supprime tous les filtres appliqués à une table ou une colonne, souvent utilisé pour comparer une valeur individuelle à un total global.
- ALLEXCEPT : supprime tous les filtres sauf ceux indiqués. Exemple :
ALLEXCEPT(Sales, Sales[Product]) garde le filtre produit mais ignore les autres. - VALUES : retourne une liste unique des valeurs d’une colonne. Utile pour créer des relations implicites ou pour compter les catégories distinctes.
Fonctions de relation et de recherche
Ces fonctions exploitent le modèle relationnel de Power BI.
- RELATED : ramène une valeur depuis une table reliée (relation un-à-plusieurs). Exemple :
RELATED(Customers[Region]) affiche la région du client lié à chaque vente. - RELATEDTABLE : retourne toutes les lignes d’une table reliée, souvent utilisée dans les mesures.
- LOOKUPVALUE : recherche une valeur dans une colonne en fonction de critères. Exemple :
LOOKUPVALUE(Products[Price], Products[ProductID], Sales[ProductID]) récupère le prix d’un produit correspondant à une vente.
Fonctions temporelles (Time Intelligence)
Indispensables pour l’analyse chronologique, elles nécessitent une table calendrier correctement configurée.
- DATEADD : décale une période dans le temps (jours, mois, trimestres, années). Exemple : comparer les ventes du mois courant avec le mois précédent.
- SAMEPERIODLASTYEAR : retourne la même période mais l’année précédente, parfait pour comparer N vs N-1.
- TOTALYTD / TOTALQTD / TOTALMTD : calculent les cumuls depuis le début de l’année, du trimestre ou du mois jusqu’à la date sélectionnée.
- PARALLELPERIOD : décale une période tout en gardant la granularité. Exemple : comparer janvier 2024 à janvier 2023.
Fonctions statistiques et logiques
Elles ajoutent de la logique conditionnelle et des calculs plus avancés.
- IF : applique une condition simple. Exemple :
IF(Sales[Amount] > 1000, "Grande Vente", "Petite Vente"). - SWITCH : remplace plusieurs conditions IF imbriquées par une structure plus lisible. Exemple : catégoriser les ventes par seuils.
- DIVIDE : effectue une division en gérant automatiquement les divisions par zéro. Exemple :
DIVIDE(Sales[Profit], Sales[Revenue]) calcule la marge sans risque d’erreur. - RANKX : attribue un classement dynamique en fonction d’un calcul. Exemple :
RANKX(ALL(Products), SUM(Sales[Amount])) classe les produits selon leur chiffre d’affaires.
En résumé, chaque catégorie de fonctions DAX vous aide à répondre à un type de besoin : résumer vos données, contrôler le contexte de calcul, exploiter vos relations entre tables, analyser dans le temps ou appliquer des conditions et classements. La maîtrise de ces familles est la clé pour écrire des mesures robustes et adaptées aux scénarios réels.
Exemples pratiques approfondis
1. Calculer la croissance annuelle (YoY Growth)
YoY Growth =
DIVIDE(
SUM(Sales[Amount]) - CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Calendar[Date])),
CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Calendar[Date]))
)
2. Créer un classement dynamique des produits
ProductRank = RANKX(ALL(Products), SUM(Sales[Amount]), , DESC)
3. Déterminer la part de marché d’un produit
MarketShare =
DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALL(Sales)))
4. Analyser les ventes des clients fidèles
FilteredSales =
CALCULATE(
SUM(Sales[Amount]),
FILTER(Customers, Customers[LoyaltyStatus] = "Fidèle")
)
5. Cumul des ventes depuis le début de l’année
YTD Sales = TOTALYTD(SUM(Sales[Amount]), Calendar[Date])
Bonnes pratiques pour écrire en DAX
Privilégier les mesures aux colonnes calculées.
Utiliser des variables (VAR) pour plus de lisibilité et de performance.
Optimiser le modèle de données : moins de colonnes, plus de relations bien définies.
Nommez vos mesures clairement : par exemple Total Sales au lieu de Measure1.
Testez vos formules étape par étape en créant des mesures intermédiaires.
Astuces et erreurs à éviter
Ne pas oublier de créer une table calendrier pour exploiter les fonctions temporelles.
Attention aux filtres implicites : une erreur fréquente est d’obtenir un résultat vide ou erroné parce que CALCULATE modifie le contexte sans que cela soit voulu.
Évitez de créer trop de colonnes calculées qui alourdissent le modèle.
Vérifiez toujours vos résultats avec des jeux de données réduits avant d’appliquer vos mesures à des millions de lignes.
Cas d’utilisation avancés
1. Scénarios de Time Intelligence complexes
Comparer les ventes de cette année non seulement à l’année précédente, mais aussi à la moyenne des trois dernières années.
2. Segmentation dynamique
Créer des catégories (petit, moyen, grand client) en fonction du revenu généré, via SWITCH et des conditions.
Évaluer automatiquement si une région dépasse ou non ses objectifs grâce à des mesures conditionnelles et des KPIs colorés.
Conclusion et prochaines étapes
DAX est un langage puissant mais exigeant : sa maîtrise repose sur une compréhension profonde du contexte, l’utilisation des fonctions adaptées et l’adoption de bonnes pratiques.
En résumé, vous avez appris :
à utiliser les fonctions de base (SUM, AVERAGE, CALCULATE),
à exploiter les fonctions temporelles pour comparer différentes périodes,
à écrire des mesures plus avancées (RANKX, ALL, SWITCH),
et à optimiser vos modèles pour la performance.
Prochaines étapes :
Explorez les ressources comme DAX Guide.
Pratiquez régulièrement avec vos propres données.
Participez à des communautés Power BI (forums, LinkedIn, Meetup).
Lancez-vous dans des projets concrets en appliquant DAX à des scénarios métiers réels.
Votre apprentissage de DAX est un voyage : chaque formule vous rapprochera d’une compréhension plus fine de vos données et d’une capacité accrue à en tirer des insights stratégiques. Continuez à expérimenter et à partager vos découvertes : c’est ainsi que vous deviendrez un expert.
Rappel clé : DAX n’est pas seulement un langage de calcul, c’est une passerelle entre vos données et vos décisions stratégiques.