SQL 2005 Reporting Services,如果检查为null

时间:2009-05-07 17:20:02

标签: sql-server-2005 reporting-services reportingservices-2005

在SSRS 2005中,我有一个表格,其中包含与之相关的数据集。 我想检查一个字段的值是否为null,如果它不是null,则格式化数据以确保它有一个小数位并添加%符号等。

这是我在字段/列上的表达式:

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

当数据为空时似乎不起作用(如果有数据,它可以正常工作)。报告显示,但该字段显示为#ERROR。

我认为它检查两个案例是否有效,即使它是null。我正在尝试使用if语句来避免形成null。

5 个答案:

答案 0 :(得分:4)

使用Visual Basic评估SSRS表达式,Visual Basic通常对表达式中的所有操作数进行完整(即非短路)评估,例如:在IIf(cond,truexp,falsexp)中,除了cond之外,还会评估truexp和falsexp,并且无论cond的值如何都可以抛出。

由于VB.NET 2.0中似乎没有合并功能,您可能需要在报告的“代码”部分添加一个,例如:从Oracle返回的Decimal

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

也可以定义通用函数,例如Coalesce(Of TResult)。

答案 1 :(得分:3)

在查询数据集时,我会尝试使用ISNULL(fieldname,0)。

如果要连接到没有ISNULL运算符的数据源(即Oracle),请尝试使用COALESCE(fieldname,0),iSeries,oracle和sql都支持。

答案 2 :(得分:2)

尝试使用IsDBNull

答案 3 :(得分:1)

您可以在SQL查询中检查null,而不是在报告级别检查。与IsNull(fieldname,0)一样,只需格式化%。当然,您的数据来自SQL Server。

答案 4 :(得分:0)

当我遇到这个问题时,我使用了一个switch语句,它按照写入的顺序评估条件,并且在我看来是同时评估iif语句的两侧。

伊恩