SSRS 2008 – 处理零场景的划分
我们的一个报告遇到了问题。 在我们的一个tablix中,文本框有以下expression式:
=Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value)
这应该是不言自明的。 如果“SomeField”为零,则将文本框的值设置为零,否则将其设置为“SomeOtherValue / SomeValue”。
我们难以理解的是,即使上面的expression式阻止了这种情况发生,报告仍然会抛出一个运行时exception“试图除以零”。
我们摆弄了一下表情,以确保零检查正在工作
=Iif(Fields!SomeField.Value = 0, "Yes", "No")
精美的作品。 数据实际上为零的情况导致文本框显示“是”,反之亦然。 所以检查工作正常。
我的直觉是报告渲染引擎在运行时抛出exception,因为它看起来好像我们将被零除,但实际上我们不是。
有没有人遇到过同样的问题? 如果是这样,你做了什么工作呢?
IIf将总是在决定哪一个实际返回之前对两个结果进行评估。
尝试
=IIf(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / IIf(Fields!SomeField.Value = 0, 1, Fields!SomeField.Value))
这将使用1作为除数,如果SomeOtherField.Value = 0,这不会产生错误。 父母IIf将为整体expression式返回正确的0。
我使用了不同的方法; 报告属性>代码和代码解决scheme
http://williameduardo.com/development/ssrs/ssrs-divide-by-zero-error/
经过反思,我觉得最好的办法是把价值乘以权力-1,这是一个分水岭:
=IIf ( Fields!SomeField.Value = 0 , 0 , Fields!SomeOtherField.Value * Fields!SomeField.Value ^ -1 )
这不会触发预渲染检查,因为val * 0 ^ -1导致无穷大,而不是错误
IIF评估这两种expression式,甚至认为Fields的值!SomeField.Value是0.使用IF而不是IIF将解决问题。