Support formation Rapports Power BI

Mémento des fonctions DAX

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).

Agrégation et itérateurs

FonctionRôlePage notionSource
SUM, AVERAGE, MIN, MAXAgrège une colonneDécouvrir DAXSource
COUNTROWSCompte les lignes d'une tableDécouvrir DAXSource
DISTINCTCOUNTCompte les valeurs distinctes d'une colonneDécouvrir DAXSource
DIVIDEDivise en renvoyant vide si le dénominateur est nulDécouvrir DAXSource
SUMX, AVERAGEXCalcule une expression ligne par ligne, puis agrègeItérateurs et variablesSource
MAXX, MINXPlus grande ou plus petite valeur d'une expressionItérateurs et variablesSource
RANKXRang d'un élément dans une tableItérateurs et variablesSource
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] ) )

Logique et conditions

FonctionRôlePage notionSource
IFRenvoie une valeur selon une conditionItérateurs et variablesSource
SWITCHTeste une série de conditions ; avec TRUE (), remplace les IF imbriquésItérateurs et variablesSource
ISBLANK, BLANKTeste une valeur vide, renvoie une valeur videItérateurs et variablesSource
HASONEVALUEVrai si une seule valeur de la colonne est visibleFonctions de filtreSource
ISFILTEREDVrai si la colonne est filtrée directementFonctions de filtreSource
VAR, RETURNStocke une valeur ou une table, puis renvoie le résultatItérateurs et variablesSource
// 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" )

Filtre

FonctionRôlePage notionSource
CALCULATEÉvalue une expression dans un contexte de filtre modifiéCALCULATE et transition de contexteSource
CALCULATETABLEMême principe, renvoie une tableCALCULATE et transition de contexteSource
FILTERGarde les lignes d'une table qui respectent une conditionFonctions de filtreSource
ALLSupprime tous les filtres d'une table ou d'une colonneFonctions de filtreSource
ALLEXCEPTSupprime les filtres d'une table, sauf ceux des colonnes nomméesContextes de ligne et de filtreSource
ALLSELECTEDSupprime les filtres du visuel, garde les segmentsContextes de ligne et de filtreSource
REMOVEFILTERSSupprime des filtres, uniquement dans CALCULATEFonctions de filtreSource
KEEPFILTERSAjoute un filtre au lieu de remplacer l'existantFonctions de filtreSource
VALUES, DISTINCTValeurs distinctes visibles (VALUES ajoute la ligne vide éventuelle)Fonctions de filtreSource
SELECTEDVALUEValeur sélectionnée s'il n'y en a qu'une, sinon valeur de remplacementFonctions de filtreSource
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" )

Relation

FonctionRôlePage notionSource
RELATEDLit une valeur côté « un » de la relationDAX et relationsSource
RELATEDTABLERenvoie les lignes liées côté « plusieurs »DAX et relationsSource
USERELATIONSHIPActive une relation inactive dans CALCULATEDAX et relationsSource
CROSSFILTERChange le sens de filtrage d'une relation dans CALCULATEDAX et relationsSource
TREATASApplique des valeurs comme filtre sur une table non reliéeDAX et relationsSource
LOOKUPVALUECherche une valeur selon des critères, sans relationDAX et relationsSource
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

FonctionRôlePage notionSource
SUMMARIZEUne ligne par combinaison distincte de colonnesFonctions de tableSource
ADDCOLUMNSAjoute des colonnes calculées à une tableFonctions de tableSource
SUMMARIZECOLUMNSRegroupe et calcule ; base des requêtes des visuelsFonctions de tableSource
GROUPBY, CURRENTGROUPRegroupe et agrège avec des itérateurs en XFonctions de tableSource
SELECTCOLUMNSChoisit et renomme des colonnesFonctions de tableSource
TOPNLes N premières lignes selon une expressionFonctions de tableSource
GENERATESERIESSuite de valeurs (paramètre de simulation)Fonctions de tableSource
CROSSJOINProduit cartésien de tablesFonctions de tableSource
GENERATEÉvalue une table pour chaque ligne d'une autreFonctions de tableSource
ROWTable d'une seule ligneFonctions de tableSource
UNION, EXCEPT, INTERSECTEmpile, soustrait ou croise deux tablesFonctions de tableSource
CALENDAR, CALENDARAUTOTable de dates continueFonctions de tableSource
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 ) )

Time intelligence

FonctionRôlePage notionSource
TOTALYTD, TOTALQTD, TOTALMTDCumul depuis le début de l'année, du trimestre, du moisTime intelligenceSource
DATESYTDDates du début d'année à la dernière date du contexteTime intelligenceSource
SAMEPERIODLASTYEARMême période un an plus tôtTime intelligenceSource
DATEADDDécale la période de N intervallesTime intelligenceSource
PARALLELPERIODPériode complète décaléeTime intelligenceSource
PREVIOUSMONTHMois qui précède la première date du contexteTime intelligenceSource
DATESINPERIODPériode glissanteTime intelligenceSource
DATESBETWEENDates entre deux bornesTime intelligenceSource
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] ) ) )

Texte

FonctionRôlePage notionSource
CONCATENATEXConcatène les valeurs d'une table avec un séparateurItérateurs et variables ; Rendre le rapport dynamique (partie 4)Source
FORMATConvertit une valeur en texte selon un formatRendre le rapport dynamique (partie 4)Source
UNICHARRenvoie 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

FonctionRôlePage notionSource
OFFSETLigne située à N positions de la ligne couranteFonctions de fenêtreSource
WINDOWPlage de lignes (cumul, moyenne mobile)Fonctions de fenêtreSource
INDEXLigne à une position absolueFonctions de fenêtreSource
RANK, ROWNUMBERRang ou numéro de ligneFonctions de fenêtreSource
RUNNINGSUM, MOVINGAVERAGE, PREVIOUS, COLLAPSEALLFonctions propres aux calculs visuelsCalculs visuelsSource
// 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êteSUMMARIZECOLUMNS (...) (dans une mesure, ADDCOLUMNS avec SUMMARIZE reste courant)
INTERSECT ou FILTER avec CONTAINS pour filtrer une table non reliéeTREATAS
ALL comme modificateur de CALCULATEREMOVEFILTERS
IF ( HASONEVALUE ( col ), VALUES ( col ) )SELECTEDVALUE ( col )
Division avec /DIVIDE

Pour aller plus loin

  • Source (Microsoft Learn, référence des fonctions DAX)
  • Source (DAX Guide, SQLBI : syntaxe, compatibilité et exemples de chaque fonction)