【问题标题】:Empty or Null value display in SSRS text boxesSSRS 文本框中显示空值或 Null 值
【发布时间】:2010-08-09 16:56:22
【问题描述】:

使用 SSRS (2008) 处理空值或空值并将其替换为要显示的其他内容的最佳方法是什么。很明显的解决方案是

=IIF(IsNothing(Fields!MyField.Value),"NA",Fields!MyFields.Value)

虽然很乏味,但我希望能在文本框上找到类似 EmptyText 属性的东西,但可惜什么也没有。有任何想法吗?我应该从创建此属性的 TextBox 基础中创建自定义报告项吗?

【问题讨论】:

    标签: ssrs-2008 reporting-services


    【解决方案1】:
    =IIF(ISNOTHING(CStr(Fields!MyFields.Value)) or CStr(Fields!MyFields.Value) = "","-",CStr(Fields!MyFields.Value))
    

    使用这个表达你可能会得到答案。

    这里的 CStr 是处理字符串数据类型的默认函数。

    【讨论】:

      【解决方案2】:

      调用自定义函数?

      http://msdn.microsoft.com/en-us/library/ms155798.aspx

      您总是可以在其中放置一个 case 语句来处理不同类型的“空白”数据。

      【讨论】:

      • 选择这个答案是因为大多数其他人在 sql 中处理 ISNULL 并且这不是 SSRS 特定的解决方案。有效的解决方案,但这里的问题范围仅限于 SSRS。
      【解决方案3】:

      我不同意在服务器端转换它。如果您这样做,它将以字符串类型而不是日期类型的形式返回(例如,它将作为字符串排序)

      我在处理日期时的原则是尽可能长时间地将它们作为日期输入。

      如果您在报表服务器上遇到性能瓶颈,有比破坏您的逻辑更好的方法来处理它。

      【讨论】:

      • 我同意这种做法。从服务器获取数据的结构和类型正确,然后决定如何在报告层中呈现它是有意义的。
      【解决方案4】:

      虽然可能没有比您的解决方案更好,但您可以调整您的 T-SQL 以使用 COALESCE 返回相同的结果:

      SELECT MyField = COALESCE(table.MyField, " NA")
      

      在 NA 之前有额外空间的原因是允许排序将 NA 结果放在顶部。由于您的数据可能会有所不同,因此这可能不是一个好的选择。

      【讨论】:

      • 这并不总是可行的。在MATRIX 的情况下,您可能会遇到PIVOT 场景导致字段中出现“漏洞”,因为您在SQL 中INNER JOINed 和LEFT JOIN 会导致成本损失。
      【解决方案5】:

      我同意在 SQL 端执行替换,但我会使用 ISNULL 函数。

      SELECT ISNULL(table.MyField, "NA") AS MyField
      

      我通常在我们的 SQL 服务器上进行尽可能多的数据处理,并尝试在 SSRS 中进行尽可能少的数据操作。这主要是因为我的 SQL 服务器比我的 SSRS 服务器强大得多。

      【讨论】:

      • 我倾向于使用COALESCE 而不是IsNull,因为我同时使用Oracle 和SQL Server,而COALESCE 两者都可以使用。
      【解决方案6】:

      在 SQL 或报告代码中(根据 adolf garlic 的函数建议)

      此时此刻,我会在报告中这样做。我很少有针对繁忙的 OLTP 服务器和不堪重负的报表服务器的报告。如果我有不同的组合,我会用 SQL 来做。

      任何一种方式都可以接受...

      【讨论】:

        【解决方案7】:

        我无法让IsNothing() 正常工作,我不想在我的dataset 中创建虚拟行(例如,对于给定的客户列表,每个月创建一个虚拟订单)并注意到空值是显示为 -247192。

        你瞧,使用它可以抑制它(至少在 MSFT 从 08R2 开始将 SSRS 更改为更好之前)所以请原谅我,但是:

        =iif(Fields!Sales_Diff.Value = -247192,"",Fields!Sales_Diff.Value)
        

        【讨论】:

        • 以这种方式显示空值的唯一可能原因是,如果您在某处有一个表达式没有正确解释它们并在它们发生时返回了奇怪的结果,在这种情况下,这将是您的问题,而不是微软的。
        【解决方案8】:

        试试这个

        =IIF(IsNothing(Fields!MyField.Value)=TRUE,"NA",Fields!MyFields.Value)
        

        【讨论】:

          【解决方案9】:

          我有类似的情况,但以下对我来说效果最好..

          =Iif(Fields!Sales_Diff.Value)>1,Fields!Sales_Diff.Value),"")
          

          【讨论】:

            猜你喜欢
            • 2014-11-17
            • 2017-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多