在SSRS 2005中,我有一个表格,其中包含与之相关的数据集。 我想检查一个字段的值是否为null,如果它不是null,则格式化数据以确保它有一个小数位并添加%符号等。
这是我在字段/列上的表达式:
=iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%")
当数据为空时似乎不起作用(如果有数据,它可以正常工作)。报告显示,但该字段显示为#ERROR。
我认为它检查两个案例是否有效,即使它是null。我正在尝试使用if语句来避免形成null。
答案 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语句的两侧。
伊恩