2012-05-03 69 views
13

que tiene un informe con un campo cuyo valor era la expresión:dividir por/solución nula cero en SSRS informe de 2008

Fields!TotalPrice.Value/Fields!TotalSlots.Value 

Aunque a veces TotalSlots estaba en blanco y por lo tanto yo estaba recibiendo una división por error de ejecución cero. Así que cambié la expresión a esto:

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

pero sigo recibiendo un error de división por cero. ¿Cómo puedo solucionar este problema del divisor cero?

Respuesta

15

La VB IIF evaluates all arguments, lo que generará un error si cualquier argumento genera 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 es cero, la fórmula aún ganó te encuentras con un problema de división

+1

Puede que no se aplique aquí, pero ¿qué pasa con los casos donde el divisor puede ser negativo? – Homer

+2

Reemplace ambas ocurrencias de '> 0' con' <> 0' y debería estar bien para los divisores negativos. –

1

No creo que su error esté en el cálculo. En primer lugar, SSRS se ocupa automáticamente de esta situación. Ver mi tercera columna Y la cuarta muestra su expresión:

enter image description here

Su problema es probablemente en otro lugar

23

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 varias celdas, p.

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 a esto en una celda de este modo:

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

Recibo un error "Valor de retorno del compilador nativo Función" Divider "no devuelve ningún valor en todas las rutas de código, podría producirse una excepción de referencia nula en tiempo de ejecución cuando se usa el resultado" Se agradece cualquier ayuda. Pensé que fuera, tuve que ingresar mis propios caracteres de retorno después de hacer frente y pegar el código en SSRS. Si alguien está teniendo el mismo problema simplemente asegúrese de que el código se ve exactamente como en la ventana de expresión. – BilliD

1

Esto sólo parece que sucede cuando la división es uno de los resultados de un IIF, no si lo que acaba de escribir una fórmula para dividir uno por el otro, por ejemplo

=IIF(thing=1,10/0,0) 

Antes de que se ha evaluado cosa, ya se ha intentado calcular ambos resultados, causando un error. No puede usar IIF de esta manera para proteger de cero, debe colocar el IIF en la línea inferior de la división, p.

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

Esto no es satisfactoria, ya que hemos introcudes un extraño pequeño número distinto de cero como el resultado, pero puede estar bien si lo que desea es un no-error.

Técnicamente, el #error es la respuesta correcta.

+0

Acabo de hacerlo 1 si 0 luego dejo el IIF principal reemplazó todo con 0, pero esto me puso en camino, aunque iba a ser algo así como lo que sucedía bajo el capó. – workabyte

Cuestiones relacionadas