switch services isnothing funciones example code vba reporting-services switch-statement iif

vba - isnothing - reporting services if null



EvaluaciĆ³n diferida en SSRS (4)

Estoy usando SSRS 2005 para producir un informe, y una de las columnas en mi informe es un cálculo simple. No quiero dividir por cero, así que para el valor del cuadro de texto que he puesto:

=Switch(Fields!Count.Value=0,0,Fields!Count.Value>0,Fields!Sum.Value/Fields!Count.Value)

Esto todavía evalúa la segunda expresión.

Y también lo hace:

=IIF(Fields!Count.Value=0,0,Fields!Sum.Value/Fields!Count.Value)

No quiero que mi informe muestre errores. ¿Cómo puedo superar este problema?


Desafortunadamente, debido a que IIF es en realidad solo una función, todos los argumentos se evalúan antes de que se llame a la función (lo que da como resultado su división por cero).

Una forma de incorporar lógica compleja en una expresión es incrustar una función en el informe. Puede escribir una función VB para devolver lo que quiera en la pestaña Código de las propiedades del informe.

Public Function GetMeanValue(ByVal Sum as Decimal, ByVal Count As Int) As Decimal ''your logic in plain old vb syntax here End Function

En la propiedad de expresión TextBox Text:

=Code.GetMeanValue(Fields!Sum.Value, Fields!Count.Value)


Aquí hay una solución que siempre me ha funcionado: evitar los errores de división por cero .

Se vuelve tedioso si el informe tiene demasiadas divisiones. Prefiero algún código vb para hacer la división y manejar la división por cero. No estoy seguro de si una gran cantidad de código vb reduciría el rendimiento del informe.

Aquí es cómo hacerlo con vb


Al buscar ceros, siempre niego la expresión de esta manera:

=IIF(Fields!Count.Value<>0,Fields!Sum.Value/Fields!Count.Value,0)

Esto tiene el beneficio adicional de evitar la división en caso de que el campo Count esté vacío / nulo.


Prueba esto:

=IIf(Fields!Count.Value = 0, 0, Fields!Sum.Value / IIf(Fields!Count.Value = 0, 1, Fields!Count.Value))