Crystal Reports公式:IsNull + Iif

Sar*_*can 5 iif-function isnull crystal-reports

在这个网站上有这个问题的答案提示,但我问的是一个稍微不同的问题.

Crystal Reports在哪里记录此语法不起作用?

Trim({PatientProfile.First}) + " "
    + Trim(Iif(
        IsNull({PatientProfile.Middle}) 
        , Trim({PatientProfile.Middle}) + " "
        , " "
        )
    )  
+ Trim({PatientProfile.Last})
Run Code Online (Sandbox Code Playgroud)

我知道解决方案是

If IsNull({PatientProfile.Middle}) Then
    Trim({PatientProfile.First})
        + " " + Trim({PatientProfile.Last})
Else
    Trim({PatientProfile.First})
       + " " + Trim({PatientProfile.Middle})
       + " " + Trim({PatientProfile.Last})
Run Code Online (Sandbox Code Playgroud)

但我们怎么想弄清楚我们不能使用第一个版本?

IsNull的文档说

  • 计算当前记录中指定的字段,如果该字段包含空值,则返回TRUE

而Iif给出了

  • [返回]如果expression为True则返回truePart,如果expression为False则返回falsePart.返回值的类型与truePart和falsePart的类型相同.

我想如果你盯着关于"返回值类型"的那一行你可以得到它,但是......

小智 11

Crystal Reports在哪里记录此语法不起作用?

我怀疑在整个宇宙中有足够大的空间来记录在Crystal Reports中不起作用的一切......


Lit*_*les 6

我知道我在这个问题上已经很晚了,但是我在尝试找出同样的事情时遇到了这个问题.有趣的是,我甚至无法在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"
Run Code Online (Sandbox Code Playgroud)

所以如果你使用的是CR 8.x或10.x(我们是),那你就不走运了.当您将多个字段连接在一起并且其中一个字段可能为NULL时,它会变得非常有趣.


Arv*_*rvo 5

我认为CR会评估两个IIF的真假部分.因为那里有"Trim({PatientProfile.Middle})"部分,它将被评估为aganst null值,CR公式评估器似乎只是失败了.

  • 从CR帮助:在返回结果之前评估IIF函数的每个参数.因此,使用IIF时应注意不良副作用.例如,如果falsePart导致除零,则会发生错误,即使expression为True,也会返回truePart. (2认同)