|
我正在使用Business Intelligence
t+ n1 U+ P8 m( g# B2008在SSRS创建一个表。我有一个日期(作为字符串)作为表中使用的值之一。这个值可以包含表示日期的字符串或空白。如果它有一个值,我想用另一种方式格式化它。现在,我对显示它的单元格有以下表达式:
* g1 A, R! V# T; S6 d/ G) D=IIf(Fields!MyDate.Value = Nothing,"",Format(CDate(Fields!MyDate.Value),"dd-MM-yyyy"))如果字段有值,可以完美工作。但是,当字段为空白时,单元格将被填充#Error。假如我只有这个Format功能,这将是有意义的,但似乎IIf该功能应防止其尝试使用空值运行。我用以下表达式测试了它:
( |: q2 p# k0 Y# N G=IIf(Fields!MyDate.Value = Nothing,"No value","Value")…并且足以确定空白值输入句子的正确部分,并打印无值。我不明白为什么表达式的第二部分(未使用)会导致错误。有没有办法重写而不导致错误?非常感谢。$ i, S- M( l. x4 x; R
编辑:正如我在评论中提到的,我也试过switch语句:
' i8 f3 J" P4 \* l1 G& r" H=Switch(Fields!MyDate.Value = Nothing,"",Fields!MyDate.Value Nothing,Format(CDate(Fields.MyDate.Value),"dd-MM-yyyy"))但是,这也是回来的#Error空白值。. w+ ?9 }2 D% |+ B
编辑可能的重复项:请不要将其标记为询问IIf是否重复短路。我看了看。它问了不同的问题,但没有给出适合我需要的答案。
" X5 b! e8 H) [' [* r
/ W7 q$ [& ]1 j3 |2 g5 `' ^; u6 V/ O8 a 解决方案:
* U' S$ h6 ^# y7 k, M, @ 问题是Iif不短路。一个丑陋的解决方案是使用嵌套Iif:! u: x$ J- z0 q$ h4 M% d
=IIf(Fields!MyDate.Value = Nothing,"",_ Format(CDate(Iif(Fields!MyDate.Value = Nothing,Today(),Fields!MyDate.Value)),"dd-MM-yyyy"))丑陋,重复,容易出错。
4 S: J1 c& |, ?另一种选择是创建一个自定义函数 会 短路: 短路:
, c0 j; e; Q* D, |Public Function FormatOrBlank (ByVal theDate As DateTime,ByVal format As String)If String.IsNullOrWhiteSpace(theDate) Return ""Else Return Format(CDate(theDate)),format)End IfEnd Function |
|