Anti-sèche des fonctions DAX de Power BI

(Last Updated On: 21 janvier 2024)

📚 Retrouvez ici mon anti-sèche complète et pratique sur les formules et les expressions DAX essentielles dans Power BI.

Choisir et utiliser les fonctions DAX revient – pour l’analyse de données dans Power BI – à choisir les bons ingrédients🌶️ pour réaliser une bonne recette de cuisine.

Power BI est l’un des outils de Business Intelligence les plus robustes et puissants disponibles sur le marché. L’une des fonctionnalités les plus puissantes de Power BI est le langage DAX (Data Analysis Expressions), qui est le langage de formules conçue pour l’analyse des données. Les formules DAX contiennent des fonctions, des opérateurs, des instructions, et bien plus encore.

Cette fiche pourra vous accompagner lorsque vous travaillez avec le DAX dans Power BI.

Power BI DAX Cheat Sheet – XL Business Tools

Opérateurs de base en DAX

Problème Traité Expression DAX Exemple
Additionner deux nombres Nombre1 + Nombre2 5 + 3 donne 8
Soustraire un nombre d’un autre Nombre1 – Nombre2 10 – 2 donne 8
Multiplier deux nombres Nombre1 * Nombre2 4 * 2 donne 8
Diviser un nombre par un autre (gestion des zéros) DIVIDE(Nombre1, Nombre2) DIVIDE(16, 2) donne 8, gestion sûre de la division par 0
Comparer si un nombre est supérieur à un autre Nombre1 > Nombre2 5 > 3 renvoie VRAI
Nombre supérieur ou égal à un autre Nombre1 >= Nombre2 5 >= 5 renvoie VRAI
Vérifier si deux valeurs sont égales Valeur1 = Valeur2 2 = 2 renvoie VRAI
Vérifier si deux valeurs sont différentes Valeur1 <> Valeur2 2 <> 3 renvoie VRAI
Concaténer des chaînes de texte Texte1 & Texte2 “Bonjour” & ” ” & “Monde” donne Bonjour Monde
Calculer le reste de la division MOD(Nombre1, Nombre2) MOD(10, 3) donne 1
Élever un nombre à une puissance POWER(Nombre, Puissance) POWER(2, 3) donne 8

Fonctions Logiques en DAX

Problème Traité Expression DAX
Appliquer une condition IF(Condition, RésultatSiVrai, RésultatSiFaux)
Combinaison de conditions (ET logique) AND(Condition1, Condition2)
Combinaison de conditions (OU logique) OR(Condition1, Condition2)
Inverser une condition NOT(Condition)
Sélectionner parmi plusieurs options SWITCH(Expression, Valeur1, Résultat1, Valeur2, Résultat2, …, RésultatParDéfaut)
Gérer les erreurs dans une expression IFERROR(Expression, ValeurSiErreur)

 

Fonctions Mathématiques et Statistiques en DAX

Problème Traité Expression DAX Exemple
Calculer la somme d’une colonne SUM(Colonne) SUM(Ventes[Montant]) pour calculer la somme totale des ventes
Trouver la moyenne d’une colonne AVERAGE(Colonne) AVERAGE(Ventes[Quantité]) pour la moyenne des quantités vendues
Calculer la médiane d’une colonne MEDIAN(Colonne) MEDIAN(Ventes[Montant]) pour la médiane des montants de ventes
Calculer la moyenne géométrique GEOMEAN(Colonne) GEOMEAN(Ventes[Quantité]) pour la moyenne géométrique des quantités vendues
Compter le nombre de valeurs COUNT(Colonne) COUNT(Ventes[ArticleID]) pour le nombre total d’articles vendus
Diviser deux nombres DIVIDE(Nombre1, Nombre2) DIVIDE(SUM(Ventes[Montant]), COUNT(Ventes[ArticleID])) pour le montant moyen par article
Trouver la valeur minimale MIN(Colonne) MIN(Ventes[Montant]) pour le montant de vente le plus bas
Trouver la valeur maximale MAX(Colonne) MAX(Ventes[Montant]) pour le montant de vente le plus élevé
Compter le nombre de lignes COUNTROWS(Table) COUNTROWS(Ventes) pour le nombre total de transactions de vente
Compter valeurs distinctes DISTINCTCOUNT(Colonne) DISTINCTCOUNT(Ventes[ClientID]) pour le nombre de clients uniques
Classer une valeur RANKX(Table, Expression) RANKX(All(Ventes), SUM(Ventes[Montant])) pour classer les ventes par montant total

 

