2016-05-17 85 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