2

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

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

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

ISNULL( )

但没有成功。

任何帮助,我将不胜感激。

谢谢

4

2 回答 2

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)
于 2015-02-24T23:06:55.373 回答
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 函数。您需要查看详细记录以尝试推断聚合函数不起作用的原因。底线 - 分解你的表情并逐个测试它。答案就在某处。

于 2012-07-23T20:35:20.440 回答