【发布时间】:2011-10-25 19:21:29
【问题描述】:
我正在尝试防止 #error 在我正在创建的报告中显示
当我将 2 个数字相除而其中一个为零时会发生这种情况
所以我尝试在进行除法之前使用 if/switch 语句检查 2 个数字中的任何一个是否为 0:
=IIf(Fields!Field1.Value = 0
or Fields!Field2.Value = 0
or Not(IsNumeric(Fields!Field1.Value))
or Not(IsNumeric(Fields!Field2.Value)),
0,
(Fields!Field1.Value/Fields!Field2.Value)*100
)
=Switch(
Fields!Field1.Value = 0 or Fields!Fields.Value = 0, 0,
IsNumeric(Fields!Field1.Value) or IsNumeric(Fields!Fields.Value), (Fields!Field1.Value/Fields!Fields.Value)*100
)
这两个仍然抛出错误。即使 if 语句为真,似乎仍然会评估 else 条件
如果我将代码更改为只为 if 和 else 打印 X 或 Y,那么它可以工作 - 所以 if 语句中没有错误
这对我来说似乎很荒谬
请告诉我我做错了什么?当 if 为真时,我不敢相信语言会评估 else
编辑
因此,似乎评估了 else 条件。那么如何避免潜在除以零误差呢?
答案来自: http://www.sqlservercentral.com/Forums/Topic442497-150-1.aspx#bm1115960
另一种选择(特别是如果您的报表包含许多可能导致被零除的表达式,则使用自定义代码函数。
在报告属性的代码选项卡/窗口中,输入如下内容:
Public Function DivideBy(ByVal Exp1, ByVal Exp2)
If Exp2 = 0 Then
DivideBy = 0
Else : DivideBy = Exp1 / Exp2
End If
End Function
然后插入表达式 =code.DivideBy(Field!ToBeDivided.Value,Field!DividingBy.Value) 进入任何可能出现被零除问题的单元格。
【问题讨论】:
标签: sql sql-server-2005 reporting-services