在这个网站上有这个问题的答案提示,但我问的是一个稍微不同的问题.
Crystal Reports在哪里记录此语法不起作用?
Trim({PatientProfile.First}) + " " + Trim(Iif( IsNull({PatientProfile.Middle}) , Trim({PatientProfile.Middle}) + " " , " " ) ) + Trim({PatientProfile.Last})
我知道解决方案是
If IsNull({PatientProfile.Middle}) Then Trim({PatientProfile.First}) + " " + Trim({PatientProfile.Last}) Else Trim({PatientProfile.First}) + " " + Trim({PatientProfile.Middle}) + " " + Trim({PatientProfile.Last})
但我们怎么想弄清楚我们不能使用第一个版本?
IsNull的文档说
计算当前记录中指定的字段,如果该字段包含空值,则返回TRUE
而Iif给出了
[返回]如果expression为True则返回truePart,如果expression为False则返回falsePart.返回值的类型与truePart和falsePart的类型相同.
我想如果你盯着关于"返回值类型"的那一行你可以得到它,但是......
Crystal Reports在哪里记录此语法不起作用?
我怀疑在整个宇宙中有足够大的空间来记录在Crystal Reports中不起作用的一切......
我知道我在这个问题上已经很晚了,但是我在尝试找出同样的事情时遇到了这个问题.有趣的是,我甚至无法在Crystal Reports文档中找到答案,而是在IBM的链接中找到答案.
Baiscally,如果你正在使用Crystal Reports 8.x中或10.x的,ISNULL
并且IIF
不一起工作.从网站:
原因
Crystal Reports 8.x和10.x中存在一个缺陷,导致上述公式无法正常工作.'IIF'和'IsNull'命令不能一起工作,包括尝试使用"Not"来修改IsNull命令; 例如,IIF(Not IsNull()).
解决问题
解决方法是使用"If-Then-Else"语句.例如,
If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"
所以如果你使用的是CR 8.x或10.x(我们是),那你就不走运了.当您将多个字段连接在一起并且其中一个字段可能为NULL时,它会变得非常有趣.
我认为CR会评估两个IIF的真假部分.因为那里有"Trim({PatientProfile.Middle})"部分,它将被评估为aganst null值,CR公式评估器似乎只是失败了.