DAX pour Power BI & Excel

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.