sql - SSRS - 如何使 IIF 语句忽略无效值

标签 sql reporting-services ssrs-2008 conditional iif

我正在使用 Business Intelligence 2008 在 SSRS 中创建一个表。我有一个日期,作为字符串,作为表中使用的值之一。这个值可能有一个代表日期的字符串,或者它也可以是空白的。如果它有一个值,我希望以不同的方式格式化该值。现在,我对显示它的单元格有这个表达式:

=IIf(Fields!MyDate.Value = Nothing, "", Format(CDate(Fields!MyDate.Value), "dd-MM-yyyy"))

如果该字段有值,这将非常有效。但是,当字段为空时,单元格将填充 #Error。如果我只有 Format 函数,这是有意义的,但似乎 IIf 应该阻止它尝试使用空白值运行它。我用这个表达式测试了它:

=IIf(Fields!MyDate.Value = Nothing, "No value", "Value")

...果然空白值输入了语句的正确部分并打印出“No Value”。我不明白为什么未使用表达式的第二部分会导致错误。有没有办法重写这个不会导致错误?谢谢

编辑:正如我在评论中提到的,我也尝试过这样的 switch 语句:

=Switch(Fields!MyDate.Value = Nothing, "", Fields!MyDate.Value <> Nothing, Format(CDate(Fields.MyDate.Value), "dd-MM-yyyy"))

但是,对于空值,这也会返回 #Error

关于可能重复的编辑:请不要将此标记为询问 IIf 是否短路的问题的重复。我在那里看了看,它问了一个不同的问题,但没有给出适合我需要的答案。

最佳答案

问题是 Iif 没有短路。一个丑陋的解决方法是使用嵌套的 Iif:

=IIf(Fields!MyDate.Value = Nothing, "", _
    Format(CDate(Iif(Fields!MyDate.Value = Nothing, Today(),Fields!MyDate.Value)), "dd-MM-yyyy"))

这是丑陋的、重复的和容易出错的。

另一种选择是创建一个短路的自定义函数:

Public Function FormatOrBlank (ByVal theDate As DateTime, ByVal format As String)
If String.IsNullOrWhiteSpace(theDate) 
  Return ""
Else
  Return Format(CDate(theDate)), format)
End If
End Function 

关于sql - SSRS - 如何使 IIF 语句忽略无效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37283287/

相关文章:

sql-server - 根据输入的年份 SQL Server 和 SSRS 计算财政年度的开始和结束日期

reporting-services - 在 SSRS 中读取 XML

mysql - 计算联合中的不同列并显示在同一行中

reporting-services - 颜色图表条取决于类别组值

php - 这个查询有什么问题?

ssrs-2008 - SSRS 2008R2 中的全文对齐

reporting-services - 如何在 SSRS Report Builder 中按日期范围分组?

reporting-services - SSRS 2008 是否应该与数据库位于不同的计算机上?

mysql - MySQL AVG()函数返回错误值

sql - 在 SQL Server 2008 R2 中从多个值(列)获取多行