我的报告中有一个字段显示其他两列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%替换错误消息。非常感谢社区提供的任何帮助!
答案 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))
似乎适合您提供的价值观以及我编写的其他一些人:
答案 2 :(得分:0)
从@Irb的不完整解决方案开始:当Demoninator为零时,这将提供一个空值
=IIF(Fields!Denominator.Value=0,
Nothing,
Fields!Numerator.Value/IIF(Fields!Denominator.Value=0,1,Fields!Denominator.Value))