una servidor services puede origen instancia informes establecer error encontro datos crear conexión conexion conectar con ala sql-server-2005 reporting-services reportingservices-2005

sql-server-2005 - servidor - no se puede crear una conexión al origen de datos reporting services



SQL 2005 Reporting Services si la comprobación es nula (5)

Intenta usar IsDBNull

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.

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

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

Aunque parece que no funciona 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.


Puede verificar 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.


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.


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, por ejemplo, en IIf (cond, truexp, falsexp), además de cond, se evalúan tanto truexp como falsexp. puede lanzar 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, por ejemplo, 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 sería posible definir una función genérica, por ejemplo, Coalesce (Of TResult).


Cuando tuve este problema usé 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