Supposons un rapport Reporting Services avec l’expression suivante :
=Fields!Prix.Value / Fields!Cout.Value
Cette expression fonctionne correctement, tant que la valeur du champ Cout
n’est pas égale à 0, dans ce cas, on a le message suivant qui s’affiche dans le rapport '#error'
, ceci est du à l’erreur engendrée par la division par zéro.
Si vous voulez voir "N/A"
au lieu de #error
, vous pourriez penser qu’il suffit de créer une expression avec la fonction IIF de type:
=IIf(Fields!Cout.Value = 0, "N/A", Fields!Prix.Value / Fields!Cout.Value)
Mais en mode prévisualisation, vous continuez à voir le message #error
dans votre rapport. Pourquoi? La solution se trouve dans la documentation anglaise de la fonction IIF :
As part of preparing the argument list for the call to IIf, the Visual Basic compiler calls every function in every expression. This means that you cannot rely on a particular function not being called if the other argument is selected by Expression.
La documentation française ne fait aucune mention de ce fonctionnement.
Comment contourner se fonctionnement ?, en empêchant l’évaluation de la division par l’utilisation d’un IIF imbriqué:
=IIf(Fields!Cout.Value = 0, "N/A", Fields!Prix.Value / IIf(Fields!Coout.Value = 0, 1, Fields!Cout.Value))
Le IIF imbriqué est évalué en premier, ainsi la division par 0 est évitée.
Documentation de la fonction IIF
- En anglais : http://msdn2.microsoft.com/en-us/library/27ydhh0d(vs.71).aspx
- En français : http://msdn2.microsoft.com/fr-fr/library/27ydhh0d(VS.80).aspx
Pas de commentaire reçu(s)
Laisser une réponse