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

Sql SSRS-如何使IIF语句忽略无效值,sql,reporting-services,ssrs-2008,conditional,iif,Sql,Reporting Services,Ssrs 2008,Conditional,Iif,我正在用商业智能2008在SSRS中创建一个表。我有一个日期,作为字符串,作为表中使用的值之一。此值可能包含表示日期的字符串,也可能为空。如果它有一个值,我希望以不同的方式格式化该值。现在,对于显示它的单元格,我有一个表达式: =IIf(Fields!MyDate.Value = Nothing, "", Format(CDate(Fields!MyDate.Value), "dd-MM-yyyy")) 如果该字段具有值,则此操作非常有效。但是,当字段为空时,单元格将填充#Error。如果我只

我正在用商业智能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"))
=Switch(Fields!MyDate.Value=Nothing,”,Fields!MyDate.Value Nothing,格式(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 

您是否尝试过使用
IsNothing
函数?:
IIf(IsNothing(Fields!MyDate.Value),“No Value”,“Value”)
您是否尝试过只设置字段的格式字符串而不使用
IIf
?@Lamak问题是IIf不会短路,所以在计算第二个选项时会出错。D Stanley可能会重复,感谢我没有意识到它会这样做,在这种情况下,我需要的是一种方法,让它仅在有效值时运行Format语句,否则跳过它。杰米F,那不是;我不是问它是否这样做,我是问如何使它避免运行无效的命令。我忘了提到(我也将在上面添加),我还尝试了switch语句,这也返回了一个错误