2012-05-03 3 views
13

J'ai un rapport avec un champ dont la valeur était l'expression:division par zéro/solution nulle dans le rapport SSRS 2008

Fields!TotalPrice.Value/Fields!TotalSlots.Value 

Bien que je fusse TotalSlots était vide et parfois obtenant ainsi une division par zéro erreur d'exécution. Donc j'ai changé l'expression à ceci:

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown") 

mais je reçois toujours une erreur de division par zéro. Comment est-ce que je travaille autour de ce problème zéro diviseur.

Répondre

15

Le VB IIF evaluates all arguments, il renvoie une erreur si un argument renvoie une erreur:

Votre formule s'écrit:

=IIF(Fields!TotalSlots.Value > 0, 
    Fields!TotalPrice.Value/
    IIF(Fields!TotalSlots.Value > 0, 
     Fields!TotalSlots.Value, 
     1), 
    "unknown") 

Ensuite, même lorsque TotalSlots est égal à zéro, la formule est toujours gagnante. 't rencontrer un problème de division.

+1

Cela peut ne pas s'appliquer ici, mais qu'en est-il des cas où le diviseur peut être négatif? – Homer

+2

Remplacez les deux occurrences de '> 0' par' <> 0' et vous devriez être bien pour les diviseurs négatifs. –

1

Je ne pense pas que votre erreur soit sur le calcul. Tout d'abord, SSRS traite automatiquement cette situation. Voir ma troisième colonne. Et la quatrième montre votre expression:

enter image description here

Votre problème est probablement un autre endroit

23

La réponse de Jamie F est correcte. Comme astuce, vous pouvez ajouter une fonction à votre code de rapport pour rendre la division un peu plus facile à implémenter dans plusieurs cellules, par ex.

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double) 
If IsNothing(Divisor) Or Divisor = 0 
    Return 0 
Else 
    Return Dividend/Divisor 
End If 
End Function 

Vous pouvez ensuite appeler cela dans une cellule comme ceci:

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value) 
+0

Je reçois une erreur "Valeur de retour du compilateur natif" Divider "ne renvoie pas de valeur sur tous les chemins de code, une exception de référence NULL peut survenir lors de l'exécution lorsque le résultat est utilisé" Toute aide est appréciée. out, je devais entrer mes propres caractères de retour après avoir copié et collé le code dans SSRS Si quelqu'un a ce même problème, assurez-vous que le code ressemble exactement au-dessus dans votre fenêtre d'expression – BilliD

1

Cela ne semble se produit lorsque la division est l'un des résultats d'une IIF, pas si vous écrivez juste une formule diviser l'un par l'autre, par exemple Avant d'avoir évalué quelque chose, il a déjà tenté de calculer les deux résultats, ce qui provoque une erreur. Vous ne pouvez pas utiliser IIF de cette manière pour protéger de zéro, vous devez placer le IIF sur la ligne inférieure de la division, par ex.

=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0) 

est pas satisfaisant Ce, puisque nous avons introcudes un étrange petit nombre non nul que le résultat, mais il peut être ok si vous voulez juste un non-erreur. Techniquement, l'erreur #error est la bonne réponse.

+0

je viens de faire 1 si 0 puis laisser le IIF principal a remplacé le tout avec 0, mais cela m'a permis de suivre le mouvement, même si cela allait se passer sous le capot. – workabyte

Questions connexes