Fonctions de Texte en DAX

Problème Traité Expression DAX Exemple
Concaténer des chaînes de caractères CONCATENATE(<Text1>, <Text2>) CONCATENATE(Client[Nom], Client[Prénom]) pour fusionner nom et prénom
Convertir en majuscules UPPER(<TextColumn>) UPPER(Client[Nom]) pour convertir les noms en majuscules
Convertir en minuscules LOWER(<TextColumn>) LOWER(Client[Nom]) pour convertir les noms en minuscules
Trouver la longueur d’une chaîne LEN(<TextColumn>) LEN(Client[Commentaire]) pour la longueur d’un commentaire
Remplacer une sous-chaîne REPLACE(<Text>, <Start>, <Length>, <NewText>) REPLACE(Client[Adresse], 1, 5, “Rue”) pour remplacer les premiers caractères de l’adresse
Extraire une sous-chaîne MID(<Text>, <Start>, <Length>) MID(Client[Email], 2, 5) pour extraire une partie de l’email
Trouver la position d’une sous-chaîne SEARCH(<SubText>, <Text>, <Start>, <NotFound>) SEARCH(“@”, Client[Email], 1, -1) pour trouver la position du symbole @ dans un email
Enlever les espaces superflus TRIM(<TextColumn>) TRIM(Client[Commentaire]) pour enlever les espaces superflus
Vérifier si un texte contient une sous-chaîne CONTAINSSTRING(<TextColumn>, <SubText>) CONTAINSSTRING(Client[Commentaire], “urgent”) pour vérifier si ‘urgent’ est dans un commentaire
Concaténer des valeurs avec un séparateur CONCATENATEX(<Table>, <Expression>, <Delimiter>) CONCATENATEX(Clients, Clients[Nom], “, “) pour créer une liste de noms séparés par une virgule
Formater une valeur FORMAT(<Value>, <FormatString>) FORMAT(Ventes[DateVente], “DD/MM/YYYY”) pour formater les dates de vente

 

Fonctions Dates et Temps en DAX

Problème Traité Expression DAX Exemple
Créer une séquence de dates CALENDAR(<StartDate>, <EndDate>) CALENDAR(“2024-01-01”, “2024-12-31”) pour un calendrier 2024
Convertir année, mois, jour en date DATE(<Year>, <Month>, <Day>) DATE(2024, 12, 31) pour le 31/12/2024
Calculer l’année en cours YEAR(TODAY()) Donne l’année actuelle, ex. 2024
Trouver le premier jour du mois STARTOFMONTH(<DateColumn>) STARTOFMONTH(Ventes[DateVente]) pour le 1er jour du mois
Calculer l’âge à partir de la date de naissance DATEDIFF(<BirthDateColumn>, TODAY(), YEAR) DATEDIFF(Clients[DateNaissance], TODAY(), YEAR) pour l’âge des clients
Obtenir le numéro de la semaine WEEKNUM(<DateColumn>) WEEKNUM(Ventes[DateVente]) pour la semaine de chaque vente
Extraire le mois d’une date MONTH(<DateColumn>) MONTH(Ventes[DateVente]) pour le mois de chaque vente
Convertir une chaîne en date DATEVALUE(<DateString>) DATEVALUE(“2024-12-31”) pour la conversion en date
Trouver le dernier jour du mois EOMONTH(<DateColumn>, <MonthsOffset>) EOMONTH(Ventes[DateVente], 0) pour le dernier jour du mois
Ajouter un nombre de mois à une date EDATE(<DateColumn>, <MonthsOffset>) EDATE(Ventes[DateVente], 3) pour ajouter 3 mois à la date
Obtenir la date actuelle TODAY() TODAY() pour la date du jour
Extraire le trimestre d’une date QUARTER(<DateColumn>)

