Skip to content
Support Formation DAX
  • Pages
    • Présentation du support
      • Organisation des formations Power BI
      • Ressources
      • Bonnes pratiques
        • DAX pour la présentation
        • Rapport dynamique avec des segments déconnectés
        • Conserver un filtre même absent du visuel
        • Optimisation
      • Leçons [WIP]
    • Principes du DAX
      • Formalisme
      • Saisir du DAX (Excel, Power BI)
      • Trois modalités de création de formules DAX
      • Quatre+ concepts de base
      • Les contextes
      • Modèle de données & DAX
    • Fonctions de filtres
      • CALCULATE
        • Bonnes pratiques de filtre avec CALCULATE
        • Résumé des modificateurs de filtre
      • REMOVEFILTERS / KEEPFILTERS
        • ALL
      • FILTER
      • ALLSELECTED
      • ALLEXCEPT
      • VALUES / DISTINCT
      • CALCULATETABLE / RELATEDTABLE
      • SELECTCOLUMNS
      • SELECTEDVALUE
      • EARLIER
    • Fonctions d'informations
      • HASONEVALUE / ISINSCOPE
      • ISFILTERED (Titre dynamique)
    • Fonctions de regroupements
      • ADDCOLUMNS / SUMMARIZE / SUMMARIZECOLUMNS
      • GROUPBY / CURRENTGROUP
      • GENERATE / ROW
    • Fonctions de relations
      • Sans relation dans le modèle
        • TREATAS
        • INTERSECT (avant Fév. 2017)
        • CROSSJOIN
        • USERELATIONSHIP
      • Avec relation dans le modèle
        • CROSSFILTER
        • LOOKUPVALUE
        • RELATED [WIP]
        • RELATEDTABLE
    • Fonctions d'agrégation
      • SUMX
      • MAXX
      • RANKX
      • TOPN
    • Gestion des dates
      • Tables de dates
        • Marquer les tables de type Calendrier en table de date
      • DATEADD vs PARALLELPERIOD vs SAMEPERIODELASTYEAR
      • DATESINPERIOD vs DATEBETWEEN
      • Moyenne mobile
      • Cumul (TotalYTD)
      • DateYTD
      • Année fiscale
      • Dates précédentes
    • Fonctions de texte
      • CONCATENATEX
    • Fonctions de math
      • MROUND
    • Outils complémentaires
      • DAX Studio
      • Groupes de calculs
    • Bonnes pratiques
      • Performance
      • Lisibilité et maintenabilité

Optimisation


Privilégiez les filtres colonne = valeur dans CALCULATE plutôt que FILTER(table, condition) : le moteur peut “pousser” le filtre côté Storage Engine (SE) au lieu d’itérer côté Formula Engine (FE).
Sales Red 2024 :=
CALCULATE(
[Total Sales],
FILTER(ALL('Product'), 'Product'[Color] = "Red"),
FILTER(ALL('Date'), 'Date'[Year] = 2024)
)
Sales Red 2024 :=
CALCULATE(
[Total Sales],
KEEPFILTERS('Product'[Color] = "Red"),
KEEPFILTERS('Date'[Year] = 2024)
)
Réduisez la taille des tables virtuelles (préfiltrer tôt, projeter peu de colonnes).
Évitez les itérateurs inutiles (SUMX, AVERAGEX…) si un agrégat natif suffit (SUM, AVERAGE…).
Sales Qty>1 :=
SUMX(
FILTER(Sales, Sales[Quantity] > 1),
Sales[Amount]
)

Sales Qty>1 :=
CALCULATE(
SUM(Sales[Amount]),
Sales[Quantity] > 1
)

Utilisez VAR pour ne pas recalculer des expressions lourdes plusieurs fois.
Margin % :=
DIVIDE(
CALCULATE(SUM(Sales[Margin])),
CALCULATE(SUM(Sales[Amount]))
)
Margin % :=
VAR SalesAmt = CALCULATE(SUM(Sales[Amount]))
VAR SalesMrg = CALCULATE(SUM(Sales[Margin]))
RETURN DIVIDE(SalesMrg, SalesAmt)
Préférez KEEPFILTERS et IN aux FILTER génériques pour des inclusions simples.
Sales BikesAcc :=
CALCULATE(
[Total Sales],
FILTER('Product', 'Product'[Category] = "Bikes" || 'Product'[Category] = "Accessories")
)

Sales BikesAcc :=
CALCULATE(
[Total Sales],
KEEPFILTERS( 'Product'[Category] IN { "Bikes", "Accessories" } )
)

Utilisez les fonctions Time-Intelligence (DATESYTD, DATEADD…) plutôt que des filtres de date faits main.
Star schema & relations à sens unique : vos DAX seront plus simples et plus rapides.

Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.