Fonction DIVIDE DAX : diviser sans division par zéro
- Groupe Kronoscope
- il y a 3 jours
- 4 min de lecture
En DAX, la fonction DIVIDE effectue une division protégée.
Elle renvoie du vide au lieu d'un résultat aberrant quand le dénominateur vaut zéro.
Exemple :
Table Vendeurs : Marie 8 000 / 10 000, Paul 4 500 / 5 000, Léa 3 000 / 0.
DIVIDE ( Ventes, Objectif ) = 0,80 ; 0,90 ; (vide)
Avec l'opérateur /, cette même ligne afficherait Infini.

Fonction DIVIDE : syntaxe et valeur renvoyée
Syntaxe
DIVIDE ( <numerator>, <denominator> [, <alternateresult>] )
Les trois arguments de DIVIDE
numerator : le nombre à diviser.
denominator : le nombre par lequel diviser.
alternateresult : la valeur renvoyée si la division est impossible.
Les crochets signalent un argument facultatif. Seul le troisième l'est.
Ce troisième argument doit être une constante. Ce point revient plus bas.
Ce que la fonction renvoie
Elle renvoie un nombre décimal, calculé dans le contexte de filtre courant.
Si le dénominateur vaut zéro ou est vide, elle renvoie le troisième argument.
Sans troisième argument, elle renvoie BLANK.
La documentation Microsoft donne trois cas simples.
DIVIDE ( 5, 2 ) = 2,5
DIVIDE ( 5, 0 ) = (vide)
DIVIDE ( 5, 0, 1 ) = 1Exemple : le taux d'atteinte des objectifs
Prenons une table Ventes et une table Objectifs, reliées aux vendeurs.
La question métier est simple : chaque vendeur atteint-il son objectif ?
On part de deux mesures d'agrégation classiques.
CA =
SUM ( Ventes[Montant] )
Objectif =
SUM ( Objectifs[Montant] )Le taux d'atteinte est le rapport des deux.
Taux d'atteinte =
DIVIDE ( [CA], [Objectif] )Posée dans une matrice par vendeur, la mesure suit le visuel.
Chaque cellule recalcule le rapport sur les lignes qui restent.
Un vendeur sans objectif ne casse plus la colonne entière.
Sa ligne reste vide, les autres restent lisibles.
La mesure à copier dans votre modèle
Voici la version générique. Deux éléments seulement sont à adapter.
Taux =
DIVIDE ( [Numerateur], [Denominateur] )Vous voulez afficher un zéro plutôt qu'une cellule vide ? Ajoutez le troisième argument.
Taux =
DIVIDE ( [Numerateur], [Denominateur], 0 )Ne le faites que si la ligne doit rester visible dans le visuel.
Autre usage très fréquent : la part d'un vendeur dans le total.
Part du total =
DIVIDE (
[CA],
CALCULATE ( [CA], REMOVEFILTERS ( Vendeurs ) )
)Le dénominateur ignore le filtre sur les vendeurs. Le numérateur le conserve.
Pour un ratio par client unique, associez la fonction à DISTINCTCOUNT.
Testez DIVIDE sur vos propres données
Pas besoin de fichier d'exercice ni de modifier votre rapport. Trois étapes suffisent.
Ouvrez la vue Requête DAX
Cliquez sur l'icône de la vue Requête DAX, dans le ruban de gauche de Power BI Desktop.
Collez la requête
Copiez le bloc EVALUATE ci-dessous, puis remplacez les noms de vos deux mesures.
Exécutez
Les trois colonnes s'affichent sous l'éditeur, calculées sur vos données réelles.
EVALUATE
ROW (
"Division normale", DIVIDE ( 10, 4 ),
"Denominateur nul", DIVIDE ( 10, 0 ),
"Avec valeur de repli", DIVIDE ( 10, 0, 0 )
)Votre modèle n'est pas modifié : une requête EVALUATE ne crée rien.
Votre résultat est faux ? Les pièges de DIVIDE
Le troisième argument doit être une constante
Microsoft l'écrit noir sur blanc : la valeur de repli est une constante.
Vous ne pouvez donc pas y placer une mesure ni une expression calculée.
Besoin d'un repli dynamique ? Sortez-le de la fonction.
Taux =
VAR Resultat = DIVIDE ( [CA], [Objectif] )
RETURN
IF ( ISBLANK ( Resultat ), [ValeurDeRepli], Resultat )La logique reste lisible, et le repli devient libre.
Mettre zéro fait réapparaître toutes les lignes
Un résultat vide fait disparaître la ligne du visuel. C'est voulu.
Les visuels masquent par défaut les regroupements dont la valeur est vide.
Avec un zéro en repli, chaque vendeur sans objectif occupe de nouveau une ligne.
Microsoft recommande donc de laisser le vide dans les mesures.
L'option Afficher les éléments sans données rétablit l'affichage si vous y tenez.
DIVIDE ou l'opérateur / : lequel choisir
Les deux écritures divisent. Elles ne réagissent pas du tout pareil à un zéro.

Opérateur /
À réserver aux dénominateurs constants. La division ne peut alors pas échouer.
DIVIDE
Dès que le dénominateur est calculé. Elle gère seule le zéro et le vide.
En DAX, une division par zéro ne bloque pas le calcul.
Elle renvoie l'infini, ou NaN quand le numérateur vaut zéro lui aussi.
Ces valeurs se propagent ensuite dans tous les calculs qui suivent.
Côté performance, DIVIDE est mieux optimisée qu'un test IF sur le dénominateur.
Elle reste toutefois plus lente qu'une division native, car elle passe par le moteur de formule.
Les bonnes pratiques Microsoft tranchent ainsi : DIVIDE dès que le zéro est possible.
Questions fréquentes sur DIVIDE
DIVIDE renvoie-t-elle une erreur ?
Non. Elle renvoie du vide ou la valeur de repli. Entourer la mesure d'IFERROR ne sert à rien.
Que se passe-t-il si le dénominateur est vide ?
Le comportement est celui d'un zéro : vide, ou la valeur de repli si vous l'avez fournie.
Peut-on utiliser DIVIDE ailleurs que dans une mesure ?
Oui. Elle fonctionne en colonne calculée, en table calculée et en calcul visuel.
Faut-il toujours écrire DIVIDE plutôt que / ?
Non. Quand le dénominateur est une constante, l'opérateur reste préférable et plus rapide.



