
Les 10 erreurs DAX les plus courantes à éviter dans Power BI
Découvrez les 10 erreurs DAX que font 90% des utilisateurs Power BI et comment les corriger. Guide pratique avec exemples de code pour améliorer vos mesures.
Introduction
DAX (Data Analysis Expressions) est le langage de formule de Power BI. Puissant mais parfois déroutant, il est source de nombreuses erreurs, même chez les utilisateurs expérimentés. Voici les 10 erreurs les plus fréquentes que nous rencontrons chez Datakhi lors de nos missions d'audit.
Erreur 1 : Confondre colonnes calculées et mesures
C'est l'erreur la plus répandue chez les débutants.
Le problème
Les colonnes calculées sont évaluées ligne par ligne lors du refresh et stockées en mémoire. Les mesures sont calculées à la volée selon le contexte.
La solution
// ERREUR : Colonne calculée pour un KPI
Total Ventes = [Prix] * [Quantité]
// CORRECT : Mesure
Total Ventes = SUMX(Ventes, Ventes[Prix] * Ventes[Quantité])
Règle : Utilisez les mesures par défaut.
Erreur 2 : Oublier le contexte de filtre
Ne pas comprendre comment le contexte de filtre affecte vos mesures.
Utilisez ALL() ou REMOVEFILTERS() pour ignorer explicitement les filtres :
// Part du total, fonctionne avec les contexte de filtres
Part du Total =
DIVIDE(
SUM(Ventes[Montant]),
CALCULATE(SUM(Ventes[Montant]), ALL(Ventes))
)
Erreur 3 : Utiliser CALCULATE sans raison
CALCULATE modifie le contexte de filtre. L'utiliser sans filtre est inutile.
Le problème
// INUTILE : CALCULATE sans filtre
Total = CALCULATE(SUM(Ventes[Montant]))
La solution
// CORRECT : Sans CALCULATE
Total = SUM(Ventes[Montant])
// OU avec un filtre explicite
Total 2024 = CALCULATE(SUM(Ventes[Montant]), Dates[Année] = 2024)
Erreur 4 : Diviser sans gérer les erreurs
La division par zéro génère des erreurs dans vos rapports.
Le problème
// ERREUR potentielle si Coûts = 0
Marge % = (Ventes[Montant] - Ventes[Coût]) / Ventes[Coût]
La solution
// CORRECT : Utiliser DIVIDE
Marge % = DIVIDE(
SUM(Ventes[Montant]) - SUM(Ventes[Coût]),
SUM(Ventes[Coût]),
0 // Valeur par défaut si division par 0
)
Erreur 5 : Imbriquer CALCULATE dans le mauvais ordre
Imbriquer les CALCULATE permet d'optimiser le temps de calcul de vos mesures. Mais l'ordre dans lequel vous les imbriquez peut avoir une grande influence.
Le problème
// chaussure est filtré en premier, puis france
marge chaussure france =
CALCULATE(
CALCULATE(
[marge],
pays[nom] = 'France'
),
Ventes[type] = 'chaussure'
)
La mesure va d'abord appliquer le filtre 'chaussure', hors la cardinalité de la colonne [type] est importante, ce filtre va donc consommer beaucoup de temps de calcul.
La solution
// France est filtré en premier, puis chaussure
marge chaussure france =
CALCULATE(
CALCULATE(
[marge],
Ventes[type] = 'chaussure'
),
pays[nom] = 'France'
)
La colonne pays[nom] a une faible cardinalité, le filtrage sera donc rapide. La taille de la table Ventes aura été drastiquement réduite, ce qui va accélérer le filtre par type de produit.
Erreur 6 : Utiliser FILTER au lieu d'un filtre direct
La fonction FILTER retourne une table, elle est utilisée pour faire des filtres complexes.
Le problème
// Pas optimisé
Ventes France =
CALCULATE(
SUM(Ventes[Montant]),
FILTER(Clients, Clients[Pays] = "France")
)
La solution
// Filtre direct
Ventes France =
CALCULATE(
SUM(Ventes[Montant]),
Clients[Pays] = "France"
)
// Bonne utilisation de FILTER
Ventes produit profitable =
CALCULATE(
SUM(Ventes[Montant]),
FILTER(
Produits,
[marge] > 0
)
)
Règle : Utilisez FILTER uniquement quand vous devez filtrer sur une mesure ou une condition complexe.
Erreur 7 : Évitez les relations entre les tables trop profondes
Le schéma en flocon est le schéma le plus adapté à Power BI. Mais il faut faire attention à ne pas tomber dans l'extrême.
Le problème
À partir de trois tables de dimension de profondeur, les performances des mesures DAX utilisant ces tables vont grandement diminuer.
La solution
Il ne faut pas hésiter à dénormaliser vos tables pour réduire la profondeur.
Erreur 8 : Ignorer les variables
Les variables (VAR) améliorent la lisibilité ET les performances.
Le problème
// Calcul répété 3 fois
Mesure =
IF(
SUM(Ventes[Montant]) > 10000,
SUM(Ventes[Montant]) * 0.9,
SUM(Ventes[Montant])
)
La solution
// Calcul effectué une seule fois
Mesure =
VAR TotalVentes = SUM(Ventes[Montant])
RETURN
IF(TotalVentes > 10000, TotalVentes * 0.9, TotalVentes)
Erreur 9 : Ne pas utiliser TREATAS pour les relations virtuelles
Parfois, vous devez créer une relation temporaire entre deux tables.
Le problème
Créer une relation physique juste pour un calcul ponctuel alourdit le modèle.
La solution
// Relation virtuelle avec TREATAS
Ventes Budget =
CALCULATE(
SUM(Budget[Montant]),
TREATAS(VALUES(Ventes[ProduitID]), Budget[ProduitID])
)
Erreur 10 : BLANK() vs 0
BLANK() et 0 ne se comportent pas de la même manière dans les visuels.
Le problème
Retourner 0 quand il n'y a pas de données affiche des lignes inutiles dans vos tableaux.
La solution
// Retourne BLANK() si pas de ventes
Ventes Nettes =
VAR Total = SUM(Ventes[Montant]) - SUM(Retours[Montant])
RETURN IF(ISBLANK(SUM(Ventes[Montant])), BLANK(), Total)
Conclusion
Éviter ces 10 erreurs améliorera significativement la performance et la maintenabilité de vos rapports Power BI. Chez Datakhi, nous auditons régulièrement des modèles Power BI et ces erreurs reviennent dans 90% des cas.
Besoin d'un audit DAX de vos rapports ? Contactez nos experts pour optimiser vos mesures.