Support Formation DAX

icon picker
Performance

1. Éviter les itérations inutiles

Les fonctions X (SUMX, AVERAGEX, COUNTX) traitent chaque ligne individuellement, ce qui ralentit considérablement les calculs sur de grandes tables. Privilégiez les fonctions d'agrégation simples quand c'est possible.
-- Lent
Total Ventes = SUMX(Ventes, Ventes[Quantite] * Ventes[Prix])

-- Rapide (si colonne calculée existe)
Total Ventes = SUM(Ventes[MontantVente])

2. Utiliser massivement les variables (VAR)

Les variables améliorent les performances car DAX ne recalcule jamais une variable. Elles permettent de mettre en cache les résultats intermédiaires et de réduire drastiquement les temps de calcul.
Marge % =
VAR _CA = SUM(Ventes[Montant])
VAR _Cout = SUM(Ventes[Cout])
VAR _Marge = _CA - _Cout
RETURN DIVIDE(_Marge, _CA)

3. Privilégier CALCULATE avec filtres au lieu de FILTER

CALCULATE avec des arguments de filtre simples est beaucoup plus performant que FILTER. La fonction FILTER doit être réservée uniquement aux conditions complexes impossibles à exprimer autrement.
-- Moins performant
CA Rouge = CALCULATE(
[CA Total],
FILTER(Produits, Produits[Couleur] = "Rouge")
)

-- Plus performant
CA Rouge = CALCULATE(
[CA Total],
Produits[Couleur] = "Rouge"
)

4. Utiliser TREATAS pour les relations virtuelles

Toujours privilégier les relations physiques dans le modèle quand c'est possible. Si une relation virtuelle est nécessaire, TREATAS est significativement plus performant que INTERSECT ou FILTER.

5. Ne pas remplacer les valeurs vides par des zéros

Power BI filtre automatiquement les lignes avec valeurs vides, ce qui améliore considérablement la performance sur les grandes tables. Remplacer les blancs empêche cette optimisation automatique et dégrade les performances.

6. Optimiser le modèle de données en étoile (Star Schema)

Le schéma en étoile est fondamental pour les performances :
Séparer les tables de faits (données transactionnelles) et les dimensions (données descriptives)
Cardinalité 1 (dimension) vers plusieurs (fait)
Direction du filtre croisé de la dimension vers le fait

7. Utiliser DIVIDE au lieu de l'opérateur /

DIVIDE gère automatiquement la division par zéro et évite les erreurs d'affichage sans code supplémentaire.
Marge% = DIVIDE([Benefice], [CA Total])

8. Vider le cache DAX avant d'optimiser

Le cache DAX s'accumule avec les requêtes VertiPaq internes. Utilisez DAX Studio pour vider le cache, ce qui permet de mesurer les gains de performance réels plus efficacement.

9. Utiliser ALLSELECTED au lieu de ALL dans les rapports interactifs

ALLSELECTED respecte le contexte de filtre des sélections utilisateur (slicers), ce qui le rend beaucoup plus efficace que ALL dans les rapports avec interactions utilisateur.

10. Préférer les colonnes calculées aux mesures (dans certains cas spécifiques)

Les colonnes calculées sont calculées une fois au chargement des données plutôt qu'à chaque interaction. Attention : elles consomment de la mémoire. À utiliser pour des calculs statiques fréquemment utilisés en filtres.


Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.