【问题标题】:SQL 2005 Reporting Services if check for nullSQL 2005 Reporting Services 如果检查 null
【发布时间】:2009-05-07 17:20:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    SSRS 表达式使用 Visual Basic 求值,它通常对表达式中的所有操作数进行完整(即不是短路)求值,例如在 IIf(cond, truexp, falsexp) 中,除了 cond 之外,trueexp 和 falsexp 都会被计算,并且无论 cond 的值如何都可能抛出。

    由于 VB.NET 2.0 中似乎没有合并功能,您可能希望在报告的代码部分添加一个,例如从 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
    

    也可以定义一个通用函数,例如合并(TResult)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,我在谷歌上搜索什么可以在 Oracle 中工作,但找不到。
      【解决方案3】:

      尝试使用 IsDBNull

      【讨论】:

      • 不幸的是,它似乎没有什么不同。即使我这样做: =iif(True, "Hello World" , Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%") 它似乎无论如何它仍然测试出虚假案例。如果有数据则显示 Hello World,如果没有则显示#ERROR。
      【解决方案4】:

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

      【讨论】:

      • 谢谢 我认为这是正确的想法,但我实际上并没有使用 SQL Server 作为数据源。我会提到这一点,但我没有想到在我的 SQL 查询中修复它。
      【解决方案5】:

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

      伊恩

      【讨论】:

      • 我的错,在 ssrs 中我刚刚做了一些进一步的测试,似乎所有语句也都被评估了,因此给出了错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多