SSRS除以零误差表达式

时间:2012-07-23 09:36:57

标签: reporting-services expression divide-by-zero ssrs-expression

希望你好。 我正在编写一份报告,似乎得到了#error。似乎它是一个零除错误,但我无法找到解决方案。表达式:

=( Sum(Fields!Line_Sell.Value) - Sum(Fields!Line_Cost.Value) ) / Sum(Fields!Line_Sell.Value)

我对RS比较陌生,但已尝试

ISNULL( )

但没有成功。

任何帮助,我都会很高兴。

由于

2 个答案:

答案 0 :(得分:5)

我们假设您将表达式设置为x / y,其中y可能为零。如您所见,SSRS会将此值更改为#ERR(或有时为NaN)。 你的第一直觉是测试零

=Iif(y = 0, 0, x/y)

不幸的是,这可能会导致调试器警告,表示您试图除以零。这是因为SSRS尝试在编译期间评估整个语句。 因此,我们需要为SSRS提供可以评估的值

=x * y ^ -1

这与除以y值相同,但SSRS将其视为除以无穷大,因此可以进行评估。 最后一步,您需要确保您的代码可以正确导出到Excel。根据2012 SSRS(可能以后,我还没有测试过),SSRS存在一个问题,即可能将零值导出到Excel为0.000000000000000并导致数据错误丢失。 为了纠正这个问题,我们明确输出零值

=Iif(x = 0 OR y = 0, 0, x * y ^ -1)

答案 1 :(得分:1)

评论中的表达看起来并不完整,所以我不知道你接下来尝试了什么不起作用。你肯定想在进行分割之前测试零。

你可以试试这个:

=iif( Sum(Fields!Line_Sell.Value) = 0, 0, (Sum(Fields!Line_Sell.Value) - Sum(Fields!Line_Cost.Value)) / Sum(Fields!Line_Sell.Value))

或者要检查空值,您可以尝试:

=iif( (Sum(Fields!Line_Sell.Value) = 0 or IsNothing(Sum(Fields!Line_Sell.Value)), 0,Sum(Fields!Line_Sell.Value) - Sum(Fields!Line_Cost.Value)) / Sum(Fields!Line_Sell.Value))

如果仍然没有产生结果,请分解表达式并运行报告。单独尝试Sum(Fields!Line_Sell.Value),运行报告并查看所获得的内容。为了更高效,为Fields!Line_Sell.Value创建一个包含一列的表,为Fields!Line_Cost.Value创建另一列。在表中,包括详细信息行并添加总行,以便分别获得每个字段的Sum函数。您需要查看详细记录以尝试推断聚合函数不起作用的原因。底线 - 分解您的表达并逐个测试。答案就在那里。