2016-05-17 5 views
0

Business Intelligence 2008でSSRSでテーブルを作成しています。テーブルに使用されている値の1つとして日付を文字列として使用しています。この値には日付を表す文字列が含まれている場合もあれば、空白の場合もあります。値がある場合は、別の方法で値を書式化します。今、私はそれが表示されているセルのためのこの表現を持っています: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") 

...そして案の定、ブランク値が文の正しい一部を入力し、「値なし」のプリント。表現の第2部分(使用されていない部分)がエラーを引き起こす理由はわかりません。エラーを起こさない、これを書き換える方法はありますか?おかげ

EDIT:しかし、これは同様にブランク値のため#Errorを返さ

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

:私はコメントで述べたように、私はまた、このようなswitch文を試してみました。

可能な重複についての編集:IIfの短絡の有無を尋ねる質問にこれを重複して表示しないでください。私はそこを見て、それは別の質問をし、私が必要とするもののために働く答えを与えない。

+0

:!

別のオプションは、ショートしないことをカスタム関数を作成することです"値なし"、 "値") ' – Lamak

+0

' IIF'を使わずにフィールドの書式文字列を設定しようとしましたか? –

+1

@Lamak問題は、IIFが短絡しないため、2番目のオプションを評価する際にエラーが発生することです。 –

答えて

1

問題は、Iifが短絡しないということです。一つの醜い回避策は、ネストされたIifを使用することです、醜いrepetetive、およびエラーが発生しやすい

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

。 、あなたは `IsNothing`機能の代わりに?:`式IIf(IsNothing(フィールドをMyDate.Value)を使用してみました

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

関連する問題