Fonction IF DAX : écrire une condition dans Power BI
IF est la fonction DAX qui pose une condition dans Power BI.
Elle teste une expression, puis renvoie une valeur si le test est vrai.
Elle en renvoie une autre si le test est faux.
C'est la traduction directe du SI d'Excel.
Prenons trois commerciaux et un objectif mensuel de 1 000 €.
Dupont : 1 200 €
Martin : 800 €
Durand : 1 500 €
La colonne calculée suivante attribue un statut à chaque ligne.
Statut = IF ( Ventes[Montant] >= 1000, "Atteint", "Non atteint" )Statut = SI le montant des ventes est supérieur ou égal à 1 000, alors "Atteint", sinon "Non atteint".
Le résultat, valeur par valeur :
Dupont, 1 200 € → Atteint
Martin, 800 € → Non atteint
Durand, 1 500 € → Atteint
La condition est lue ligne par ligne et chaque ligne reçoit son propre résultat.
À quoi sert la fonction IF en DAX
IF appartient à la famille des fonctions logiques du langage DAX.
Elle sert à classer, à segmenter et à déclencher un calcul sous condition.
Trois usages reviennent en permanence en entreprise.
Étiqueter une ligne : Actif ou Inactif, Atteint ou Non atteint.
Afficher un texte à la place d'une valeur absente.
Appliquer un calcul différent au-dessus d'un seuil.
La documentation Microsoft, mise à jour le 29 juin 2026, précise son périmètre.
IF fonctionne dans une mesure, une colonne calculée, une table calculée et un calcul visuel.
La syntaxe de la fonction IF
Syntaxe
IF ( <test_logique>, <valeur_si_vrai> [, <valeur_si_faux>] )
L'argument entre crochets est facultatif.
La fonction attend donc trois arguments, dont un seul est optionnel.
test_logique : toute expression qui vaut VRAI ou FAUX.
valeur_si_vrai : la valeur renvoyée quand le test est vrai.
valeur_si_faux : la valeur renvoyée sinon. Cet argument est facultatif.
Les arguments se séparent par une virgule, jamais par un point-virgule.
Le DAX ne suit pas la convention française d'Excel sur ce point.

Le troisième argument est facultatif, mais pas neutre
Omettez-le, et IF renvoie BLANK quand le test est faux.
BLANK n'est ni zéro, ni une chaîne vide.
Statut = IF ( Ventes[Montant] >= 1000, "Atteint" )Martin ne reçoit alors aucune valeur.
Or un visuel masque les lignes sans valeur.
Martin disparaît donc purement et simplement du tableau.
Renseignez toujours le troisième argument quand la ligne doit rester visible.
IF dans une mesure : l'erreur que tout le monde rencontre
Une colonne calculée lit une ligne à la fois. Une mesure, non.
Une mesure travaille sur un groupe de lignes, défini par le visuel.
La formule précédente, copiée telle quelle dans une mesure, échoue.
Statut = IF ( Ventes[Montant] >= 1000, "Atteint", "Non atteint" )Le message « Il est impossible de déterminer une valeur unique »
Power BI renvoie exactement ceci :
« Il est impossible de déterminer une valeur unique pour la colonne 'Montant' de la table 'Ventes'. »
Le moteur ne sait pas quel montant tester, car il y en a plusieurs.
La correction tient en une agrégation.
Statut = IF ( SUM ( Ventes[Montant] ) >= 1000, "Atteint", "Non atteint" )Toute agrégation convient : SUM, AVERAGE, COUNTROWS ou DISTINCTCOUNT.
Le test porte alors sur le total affiché dans le contexte du visuel.
Colonne calculée ou mesure : comment trancher
Une seule question suffit pour choisir.
Le résultat doit-il changer selon les filtres du visuel ?
Non : écrivez une colonne calculée. Le statut d'une ligne reste figé.
Oui : écrivez une mesure. Le statut dépend du total affiché.
Une colonne calculée est stockée dans le modèle et l'alourdit.
Une mesure est calculée à la demande et ne pèse rien.
Le réflexe par défaut est donc la mesure, pas la colonne calculée.

