需要SSRS表达式以获得避免除以零错误的变化百分比

时间:2014-04-22 21:04:54

标签: reporting-services ssrs-2008-r2

我的报告中有一个字段显示其他两列A和B之间的差异百分比。列A和B是整数值,每个都可以是正数,负数或零。我需要能够根据A和B之间的差异提供正,负或零变化。

我理解(并多次使用)在StackOverflow上发布的常用方法,以避免在SSRS中被零错误分割:

=IIF(Fields!A.Value=0,0,Fields!B.Value-Fields!A.Value/IIF(Fields!A.Value=0,1,Fields!A.Value))

然而,在这种情况下,通常的方法是不充分的。请考虑以下事项:

 A   |   B   |   Diff   |   % Change        |  % Change
                         (By Usual Method)   (As I need to see it)
 2   |   3   |    1     |     50%           |     50%
-1   |   2   |    3     |     -300%         |     300%
 0   |   0   |    0     |     0%            |     0%
 0   |   3   |    3     |     0%            |     100%
 0   |  -3   |   -3     |     0%            |    -100%

我需要一个能够避免除以零错误的表达式,但我不能简单地用0%替换错误消息。非常感谢社区提供的任何帮助!

3 个答案:

答案 0 :(得分:1)

null怎么样?我假设您坚持使用“P0”格式,下面的内容将起作用,但不会产生“%”符号。

IIF(Fields!Denominator.Value=0 OR IsNothing(Fields!Denominator.Value),"",(Fields!Numerator.Value / Fields!Denominator.Value) * 100)

答案 1 :(得分:1)

根据您想要查看的百分比变化,只要A = 0或A <0,您就需要做一些略微不同的事情。因此,使用A的原始值和B的示例作为新值:如果A为0,则根据B的值确定您的%变化是0还是+/- 100.如果A不是0,则处理负值通过取分母中的绝对值;否则使用正常的%变化公式:

=IIF(Fields!A.Value=0, 
IIF(Fields!B.Value=0, 0, Fields!B.Value/Abs(Fields!B.Value)), 
IIF(Fields!A.Value<0, (Fields!B.Value-Fields!A.Value)/Abs(Fields!A.Value), (Fields!B.Value-Fields!A.Value)/Fields!A.Value))

似乎适合您提供的价值观以及我编写的其他一些人:

SSRS Example

答案 2 :(得分:0)

从@Irb的不完整解决方案开始:当Demoninator为零时,这将提供一个空值

=IIF(Fields!Denominator.Value=0,
Nothing,
Fields!Numerator.Value/IIF(Fields!Denominator.Value=0,1,Fields!Denominator.Value))