19

我有一个带有除法表达式的 tablix 框。当除以零或空值时,我会#Error显示在我的报告中。我尝试创建一个IIF语句并使用静态值进行测试。这验证了我的语法是正确的,但我仍然在报告中看到错误。

报告预览

=IIF(Sum(Fields!CY_Dollars.Value)=0, 0, (Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))/(Sum(Fields!PY_Dollars.Value)))

所以我用当年的美元,减去上一年的美元,再除以上一年的美元来得到百分比变化。有没有我没有得到的技巧?!

4

3 回答 3

56

您可以在报告代码中添加一个处理除以零条件的函数,这使得在多个单元格中实现起来更容易一些,例如

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double)
If IsNothing(Divisor) Or Divisor = 0
  Return 0
Else
  Return Dividend/Divisor
End If
End Function 

然后,您可以像这样在单元格中调用它:

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
于 2013-10-07T03:55:09.183 回答
13

IIF我怀疑您遇到了 SSRS 实际上并没有使语句短路的问题;即使您正在检查0,您仍然会遇到除以零错误。

尝试类似:

=IIf(Sum(Fields!PY_Dollars.Value) = 0, 0, Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))
  / IIf(Sum(Fields!PY_Dollars.Value) = 0, 1, Sum(Fields!PY_Dollars.Value))

使用两个语句意味着您可以通过使用等式when = 0IIf来避免错误,因此只返回00/1Sum(Fields!PY_Dollars.Value)

另请注意,上面的表达式正在检查Sum(Fields!PY_Dollars.Value) = 0,但您的正在检查Sum(Fields!CY_Dollars.Value) = 0- 分母需要在这里进行零检查。

于 2013-10-04T20:40:45.573 回答
8

为了避免维护代码的开销,下面的解决方案对我来说是最整洁的。Double它通过向其添加可能的最小值(Double.Epsilon,即)来避免在分母中除以零4.94e-324。这个值太小了,不会影响人们使用 SSRS 的分数的值。它还避免了嵌套 IIF 函数。

=IIF(Sum(Fields!Denominator.Value)>0, 
     Sum(Fields!Numerator.Value)/(Sum(Fields!Denominator.Value)+Double.Epsilon),
     nothing)
于 2017-11-29T17:42:25.507 回答