5

En SSRS 2005 tengo una tabla con un conjunto de datos vinculado a ella. Quiero comprobar si el valor de un campo es nulo y si no es nulo, formatee los datos para asegurarse de que tiene un lugar decimal y agregue un signo% etc.SQL 2005 Reporting Services si se comprueba nulo

Esta es mi expresión en el campo/columna:

=iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%") 

no parece que trabajar, aunque cuando los datos son nulos (funciona bien si hay datos). El informe aparece pero el campo aparece como #ERROR.

Creo que está comprobando si ambos casos son válidos aunque sea nulo. Estoy tratando de usar la declaración if para evitar formatear un nulo.

Respuesta

3

Yo trataría de usar ISNULL (nombre de campo, 0) al consultar su conjunto de datos.

Si se está conectando a una fuente de datos sin un operador ISNULL (es decir, Oracle), intente utilizar COALESCE (nombre de campo, 0), que iSeries, oracle y sql admiten.

+0

Gracias, estaba buscando en Google lo que funcionaría en Oracle, pero no pude encontrarlo. – MaxGeek

+1

Oracle tiene NVL (nombre de columna, 0), que funciona como ISNULL(). – criticalfix

2

Trate de usar IsDBNull

+0

Desafortunadamente, no parece marcar la diferencia. Incluso si hago esto: = iif (Verdadero, "Hola mundo", Formato (CDbl (Recortar (Reemplazar (¡Campos! COL01.Valor, "%", "")))), "N1") + "% ") Parece que no importa lo que todavía prueba el caso falso. Si hay datos, muestra Hello World, pero si no muestra #ERROR. – MaxGeek

1

Se podía comprobar NULL en la consulta SQL en lugar de en el nivel de informe. Al igual que IsNull (nombre de campo, 0), simplemente formatee para el%. Siempre que sus datos sean de SQL Server.

+0

Gracias, creo que esta es la idea correcta, pero en realidad no estoy usando SQL Server como fuente de datos. Lo habría mencionado, pero no pensé en solucionarlo en mi consulta SQL. – MaxGeek

4

Las expresiones de SSRS se evalúan utilizando Visual Basic, que generalmente realiza una evaluación completa (es decir, no un cortocircuito) de todos los operandos en una expresión, p. en IIf (cond, truexp, falsexp), además de cond, se evalúan tanto truexp como falsexp y pueden arrojarse independientemente del valor de cond.

Dado que no parece haber una función coalescente en VB.NET 2.0, es posible que desee agregar una en la sección Código del informe, p. para Decimal como se devuelve desde Oracle

Function Coalesce(fieldValue As Object, defaultValue As Decimal) As Decimal 
    If IsDBNull(fieldValue) OrElse IsNothing(fieldValue) Then 
    Coalesce = defaultValue 
    Else 
    Coalesce = CDec(fieldValue) 
    End If 
End Function 

También se podría definir una función genérica, p. Coalesce (de TResult).

+0

Eso es una buena idea. – MaxGeek

0

Cuando tuve este problema utilicé una declaración de cambio, evalúa las condiciones en el orden en que está escrita, y me parece que me muevo por ambos lados de la declaración de iif que se evalúa al mismo tiempo.

Ian

+0

Mi mal, en ssrs Acabo de hacer algunas pruebas adicionales parece que todas las declaraciones también se evalúan y por lo tanto da error –

Cuestiones relacionadas