如果第一个条件已通过,如何停止评估



我试图评估报告中的字段,但每次都失败:

= IIf(Fields!lectcrs_hrs.IsMissing,
      Round(Fields!lectcrs_fee.Value * "1.00", 2),
      Round(Fields!lectcrs_fee.Value * Fields!lectcrs_hrs.Value, 2))

Fields!lectcrs_hrs.IsMissing = true的情况下,我的字段是空的,我发现第二种情况Round(Fields!lectcrs_fee.Value * Fields!lectcrs_hrs.Value, 2)包含缺失字段Fields!lectcrs_hrs的原因。为什么它会检查第二种情形,如果它通过了第一种!

如何解决此问题?

您要查找的行为被称为"短路",不幸的是,Visual Basic中的IIf函数没有提供这种功能。原因是IIf()是一个三元函数,因此,传递给它的所有参数都会在函数调用发生前求值。另一方面,三元运算符(VB9+中的If())确实支持条件求值。但是,我不认为If()运算符可以用作SSRS中表达式的一部分。

考虑到您正在尝试使用一个在运行时可能存在也可能不存在的字段,我建议您在报告中创建一个自定义函数来处理正确的检查和返回值。作为参考,看看这篇博客文章,它涵盖了相同的场景。