Contexte de Calcul et Filtres en DAX

Problème Traité Expression DAX Exemple
Modifier le contexte de filtre pour un calcul CALCULATE(<Expression>, <Filter>) CALCULATE(SUM(Ventes[Montant]), Clients[Region] = “Paris”) pour les ventes à Paris
Obtenir une table filtrée FILTER(<TableOrColumn>, <Filter>) FILTER(ALL(Clients), Clients[Region] = « Paris ») pour la table des Clients à Paris
Ignorer les filtres appliqués sur une table ALL(<TableOrColumn>) CALCULATE(SUM(Ventes[Montant]), ALL(Clients)) pour le total des ventes sans filtre sur Clients
Conserver certains filtres tout en en ignorant d’autres ALLEXCEPT(<Table>, <Column>) CALCULATE(SUM(Ventes[Montant]), ALLEXCEPT(Clients, Clients[Region])) pour les ventes par région
Appliquer un contexte de filtre avec les sélections actuelles ALLSELECTED(<TableOrColumn>) CALCULATE(SUM(Ventes[Montant]), ALLSELECTED(Clients[Region])) pour les ventes des régions sélectionnées
Supprimer tous les filtres d’une table ou colonne REMOVEFILTERS(<TableOrColumn>) CALCULATE(SUM(Ventes[Montant]), REMOVEFILTERS(Clients)) pour les ventes totales sans filtre Clients

 

Fonctions Itératives en DAX

Problème Traité Expression DAX Exemple
Somme personnalisée sur une table SUMX(Table, Expression) SUMX(Ventes, Ventes[Quantité] * Ventes[PrixUnitaire]) pour le total des ventes
Moyenne personnalisée sur une table AVERAGEX(Table, Expression) AVERAGEX(Ventes, Ventes[Montant]) pour la moyenne des montants de vente
Minimum personnalisé sur une table MINX(Table, Expression) MINX(Ventes, Ventes[Montant]) pour trouver le montant de vente le plus bas
Maximum personnalisé sur une table MAXX(Table, Expression) MAXX(Ventes, Ventes[Montant]) pour le montant de vente le plus élevé
Compter avec condition COUNTX(Table, Expression) COUNTX(Ventes, IF(Ventes[Montant] > 1000, 1, BLANK())) pour compter les ventes supérieures à 1000 €

Fonctions de Time Intelligence en DAX

Problème Traité Expression DAX Exemple
Comparer avec la période correspondante de l’année précédente SAMEPERIODLASTYEAR(<DateColumn>) CALCULATE(SUM(Ventes[Montant]), SAMEPERIODLASTYEAR(DimDate[Date]))
Obtenir une période de 3 mois DATESINPERIOD(<DateColumn>, -3, MONTH)) CALCULATE (
AVERAGEX (
VALUES ( D_Date[Mois] ),
[Sales Amount]
),
DATESINPERIOD ( D_Date[Date], MAX ( D_Date[Date] ), – 3, MONTH )
)pour la moyenne mobile  à 3 mois
Obtenir la date du dernier jour de l’année en cours ENDOFYEAR(<DateColumn>) ENDOFYEAR(Ventes[DateVente])
Calculer le total depuis le début de l’année TOTALYTD(<Expression>, <DateColumn>) TOTALYTD(SUM(Ventes[Montant]), DimDate[Date])
Calculer le total depuis le début du mois TOTALMTD(<Expression>, <DateColumn>) TOTALMTD(SUM(Ventes[Montant]), DimDate[Date])
Calculer le total depuis le début du trimestre TOTALQTD(<Expression>, <DateColumn>) TOTALQTD(SUM(Ventes[Montant]), DimDate[Date])
Calculer les ventes de l’année précédente DATEADD(<DateColumn>, <NumberOfIntervals>, <Interval>) CALCULATE(SUM(Ventes[Montant]), DATEADD(DimDate[Date], -1, YEAR)) pour les ventes de l’année précédente
Calculer les ventes pour une période spécifique DATESBETWEEN(<DateColumn>, <StartDate>, <EndDate>) CALCULATE(SUM(Ventes[Montant]), DATESBETWEEN(DimDate[Date], “2023-01-01”, “2023-12-31”)) pour les ventes de 2023
Calculer les ventes du dernier mois complet PREVIOUSMONTH(<DateColumn>) CALCULATE(SUM(Ventes[Montant]), PREVIOUSMONTH(DimDate[Date])) pour les ventes du mois précédent
Calculer les ventes du dernier trimestre complet PREVIOUSQUARTER(<DateColumn>) CALCULATE(SUM(Ventes[Montant]), PREVIOUSQUARTER(DimDate[Date])) pour les ventes du trimestre précédent

