2016-05-17 62 views
0

我正在使用Business Intelligence 2008在SSRS中创建表。我有一个日期作为字符串作为表中使用的值之一。该值可能有一个表示日期的字符串,或者它也可能为空。如果它有一个值,我想以不同的方式格式化值。现在,我对它显示的单元格有这样的表达式:SSRS - 如何使IIF语句忽略无效值

=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短路。我看了那里,它提出了一个不同的问题,并没有给出我需要的答案。

+0

做你试图用'IsNothing'功能代替?:'IIF(IsNothing(场MyDate.Value) “没有价值”,“价值”)' – Lamak

+0

您是否尝试过只为字段设置格式字符串而不是使用'IIF'? –

+1

@Lamak问题是,IIF不会短路,所以在评估第二个选项时出现错误。 –

回答

1

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

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

这是丑陋的,的repetetive,而且容易出错。

另一种方法是创建一个自定义函数,确实短路:

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 
+0

非常感谢,对我有效 – thnkwthprtls