2009-07-30 16 views
19

Estoy tratando de evaluar un Precio por Kilo ($/Kg) basado en las ventas de un producto. Esto funciona bien si el producto fue vendido efectivamente durante el período especificado. Sin embargo, si el producto no se vende, el Kg (el denominador) termina siendo 0 (cero) y se produce un error. - Divide por cero error.¿La función iif calcula ambas rutas en SSRS o está en cortocircuito?

yo probamos este

=iif(KgSold=0,0,Revenue/KgSold) 

Parece que la función iif está calculando tanto los resultados verdaderos y falsos. ¿Cómo puedo evitar esto?

¿Debo estar utilizando la función switch en su lugar?

=switch(KgSold=0,0 
     KgSold<>0,Revenue/KgSold) 

Respuesta

16

Tienes razón, no cortocircuito. Eso apesta.

Vas a tener que hacer algo como esto:

= Iif(KgSold = 0, 0, Revenue)/Iif(KgSold = 0, 1, KgSold) 

La función de interruptor también debería funcionar.

+0

voy a darle una oportunidad y le hará saber .. Gracias Robert –

+0

. Eso funciona Todavía estoy recibiendo la división por error cero, así que ahora solo es cuestión de buscar el error. –

+0

Encontré el lugar donde estaba ocurriendo el error. estaba en el SQL y no en el informe. –

4

Esto sucede porque en VBScript todas las condiciones dentro de un IIF se evaluarán primero antes de que ocurra cualquier funcionalidad.

+0

Gracias Brian. Supuse que era el caso. Sospecho que es el caso para todos los sabores de VB. –

0

Añadir lo siguiente a su código:

Public Function SafeDiv(byval num as double, byval den as double) as object 

    If den = nothing then return nothing 
    If den = 0 then return nothing 

    return num/den 

End Function 

luego llamar a

=Code.SafeDiv(Revenue,KgSold) 

en el cuadro de texto epression

Cuestiones relacionadas