一尘不染

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

sql

我正在使用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")

…并且足够确定空白值输入了语句的正确部分并打印了“无值”。我不明白为什么表达式的第二部分(未使用)会导致错误。有没有办法重写它而不会导致错误?谢谢

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

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

但是,这也返回#Error空白值。

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


阅读 216

收藏
2021-03-08

共1个答案

一尘不染

问题是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
2021-03-08