Fonctions de manipulation des tables en DAX

Problème Traité Expression DAX Exemple
Créer un résumé de table SUMMARIZE(Table, GroupBy_ColumnName, …) SUMMARIZE(Ventes, Ventes[Produit], “TotalVentes”, SUM(Ventes[Montant])) pour obtenir une table des ventes par produits
Retirer les doublons d’une table DISTINCT(Table) DISTINCT(Clients[Region])
Ajouter des colonnes calculées ADDCOLUMNS(Table, “NewColumn”, Expression) ADDCOLUMNS(Produits, “PrixTTC”, Produits[PrixHT]*1.2)
Sélectionner des colonnes calculées SELECTCOLUMNS(Table, “NewColumn”, Expression) SELECTCOLUMNS(Clients, “ClientID”, Clients[ID], “Age”, YEAR(NOW()) – Clients[AnnéeNaissance])
Grouper une table GROUPBY(Table, GroupBy_ColumnName, …) GROUPBY(Ventes, Ventes[Produit], “TotalVentes”, SUMX(CURRENTGROUP(), Ventes[Montant])) pour regrouper les ventes par produit
Trouver les lignes communes INTERSECT(Table1, Table2) INTERSECT(ClientsActuels, ClientsPotentiels)
Joindre deux tables NATURALINNERJOIN(Table1, Table2) NATURALINNERJOIN(Ventes, Stock)
Joindre avec préservation des lignes NATURALLEFTOUTERJOIN(Table1, Table2) NATURALLEFTOUTERJOIN(Clients, Commandes)
Combiner les lignes de tables UNION(Table1, Table2, …) UNION(TousClients, NouveauxClients)

 

Fonctions de relations en DAX

Problème Traité Expression DAX Exemple
Relier des tables (1 vers plusieurs) RELATED(<ColumnName>) RELATED(Clients[Nom]) : Renvoie la valeur du côté ‘1’ de la relation (ici, nom du client).
Accéder à une table liée (plusieurs vers 1) RELATEDTABLE(<Table>) RELATEDTABLE(Clients) : Renvoie une table du côté ‘plusieurs’ de la relation (données liées Clients).
Utiliser une relation spécifique entre les tables USERELATIONSHIP(<Column1>, <Column2>) CALCULATE(SUM(Ventes[Montant]), USERELATIONSHIP(Ventes[ClientID], Clients[ID])) : Utilise une relation spécifique pour calcul.
Modifier le comportement de filtrage entre les tables CROSSFILTER(<ColumnName1>, <ColumnName2>, <Mode>) CALCULATE(SUM(Ventes[Montant]), CROSSFILTER(Ventes[ClientID], Clients[ID], “None”)) : Désactive la relation entre les tables Ventes et Clients.
Créer une relation virtuelle entre tables TREATAS(<Table1>, <Table2>) CALCULATE(SUM(Ventes[Montant]), TREATAS(VALUES(Clients[Region]), Ventes[Region])) : Applique les filtres de ‘Clients’ à ‘Ventes’.
Rechercher une valeur en fonction de critères LOOKUPVALUE(<ResultColumn>, <SearchColumn>, <SearchValue>) LOOKUPVALUE(Clients[Nom], Clients[ID], Ventes[ClientID]) : Trouve le nom du client correspondant à l’ID dans ‘Ventes’.

