5

在 SSRS 2005 中,我有一个带有链接到它的数据集的表。我想检查一个字段的值是否为空,如果它不为空,则格式化数据以确保它有一个小数位并添加一个 % 符号等。

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

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

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

我认为它会检查这两种情况是否有效,即使它为空。我正在尝试使用 if 语句来避免形成空值。

4

5 回答 5

4

SSRS 表达式使用 Visual Basic 求值,它通常对表达式中的所有操作数进行完整(即不是短路)求值,例如在 IIf(cond, truexp, falsexp) 中,除了 cond,trueexp 和 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)。

于 2009-06-07T20:06:42.863 回答
3

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

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

于 2009-05-07T18:03:49.973 回答
2

尝试使用 IsDBNull

于 2009-05-07T17:32:13.747 回答
1

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

于 2009-05-07T17:53:34.443 回答
0

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

伊恩

于 2013-06-10T08:34:16.877 回答