我们的一份报告遇到了问题.在我们的一个Tablix中,文本框具有以下表达式:
=Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value)
Run Code Online (Sandbox Code Playgroud)
哪个应该是不言自明的.如果"SomeField"为零,则将文本框值设置为零,否则将其设置为"SomeOtherValue/SomeValue".
我们难以理解的是,报告仍然会抛出一个运行时异常"试图除以零",即使上面的表达式可以防止这种情况发生.
为了确保零检查正常,我们在表达式上摆弄了一下,并且
=Iif(Fields!SomeField.Value = 0, "Yes", "No")
Run Code Online (Sandbox Code Playgroud)
工作得很漂亮.数据实际上为零的情况导致文本框显示"是",反之亦然.所以检查工作正常.
我的直觉是,报表呈现引擎在运行时抛出异常,因为它"看起来"好像我们要除以零,但事实上,我们不是.
有没有人遇到过同样的问题?如果是这样,你做了什么让它工作?
Mar*_*rtW 66
IIf将始终在确定哪一个实际返回之前评估两个结果.
尝试
=IIf(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / IIf(Fields!SomeField.Value = 0, 1, Fields!SomeField.Value))
Run Code Online (Sandbox Code Playgroud)
如果SomeOtherField.Value = 0,则将使用1作为除数,这不会产生错误.父IIf将为整个表达式返回正确的0.
小智 22
使用报告代码区域是一种简单干净的方法来防止除零错误.
在菜单中,转到报告>报告属性>代码并粘贴下面的代码
Public Function Quotient(ByVal numerator As Decimal, denominator As Decimal) As Decimal
If denominator = 0 Then
Return 0
Else
Return numerator / denominator
End If
End Function
Run Code Online (Sandbox Code Playgroud)
要调用该函数,请转到Textbox表达式并键入:
=Code.Quotient(SUM(fields!FieldName.Value),SUM(Fields!FieldName2.Value))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将公式放在组级别,所以我使用sum.否则它将是:
=Code.Quotient(fields!FieldName.Value,Fields!FieldName2.Value)
Run Code Online (Sandbox Code Playgroud)
来自:http://williameduardo.com/development/ssrs/ssrs-divide-by-zero-error/
小智 16
经过反思,我觉得最好的想法是将乘以值乘以-1,这是一个分界:
=IIf
(
Fields!SomeField.Value = 0
, 0
, Fields!SomeOtherField.Value * Fields!SomeField.Value ^ -1
)
Run Code Online (Sandbox Code Playgroud)
这不会触发预呈现检查,因为val*0 ^ -1会导致Infinity,而不是错误
| 归档时间: |
|
| 查看次数: |
40278 次 |
| 最近记录: |