Ce mémento rassemble les fonctions DAX utilisées dans le support, par famille. Chaque tableau renvoie à la page notion qui les explique ; le bloc qui suit donne un exemple par fonction, écrit sur le modèle des PBIP de démonstration (tables Ventes, Produit, Geographie, Calendrier).
| Fonction | Rôle | Page notion | Source |
| SUM, AVERAGE, MIN, MAX | Agrège une colonne | Découvrir DAX | Source |
| COUNTROWS | Compte les lignes d'une table | Découvrir DAX | Source |
| DISTINCTCOUNT | Compte les valeurs distinctes d'une colonne | Découvrir DAX | Source |
| DIVIDE | Divise en renvoyant vide si le dénominateur est nul | Découvrir DAX | Source |
| SUMX, AVERAGEX | Calcule une expression ligne par ligne, puis agrège | Itérateurs et variables | Source |
| MAXX, MINX | Plus grande ou plus petite valeur d'une expression | Itérateurs et variables | Source |
| RANKX | Rang d'un élément dans une table | Itérateurs et variables | Source |
Montant vente = SUM ( Ventes[Montant] )
Nb ventes = COUNTROWS ( Ventes )
Panier moyen = DIVIDE ( [Montant vente], [Nb ventes] )
Montant catalogue = SUMX ( Ventes, Ventes[Quantite] * RELATED ( Produit[PrixUnitaire] ) )
Montant du meilleur pays = MAXX ( VALUES ( Geographie[Pays] ), [Montant vente] )
Rang pays = IF ( HASONEVALUE ( Geographie[Pays] ), RANKX ( ALL ( Geographie[Pays] ), [Montant vente] ) )
| Fonction | Rôle | Page notion | Source |
| IF | Renvoie une valeur selon une condition | Itérateurs et variables | Source |
| SWITCH | Teste une série de conditions ; avec TRUE (), remplace les IF imbriqués | Itérateurs et variables | Source |
| ISBLANK, BLANK | Teste une valeur vide, renvoie une valeur vide | Itérateurs et variables | Source |
| HASONEVALUE | Vrai si une seule valeur de la colonne est visible | Fonctions de filtre | Source |
| ISFILTERED | Vrai si la colonne est filtrée directement | Fonctions de filtre | Source |
| VAR, RETURN | Stocke une valeur ou une table, puis renvoie le résultat | Itérateurs et variables | Source |
// N'affiche le montant que si une seule année est visible (vide sur la ligne Total)
Montant si une année = IF ( HASONEVALUE ( Calendrier[Annee] ), [Montant vente] )
Statut évolution =
VAR e = [% évolution]
RETURN
SWITCH ( TRUE (), ISBLANK ( e ), BLANK (), e > 0.05, 1, e < -0.05, -1, 0 )
Couleur filtrée ? = IF ( ISFILTERED ( Produit[Couleur] ), "Oui", "Non" )
| Fonction | Rôle | Page notion | Source |
| CALCULATE | Évalue une expression dans un contexte de filtre modifié | CALCULATE et transition de contexte | Source |
| CALCULATETABLE | Même principe, renvoie une table | CALCULATE et transition de contexte | Source |
| FILTER | Garde les lignes d'une table qui respectent une condition | Fonctions de filtre | Source |
| ALL | Supprime tous les filtres d'une table ou d'une colonne | Fonctions de filtre | Source |
| ALLEXCEPT | Supprime les filtres d'une table, sauf ceux des colonnes nommées | Contextes de ligne et de filtre | Source |
| ALLSELECTED | Supprime les filtres du visuel, garde les segments | Contextes de ligne et de filtre | Source |
| REMOVEFILTERS | Supprime des filtres, uniquement dans CALCULATE | Fonctions de filtre | Source |
| KEEPFILTERS | Ajoute un filtre au lieu de remplacer l'existant | Fonctions de filtre | Source |
| VALUES, DISTINCT | Valeurs distinctes visibles (VALUES ajoute la ligne vide éventuelle) | Fonctions de filtre | Source |
| SELECTEDVALUE | Valeur sélectionnée s'il n'y en a qu'une, sinon valeur de remplacement | Fonctions de filtre | Source |
Montant vente Rouge = CALCULATE ( [Montant vente], Produit[Couleur] = "Rouge" )
Montant grosses ventes = CALCULATE ( [Montant vente], FILTER ( Ventes, Ventes[Montant] >= 1000 ) )
% du total général = DIVIDE ( [Montant vente], CALCULATE ( [Montant vente], ALL ( Produit ) ) )
% du total visible = DIVIDE ( [Montant vente], CALCULATE ( [Montant vente], ALLSELECTED ( Produit ) ) )
Montant toutes couleurs = CALCULATE ( [Montant vente], REMOVEFILTERS ( Produit[Couleur] ) )
Montant toutes couleurs et catégories = CALCULATE ( [Montant vente], REMOVEFILTERS ( Produit[Couleur], Produit[Categorie] ) )
Montant de tout le modèle = CALCULATE ( [Montant vente], REMOVEFILTERS () )
Montant Rouge KEEPFILTERS = CALCULATE ( [Montant vente], KEEPFILTERS ( Produit[Couleur] = "Rouge" ) )
// Équivalent de KEEPFILTERS : FILTER sur les valeurs visibles de la colonne
Montant Rouge (VALUES) = CALCULATE ( [Montant vente], FILTER ( VALUES ( Produit[Couleur] ), Produit[Couleur] = "Rouge" ) )
// Variante robuste de ALLEXCEPT
Montant catégorie = CALCULATE ( [Montant vente], REMOVEFILTERS ( Produit ), VALUES ( Produit[Categorie] ) )
Couleur sélectionnée = SELECTEDVALUE ( Produit[Couleur], "Plusieurs couleurs" )
// Équivalent de SELECTEDVALUE
Couleur sélectionnée (IF) = IF ( HASONEVALUE ( Produit[Couleur] ), VALUES ( Produit[Couleur] ), "Plusieurs couleurs" )
| Fonction | Rôle | Page notion | Source |
| RELATED | Lit une valeur côté « un » de la relation | DAX et relations | Source |
| RELATEDTABLE | Renvoie les lignes liées côté « plusieurs » | DAX et relations | Source |
| USERELATIONSHIP | Active une relation inactive dans CALCULATE | DAX et relations | Source |
| CROSSFILTER | Change le sens de filtrage d'une relation dans CALCULATE | DAX et relations | Source |
| TREATAS | Applique des valeurs comme filtre sur une table non reliée | DAX et relations | Source |
| LOOKUPVALUE | Cherche une valeur selon des critères, sans relation | DAX et relations | Source |
Couleur (RELATED) = RELATED ( Produit[Couleur] )
Nb ventes (colonne) = COUNTROWS ( RELATEDTABLE ( Ventes ) )
Montant par date de livraison = CALCULATE ( [Montant vente], USERELATIONSHIP ( Ventes[DateLivraison], Calendrier[Date] ) )
Nb produits vendus = CALCULATE ( COUNTROWS ( Produit ), CROSSFILTER ( Ventes[ProduitID], Produit[ProduitID], BOTH ) )
Objectif (TREATAS) = CALCULATE ( SUM ( Objectifs[Objectif] ), TREATAS ( VALUES ( Geographie[Pays] ), Objectifs[Pays] ) )
// TREATAS avec une liste de couples : décembre 2024 et janvier 2025
Montant fin 2024 début 2025 =
CALCULATE ( [Montant vente], TREATAS ( { ( 2024, 12 ), ( 2025, 1 ) }, Calendrier[Annee], Calendrier[NumMois] ) )
Objectif (LOOKUPVALUE) = LOOKUPVALUE ( Objectifs[Objectif], Objectifs[Pays], SELECTEDVALUE ( Geographie[Pays] ) )
Tables : regroupement, génération et ensembles
| Fonction | Rôle | Page notion | Source |
| SUMMARIZE | Une ligne par combinaison distincte de colonnes | Fonctions de table | Source |
| ADDCOLUMNS | Ajoute des colonnes calculées à une table | Fonctions de table | Source |
| SUMMARIZECOLUMNS | Regroupe et calcule ; base des requêtes des visuels | Fonctions de table | Source |
| GROUPBY, CURRENTGROUP | Regroupe et agrège avec des itérateurs en X | Fonctions de table | Source |
| SELECTCOLUMNS | Choisit et renomme des colonnes | Fonctions de table | Source |
| TOPN | Les N premières lignes selon une expression | Fonctions de table | Source |
| GENERATESERIES | Suite de valeurs (paramètre de simulation) | Fonctions de table | Source |
| CROSSJOIN | Produit cartésien de tables | Fonctions de table | Source |
| GENERATE | Évalue une table pour chaque ligne d'une autre | Fonctions de table | Source |
| ROW | Table d'une seule ligne | Fonctions de table | Source |
| UNION, EXCEPT, INTERSECT | Empile, soustrait ou croise deux tables | Fonctions de table | Source |
| CALENDAR, CALENDARAUTO | Table de dates continue | Fonctions de table | Source |
Moyenne par couleur = AVERAGEX ( SUMMARIZE ( Ventes, Produit[Couleur] ), [Montant vente] )
Montant du meilleur pays (ADDCOLUMNS) =
MAXX ( ADDCOLUMNS ( VALUES ( Geographie[Pays] ), "@Montant", [Montant vente] ), [@Montant] )
SynthesePaysCategorie =
SUMMARIZECOLUMNS ( Geographie[Pays], Produit[Categorie], "Montant", [Montant vente] )
Moyenne des plus grosses ventes par pays =
AVERAGEX ( GROUPBY ( Ventes, Geographie[Pays], "@Max", MAXX ( CURRENTGROUP (), Ventes[Montant] ) ), [@Max] )
Montant top 2 produits = SUMX ( TOPN ( 2, VALUES ( Produit[Produit] ), [Montant vente] ), [Montant vente] )
ParamRemise = GENERATESERIES ( 0, 0.3, 0.05 )
PaysCategorie = CROSSJOIN ( VALUES ( Geographie[Pays] ), VALUES ( Produit[Categorie] ) )
Indicateurs = ROW ( "Montant total", [Montant vente], "Nombre de ventes", COUNTROWS ( Ventes ) )
Nb libellés (UNION) = COUNTROWS ( UNION ( VALUES ( Geographie[Pays] ), VALUES ( Geographie[Continent] ) ) )
Calendrier = CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) )
| Fonction | Rôle | Page notion | Source |
| TOTALYTD, TOTALQTD, TOTALMTD | Cumul depuis le début de l'année, du trimestre, du mois | Time intelligence | Source |
| DATESYTD | Dates du début d'année à la dernière date du contexte | Time intelligence | Source |
| SAMEPERIODLASTYEAR | Même période un an plus tôt | Time intelligence | Source |
| DATEADD | Décale la période de N intervalles | Time intelligence | Source |
| PARALLELPERIOD | Période complète décalée | Time intelligence | Source |
| PREVIOUSMONTH | Mois qui précède la première date du contexte | Time intelligence | Source |
| DATESINPERIOD | Période glissante | Time intelligence | Source |
| DATESBETWEEN | Dates entre deux bornes | Time intelligence | Source |
Cumul annuel = TOTALYTD ( [Montant vente], Calendrier[Date] )
Cumul annuel N-1 = CALCULATE ( [Montant vente], DATESYTD ( SAMEPERIODLASTYEAR ( Calendrier[Date] ) ) )
Montant N-1 = CALCULATE ( [Montant vente], SAMEPERIODLASTYEAR ( Calendrier[Date] ) )
Montant M-1 = CALCULATE ( [Montant vente], DATEADD ( Calendrier[Date], -1, MONTH ) )
Montant année précédente complète = CALCULATE ( [Montant vente], PARALLELPERIOD ( Calendrier[Date], -1, YEAR ) )
Montant mois précédent = CALCULATE ( [Montant vente], PREVIOUSMONTH ( Calendrier[Date] ) )
Montant 3 derniers mois =
CALCULATE ( [Montant vente], DATESINPERIOD ( Calendrier[Date], MAX ( Calendrier[Date] ), -3, MONTH ) )
Cumul depuis l'origine =
CALCULATE ( [Montant vente], DATESBETWEEN ( Calendrier[Date], BLANK (), MAX ( Calendrier[Date] ) ) )
| Fonction | Rôle | Page notion | Source |
| CONCATENATEX | Concatène les valeurs d'une table avec un séparateur | Itérateurs et variables ; Rendre le rapport dynamique (partie 4) | Source |
| FORMAT | Convertit une valeur en texte selon un format | Rendre le rapport dynamique (partie 4) | Source |
| UNICHAR | Renvoie le caractère Unicode d'un code (icônes texte) | Rendre le rapport dynamique (partie 4) | Source |
// Liste les couleurs visibles sur chaque ligne, ou la couleur unique
Couleurs de la ligne =
SELECTEDVALUE (
Produit[Couleur],
CONCATENATEX ( VALUES ( Produit[Couleur] ), Produit[Couleur], ", ", Produit[Couleur], ASC )
)
Titre carte = "Ventes " & SELECTEDVALUE ( Geographie[Pays], "tous pays" ) & " : " & FORMAT ( [Montant vente], "#,##0 €" )
Flèche hausse = UNICHAR ( 9650 )
Fenêtre et calculs visuels
| Fonction | Rôle | Page notion | Source |
| OFFSET | Ligne située à N positions de la ligne courante | Fonctions de fenêtre | Source |
| WINDOW | Plage de lignes (cumul, moyenne mobile) | Fonctions de fenêtre | Source |
| INDEX | Ligne à une position absolue | Fonctions de fenêtre | Source |
| RANK, ROWNUMBER | Rang ou numéro de ligne | Fonctions de fenêtre | Source |
| RUNNINGSUM, MOVINGAVERAGE, PREVIOUS, COLLAPSEALL | Fonctions propres aux calculs visuels | Calculs visuels | Source |
// Calculs visuels (barre de formule du calcul visuel)
Écart au précédent = [Montant vente] - PREVIOUS ( [Montant vente] )
Cumul = RUNNINGSUM ( [Montant vente] )
Moyenne mobile = MOVINGAVERAGE ( [Montant vente], 2 )
% du total général = DIVIDE ( [Montant vente], COLLAPSEALL ( [Montant vente], ROWS ) )
Fonctions anciennes à reconnaître
Vous rencontrerez ces écritures dans des modèles anciens ou sur des forums. Elles fonctionnent toujours, mais il existe une écriture plus simple :
| Écriture ancienne | Écriture recommandée |
ADDCOLUMNS ( SUMMARIZE (...), ... ) dans une requête | SUMMARIZECOLUMNS (...) (dans une mesure, ADDCOLUMNS avec SUMMARIZE reste courant) |
INTERSECT ou FILTER avec CONTAINS pour filtrer une table non reliée | TREATAS |
ALL comme modificateur de CALCULATE | REMOVEFILTERS |
IF ( HASONEVALUE ( col ), VALUES ( col ) ) | SELECTEDVALUE ( col ) |
Division avec / | DIVIDE |
- Source (Microsoft Learn, référence des fonctions DAX)
- Source (DAX Guide, SQLBI : syntaxe, compatibilité et exemples de chaque fonction)