sql - rsserverconfigurationerror - no se puede establecer conexion con el servidor de informes
dividir por cero/solución alternativa nula en el informe de SSRS 2008 (4)
No creo que tu error esté en el cálculo. En primer lugar, SSRS se ocupa automáticamente de esta situación. Ver mi tercera columna Y el cuarto muestra tu expresión:
Tu problema probablemente sea en otro lado
Tengo un informe con un campo cuyo valor era la expresión:
Fields!TotalPrice.Value/Fields!TotalSlots.Value
Aunque a veces TotalSlots estaba en blanco y por lo tanto estaba obteniendo un error de división por cero en tiempo de ejecución. Así que cambié la expresión a esto:
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
pero aún recibo una división por error cero. ¿Cómo puedo solucionar este problema del divisor cero?
La respuesta de Jamie F es correcta. Como consejo, puede agregar una función a su código de informe para hacer que la división sea un poco más fácil de implementar en múltiples celdas, por ejemplo
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
A continuación, puede llamar esto en una celda como esta:
=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
Esto solo parece suceder cuando la división es uno de los resultados de un IIF, no solo si se escribe una fórmula para dividir uno por el otro, por ejemplo
=IIF(thing=1,10/0,0)
Antes de que haya evaluado algo, ya ha intentado calcular ambos resultados, causando un error. No puede usar IIF de esta manera para proteger de cero, tiene que poner el IIF en la línea inferior de la división, por ej.
=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)
Esto no es satisfactorio, ya que hemos introducido un extraño número pequeño que no es cero como resultado, pero puede estar bien si solo quiere un error.
Técnicamente, el #error es la respuesta correcta.
El VB IIF evalúa todos los argumentos , por lo que lanzará un error si algún argumento arroja un error:
Su fórmula se puede escribir como:
=IIF(Fields!TotalSlots.Value > 0,
Fields!TotalPrice.Value /
IIF(Fields!TotalSlots.Value > 0,
Fields!TotalSlots.Value,
1 ),
"unknown")
Entonces, incluso cuando TotalSlots sea cero, la fórmula aún no encontrará un problema de división.