Les expressions DAX ou d'analyse de données éduisent tous les calculs que vous pouvez effectuer dans Power BI. Les formules DAX sont polyvalentes, dynamiques et relativement puissantes. Elles vous permettent par exemple de créer de nouveaux champs et tables dans votre modèle. DAX est un langage de formule utilisé dans les modèles Power BI, Power Pivot et aussi SSAS Tabular. Les formules DAX sont composées de 3 composants de base, et ce petit article tutoriel couvrira chacun d'entre eux à savoir :
Syntaxe - La syntaxe DAX appropriée est composée d'une variété d'éléments, dont certains sont communs à toutes les formules.
Fonctions - Les fonctions DAX sont des formules prédéfinies qui prennent certains paramètres et effectuent un calcul spécifique.
Contexte - DAX utilise le contexte pour déterminer quelles lignes doivent être utilisées pour effectuer un calcul.
FONCTIONS DE TEXTE
L'instruction FIND - L'instruction LEFT - L'instruction RIGHT - L'instruction LEN
--> Recherche la position du caractère "Z" dans la cellule et place le résultat dans la colonne 'VERIFICATION_DATA'
VERIFICATION_DATA = Find("Z",CLIENTS_V[NOM_CLIENTS],,0)
--> Recherche la position du caractère "Z" dans la cellule à partir du 3ème caractère. Si pas de caractère "Z", 51 est écrit à la place.
--> Place le résultat dans la colonne 'VERIFICATION_DATA'
VERIFICATION_DATA = Find("Z",CLIENTS_V[NOM_CLIENTS],3,51)
--> Instruction FIND avec la condition IF
VERIFICATION_DATA = IF(Find("Z",CLIENTS_V[NOM_CLIENTS],1,0)=3,10,20)
--> Récupère 3 caractères à partir de la gauche
INITIALES = LEFT(CLIENTS_V[NOM_CLIENTS],3)
--> Récupère 3 caractères à partir de la droite
INITIALES = RIGHT(CLIENTS_V[NOM_CLIENTS],3)
--> Compte le nombre de caractères d'une cellule
NB_CAR = LEN(CLIENTS_V[NOM_CLIENTS])
--> Récupération du nom du dirigeant
NOMS_DIRIGEANTS = RIGHT(CLIENTS_V[DIRIGEANTS],LEN(CLIENTS_V[DIRIGEANTS])-FIND(" ",CLIENTS_V[DIRIGEANTS],1))
--> Récupération du prénom du dirigeant
PRENOMS_DIRIGEANTS = LEFT(CLIENTS_V[DIRIGEANTS],FIND(" ",CLIENTS_V[DIRIGEANTS],1)-1)
FONCTIONS DE GESTION DE TABLE
Fonction DAX les plus utilisées
DISTINCT, VALUES, CROSSJOIN, UNION, NATURALINNERJOIN, NATURALLEFTOUTERJOIN, INTERSECT, CALENDAR, CALENDARAUTO
Fonction CALENDAR
Retourne une table avec une seule colonne nommée « Date » qui contient un ensemble contigu de dates.
CALENDRIER = calendar("01/01/2025","31/12/2025")
Fonction CALENDARAUTO
Retourne une table avec une seule colonne nommée « Date » qui contient un ensemble contigu de dates. Attention !!! Il faut une table qui contient des dates.
Exemple 1 - Création d'une table contenant d'un calendrier automatique
CALENDRIER = CALENDARAUTO()
Exemple 2 - Création d'une table contenant un calendrier avec les colonnes de son choix
TableDate =
ADDCOLUMNS(
CALENDARAUTO(),
"Year", YEAR([Date]),
"MonthNum", MONTH([Date]),
"Month", FORMAT([Date],"mmmm"),
"Day", FORMAT([Date],"dddd"),
"YearMonthNum", YEAR([Date])*100+MONTH([Date]),
"MonthYear", FORMAT([Date], "mmm-yyyy"),
"Quarter", FORMAT([Date], "\Tq")
)
Exemple 3 - Création d'une table contenant les données 1, 2, 3 dans une colonne nommée par défaut (Value) par PowerBi
Ma_Nouvelle_Table = {
1, 2, 3
}
Exemple 4 - Création d'une table contenant les données 1, 2, 3 dans 3 colonnes nommée par défaut (Value) par PowerBi
Ma_Nouvelle_Table = {
(1, 2, 3)
}
Ma_Nouvelle_Table = {
(1, 2, 3), (4, 5, 6)
}
Ma_Nouvelle_Table = {
(1, 2, 3), (4, , 6)
}
Exemple 5 - Création d'une table avec spécifications des différents champs
Ma_Nouvelle_Table = DATATABLE(
"NOMS",STRING,
"PRENOMS",STRING,
"AGE",INTEGER,
"DATE_DE_NAISSANCE", DATETIME,
"MEMBRES",BOOLEAN,
{
{"SALADO", "Benoit", 57,"17/01/1968",True()},
{"MARSALLON", "Laure", 55,"19/01/1971",True()},
{"JOANIQUE", "Corine", 55,"28/05/1981",False()},
{"HARTMAN", "Muriel", 51,blank(),True()},
{"LEFORT", "Patrice", 58,"28/03/1969",True()},
{"JOBS", , 59,"28/03/1958",False()}
}
)
Exemple 6 - Création d'une table récupération des champs d'une autre table
TABLE_SIMPLIFIEE = ALL(VENTES_2025[NOMS COMMERCIAUX],VENTES_2025[QUANTITES COMMANDEES])
Exemple 7 - Création d'une table résumée (unique)
TABLE_SIMPLIFIEE = SUMMARIZE(VENTES_2025,VENTES_2025[VILLES],VENTES_2025[DEPARTEMENTS],VENTES_2025[REGIONS])
Exemple 8 - Création d'une table résumée avec mise en place de la fonction Sum
TABLE_SIMPLIFIEE = SUMMARIZE(VENTES_2025,VENTES_2025[NOMS COMMERCIAUX], "Quantites", SUM(VENTES_2025[QUANTITES COMMANDEES]))
Fonction UNION
Exemple 1 - Union de 2 tables
TABLE_GENERALE = UNION(VENTES_2024,VENTES_2025)
Exemple 2 - Union de 3 tables
TABLE_GENERALE = UNION(VENTES_2024,VENTES_2025,VENTES_2023)
Exemple 3 - Union de 2 tables avec ajout d'une ligne de données
TABLE_GENERALE = UNION(VENTES_2024,VENTES_2025,ROW("NOMS COMMERCIAUX", "Benoit SALADO", "QUANTITES COMMANDEES", "12", "PRIX UNITAIRES", "102,40",
"DATES DE VENTES", "11/06/2023", "VILLES", "BREST", "RESPONSABLE SECTEUR", "Fabrice LECHAT", "REGIONS", "BRETAGNE", "DEPARTEMENTS", "FINISTERE", "CLIENTS",
"MOTO JARDIN"))
FONCTIONS DE DATES & HEURES
Fonction EOMONTH
Permet de calculer les dates d’échéance ou les dates d’échéance qui tombent le dernier jour du mois.
EOMONTH([Date],1),"dd/mm/yyyy"), //Echéance à 30 jours
Fonction DATE
Retourne la date spécifiée au format datetime.
CALENDRIER = ADDCOLUMNS( CALENDAR(DATE(2025,1,1),DATE(2025,12,31)),
"Mois", MONTH([Date]),
"Mois_Lettres", FORMAT([Date],"MMMM")
Fonction DATEDIFF
Retourne le nombre de limites d’intervalle entre deux dates.
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],YEAR)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],MONTH)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],DAY)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],QUARTER)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],WEEK)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],HOUR)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],MINUTE)
CALCUL = DATEDIFF(DONNEES_FACTURATION[DATES_ECHEANCES],DONNEES_FACTURATION[DATES_DE_FACTURATION],SECOND)
Fonction DATEVALUE
Convertit une date sous forme de texte en datetime format.
CALCUL = DATEVALUE(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction DAY
Retourne le jour du mois, un nombre compris entre 1 et 31.
DAY([Date])
Fonction EDATE
Retourne la date indiquée avant ou après la date de début.
CALCUL = EDATE(DONNEES_FACTURATION[DATES_DE_FACTURATION],1)
FONCTION HOUR
Retourne l’heure sous la forme d’un nombre compris entre 0 (12:00 A.M.) et 23 (11:00 P.M.).
CALCUL = HOUR(DONNEES_FACTURATION[DATES_DE_FACTURATION])
FONCTION MINUTE
Retourne la minute sous la forme d’un nombre compris entre 0 et 59, en fonction d’une valeur de date et d’heure.
CALCUL = MINUTE(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction MONTH
Retourne le mois sous la forme d’un nombre compris entre 1 (janvier) et 12 (décembre).
MONTH([Date])
Fonction NETWORKDAYS
Retourne le nombre de jours ouvrés entiers entre deux dates.
NB_JOURS_OUVRES = NETWORKDAYS(DONNEES_FACTURATION[DATES_DE_FACTURATION],DONNEES_FACTURATION[DATES_ECHEANCES]) //Sans jour fèrié défini
NB_JOURS_OUVRES = NETWORKDAYS (DATE( 2026, 5, 1 ), DATE( 2026, 5, 31 ), 1,{ DATE( 2026, 5, 1 ), DATE( 2026, 5, 8 ), DATE( 2026, 5, 14 ), DATE( 2026, 5, 25 ) } ) // Avec jours fèriés définis. La valeur 1 en rouge définit le type de week-end.
1 ou omis : samedi, dimanche
2 : dimanche, lundi
3 : lundi, mardi
4 : mardi, mercredi
5 : mercredi, jeudi
6 : jeudi, vendredi
7 : vendredi, samedi
11 : dimanche uniquement
12 : lundi uniquement
13 : mardi uniquement
14 : mercredi uniquement
15 : jeudi uniquement
16 : vendredi uniquement
17 : samedi uniquement
NB_JOURS_OUVRES = NETWORKDAYS (DATE( 2026, 5, 1 ), DATE( 2026, 5, 31 ), 1,DISTINCT(Feuil1[JOURS_FERIES - 10ANS])) // Avec jours fèriés définis dans une table. La valeur 1 en rouge définit toujours le type de week-end.
Fonction NOW
Retourne la date et l’heure actuelles au format datetime.
CALCUL = NOW()
Fonction QUARTER
Retourne le trimestre sous la forme d’un nombre compris entre 1 et 4.
TRIMESTRE = QUARTER(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction SECOND
Retourne les secondes d’une valeur de temps, sous la forme d’un nombre compris entre 0 et 59.
CALCUL =SECOND(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction TIME
Convertit les heures, les minutes et les secondes données sous forme de nombres en heure au format datetime.
HEURE = TIME(0,750,0) // Renvoi 12h30
HEURE = TIME(12,30,0) // Renvoi 12h30
HEURE = TIME(27,0,0) // Renvoi 3h00
HEURE = TIME(3,0,0) // Renvoi 3h00
Fonction TIMEVALUE
Convertit une heure au format texte en heure au format datetime.
CONVERTION_HEURE= TIMEVALUE("20:45:30")
Fonction TODAY
Retourne la date actuelle.
DATE_DU_JOUR = TODAY()
Fonction UTCNOW
Retourne la date et l’heure UTC actuelles.
HEURE_UTC = UTCNOW()
Fonction UTCTODAY
Retourne la date UTC actuelle.
HEURE_UTC = UTCTODAY()
Fonction WEEKDAY
Retourne un nombre compris entre 1 et 7 identifiant le jour de la semaine d’une date.
NUMERO_DU_JOUR = WEEKDAY(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction WEEKNUM
Retourne le numéro de semaine pour la date et l’année données en fonction de la valeur return_type.
NUMERO_DE_SEMAINE = WEEKNUM(DONNEES_FACTURATION[DATES_DE_FACTURATION])
Fonction YEAR
Retourne l’année d’une date sous la forme d’un entier à quatre chiffres dans la plage 1900-9999.
YEAR([Date])
FONCTIONS DE TEXTE
Fonction COMBINEVALUES
Joint deux chaînes de texte ou plus à une chaîne de texte.
Fonction CONCATENATE
Joint deux chaînes de texte en une seule chaîne de texte.
Fonction CONCATENATEX
Concatène le résultat d’une expression évaluée pour chaque ligne d’une table.
Fonction EXACT
Compare deux chaînes de texte et retourne TRUE si elles sont exactement identiques, FALSE sinon.
Fonction FIND
Retourne la position de départ d’une chaîne de texte dans une autre chaîne de texte.
Fonction FIXED
Arrondit un nombre au nombre spécifié de décimales et retourne le résultat sous forme de texte.
Fonction FORMAT
Convertit une valeur en texte selon le format spécifié.
Fonction LEFT
Retourne le nombre spécifié de caractères à partir du début d’une chaîne de texte.
Fonction LEN
Retourne le nombre de caractères d’une chaîne de texte.
Fonction LOWER
Convertit toutes les lettres d’une chaîne de texte en minuscules.
Fonction MID
Retourne une chaîne de caractères à partir du milieu d’une chaîne de texte, en fonction d’une position de départ et d’une longueur.
Fonction REPLACE
Cette fonction remplace une partie d’une chaîne de texte, en fonction du nombre de caractères que vous spécifiez, par une chaîne de texte différente.
Fonction REPT
Répète le texte un nombre donné de fois.
Fonction RIGHT
Cette fonction retourne le dernier caractère ou les caractères d’une chaîne de texte, en fonction du nombre de caractères que vous spécifiez.
Fonction SEARCH
Renvoie le nombre du caractère auquel une chaîne de texte ou de caractère spécifique est trouvée en premier, en lisant la gauche à droite.
Fonction SUBSTITUTE
Remplace le texte existant par le nouveau texte dans une chaîne de texte.
Fonction TRIM
Supprime tous les espaces du texte, à l’exception des espaces uniques entre les mots.
Fonction UNICHAR
Retourne le caractère Unicode référencé par la valeur numérique.
Fonction UNICODE
Retourne le code numérique correspondant au premier caractère de la chaîne de texte.
Fonction UPPER
Convertit une chaîne de texte en lettres majuscules.
Fonction VALUE
Convertit une chaîne de texte qui représente un nombre en nombre.
L'instruction IF
--> Si le secteur est égale à 1 on écite l'intitulé 'ALIMENTAIRE' dans la colonne 'NOMS_SECTEURS'
NOMS_SECTEURS = IF(CLIENTS_V[SECTEURS]=1,"ALIMENTAIRE","DIVERS")
--> Intégration de plusieurs conditions
TYPE_CLIENTS = IF(CLIENTS_V[SECTEURS]=1,"ALIMENTAIRE",IF(CLIENTS_V[SECTEURS]=2,"AUTOMOBILE",IF(CLIENTS_V[SECTEURS]=9,"BANCAIRE","DIVERS")))
DIVERS
Création d'un calendrier (Création de table)
Exemple 1 - Calendrier simple
CALENDRIER = calendar("01/01/2025","31/12/2025")
Exemple 2 - Calendrier avec untilisation de formats
| CALENDRIER = ADDCOLUMNS( CALENDAR("01/01/2025","31/12/2025"), "Mois", MONTH([Date]), "Mois_Lettres", FORMAT([Date],"MMMM"), "Jour_Lettres", FORMAT([Date],"DDDD"), "Année", FORMAT([Date],"YYYY"), "Numéro_du_jour",WEEKDAY([Date],2), "Autre", WEEKNUM([Date],11), "Trimestre",QUARTER([Date]) ) |
<-- Le calendrier <-- Le numéro du mois <-- Le mois en lettres <-- Le jour en lettres <-- L'année <-- Numéro du jour <-- Numéro de semaine <-- Numéro du trimestre |
| Exemple 3 - Calendrier avec plusieurs fonctions de dates |
CALENDRIER3 = ADDCOLUMNS( CALENDAR("01/01/2025",TODAY()),
"Mois n", MONTH([Date]),
"Mois_Lettres", FORMAT([Date],"MMMM"),
"Jour_Lettres", FORMAT([Date],"DDDD"),
"Dernier jour du mois", FORMAT(EOMONTH([Date],0),"dd/mm/yyyy"), //Du mois de la colonne Date
"Echéance 30", FORMAT(EOMONTH([Date],1),"dd/mm/yyyy"), //Echéance à 30 jours
"Echéance 60", FORMAT(EOMONTH([Date],2),"dd/mm/yyyy"), //Echéance à 60 jours
"Echéance 90", FORMAT(EOMONTH([Date],2),"dd/mm/yyyy") //Echéance à 60 jours
)
Exemple 4 - Calendrier avec utilisation de variables
| // Calendier avec utilisation de variables CALENDRIER = var Date_De_depart = EDATE(TODAY(),-48) //Date du jour moins 48 mois var Date_De_Fin = EDATE(TODAY(),48) //Date du jourplus 48 mois RETURN ADDCOLUMNS( Calendar(Date_De_depart,Date_De_Fin), "Année", Year(Date_De_depart), "Trimestre", "T" & QUARTER(Date_De_depart) ) |