Tester plusieurs conditions dans un seul IF
IF n'accepte qu'un seul test logique.
Combinez plusieurs tests avec les opérateurs && et ||.
Le premier signifie ET, le second signifie OU.
Prime =IF ( SUM ( Ventes[Montant] ) >= 1000 && SUM ( Ventes[Marge] ) >= 200, "Prime", "Pas de prime")AND et OR n'acceptent que deux arguments
Le DAX propose aussi les fonctions AND et OR.
Elles n'acceptent que deux arguments, contrairement à leurs équivalents Excel.
Trois conditions obligent donc à les imbriquer.
AND ( test1, AND ( test2, test3 ) ) -- illisibletest1 && test2 && test3 -- lisibleMicrosoft recommande les opérateurs dès que les conditions dépassent deux.
L'opérateur IN pour tester une liste de valeurs
Comparer une colonne à plusieurs valeurs se fait avec IN.
Zone = IF ( Clients[Region] IN { "Nord", "Est", "Ouest" }, "Prioritaire", "Standard" )La même règle écrite avec deux || donne le même résultat, en plus long.
IF imbriqués : quand basculer sur SWITCH
Trois catégories imposent deux IF. Cinq catégories en imposent quatre.
La formule devient vite illisible et pénible à corriger.
Segment =IF ( [CA] >= 1500, "A", IF ( [CA] >= 1000, "B", "C" ))SWITCH ( TRUE () ) écrit la même logique à plat.
Segment =SWITCH ( TRUE (), [CA] >= 1500, "A", [CA] >= 1000, "B", "C")Microsoft recommande SWITCH dès qu'une formule exige plusieurs IF imbriqués.
Règle simple : deux résultats appellent IF, trois ou plus appellent SWITCH.
Bon à savoir
L'ordre des conditions compte : la première condition vraie l'emporte.
Une condition trop large placée en premier masque toutes les suivantes.
Testez donc du seuil le plus haut vers le plus bas.
Trois pièges de la fonction IF
Le premier piège concerne les valeurs vides.
En DAX, un test d'égalité à zéro attrape aussi les valeurs absentes.
L'écriture [Marge] = 0 vaut donc VRAI pour une marge vide.
Utilisez l'opérateur == ou la fonction ISBLANK pour distinguer les deux cas.
Deux branches de types différents
IF peut renvoyer un type variant si ses deux branches diffèrent.
L’écriture IF ( test, TRUE (), 0 ) renvoie ainsi VRAI ou 0.
La colonne obtenue n'est ni vraiment du texte, ni vraiment un nombre.
Le tri devient incohérent et l'agrégation impossible.
Gardez donc le même type de données dans les deux branches.
Pour un montant absent, préférez BLANK () à la chaîne « Non renseigné ».
Les deux branches ne sont pas toujours évaluées
IF n'évalue en principe que la branche retenue.
La fonction IF.EAGER évalue les deux branches, quelle que soit la condition.
Le résultat reste identique. Le plan d'exécution, lui, change.
Microsoft la documente comme deux variables calculées avant le test.
Elle n'a d'intérêt que sur une mesure lente, mesurée avant et après.
IF, SWITCH, DIVIDE ou IFERROR : lequel choisir
IF n'est pas toujours la bonne réponse.
Deux résultats et un seul test : IF.
Trois catégories ou plus : SWITCH ( TRUE () ).
Une division risquée : DIVIDE, jamais un IF de contrôle.
Une erreur de calcul à intercepter : IFERROR.
Une valeur vide à remplacer : COALESCE.
Microsoft recommande explicitement DIVIDE pour gérer la division par zéro.
Ces fonctions de contrôle peuvent déclencher des analyses supplémentaires du moteur.
Mesurez donc leur coût avant de les généraliser dans un modèle.
Vos mesures conditionnelles renvoient des totaux incohérents ? Échangeons lors d'un rendez-vous offert.
À retenir
IF pose un test et renvoie deux résultats. Dans une mesure, entourez toujours la colonne testée d'une agrégation.