Fonctions d’information en DAX

Problème Traité Expression DAX Exemple
Vérifier si une valeur est numérique ISNUMBER(<Value>) ISNUMBER(Ventes[Quantité]) pour vérifier si ‘Quantité’ est numérique
Vérifier si une valeur est une erreur ISERROR(<Value>) ISERROR(DIVIDE(Ventes[Montant], 0)) pour vérifier la division par zéro
Obtenir le nom d’une colonne SELECTEDVALUE(<ColumnName>) SELECTEDVALUE(Ventes[Produit]) pour obtenir le produit sélectionné
Vérifier si un contexte de filtre est appliqué HASONEVALUE(<ColumnName>) HASONEVALUE(Clients[Region]) pour vérifier si une seule région est sélectionnée
Retourner l’identifiant principal de l’utilisateur USERPRINCIPALNAME() USERPRINCIPALNAME() pour obtenir l’identifiant principal de l’utilisateur actuel
Vérifier si un filtre spécifique est appliqué HASONEFILTER(<ColumnName>) HASONEFILTER(Ventes[Catégorie]) pour vérifier si une seule catégorie est filtrée
Vérifier si le résultat d’une expression est vide ISBLANK(<Expression>) ISBLANK(SUM(Ventes[Remise])) pour vérifier si le total des remises est vide
Vérifier si un filtre est appliqué sur une colonne ISFILTERED(<ColumnName>) ISFILTERED(Clients[Region]) pour vérifier si un filtre est appliqué sur ‘Region’
Vérifier si un croisement de filtres est appliqué ISCROSSFILTERED(<TableName>, <ColumnName>) ISCROSSFILTERED(Ventes, Ventes[Produit]) pour vérifier si un croisement de filtres est appliqué sur ‘Produit’

Fonction de Fenêtrage en DAX

Problème Traité Expression DAX Exemple
Récupérer une ligne à une position absolue INDEX(<Position> [, <Arguments> …]) INDEX(1, Sales) pour obtenir la première ligne de la table Ventes
Déplacer une ligne dans une partition spécifiée OFFSET(<Delta> [, <Arguments> …]) OFFSET(1, Sales) pour déplacer d’une ligne dans la table Ventes
Récupérer une plage de lignes dans une partition WINDOW(<From>, <To> [, <Arguments> …]) WINDOW(1, 10, Sales) pour obtenir une plage de dix lignes à partir de la première ligne de Ventes
Partitionner les données pour le fenêtrage PARTITIONBY(<ColumnName> [, <ColumnName>]) PARTITIONBY(Sales[Region]) pour partitionner les données par région dans la table Ventes
Ordonner les données dans chaque partition ORDERBY(<Expression> [, <Order> …]) ORDERBY(Sales[Date], ASC, Sales[Amount], DESC) pour trier par date croissante et montant décroissant

Nouvelles fonctions INFO en DAX

Les fonctions INFO en DAX offrent un accès direct à des informations détaillées sur les modèles de données Power BI.

Elles permettent une exploration approfondie et facilitent la documentation des modèles, en donnant des informations sur les tables, les colonnes et les mesures. Ces fonctions ne sont pas destinées à être utilisées dans des tables calculées ou des mesures mais sont précieuses pour interroger et comprendre les métadonnées d’un modèle dans Power BI.

Pour plus d’informations, consultez l’article complet sur le blog de Power BI​​.

 

Télécharger mon Anti-sèche des fonctions DAX en PDF

Cliquez ici pour télécharger la fiche

 

Conclusion

Continuez à explorer le langage DAX, à créer et à pratiquer avec Power BI, car le monde des données n’a pas de limites ! 🌐

Expérimentez ces fonctions dans vos propres rapports Power BI ou contactez-moi pour une expertise approfondie et des conseils personnalisés.

👉 Cliquez ici pour accéder à la formation complète pour maîtriser Power BI

Souscrivez à ma newsletter :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *