top of page
Rechercher

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 )   = 1


Exemple : 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.


DIVIDE ou l'opérateur / ? comment choisir

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.

 
 
bottom of page