希望你好。 我正在编写一份报告,似乎得到了#error。似乎它是一个零除错误,但我无法找到解决方案。表达式:
=( Sum(Fields!Line_Sell.Value) - Sum(Fields!Line_Cost.Value) ) / Sum(Fields!Line_Sell.Value)
我对RS比较陌生,但已尝试
ISNULL( )
但没有成功。
任何帮助,我都会很高兴。
由于
答案 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函数。您需要查看详细记录以尝试推断聚合函数不起作用的原因。底线 - 分解您的表达并逐个测试。答案就在那里。