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将解决问题。