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

时间:2016-05-17 18:00:49

标签: 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")

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

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

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

但是,这也为空值返回了#Error

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

1 个答案:

答案 0 :(得分:3)

问题是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