Reporting services 需要SSRS表达式表示避免被零误差除的变化百分比

Reporting services 需要SSRS表达式表示避免被零误差除的变化百分比,reporting-services,ssrs-2008-r2,Reporting Services,Ssrs 2008 R2,我的报告中有一个字段,显示其他两列a和B之间的差异百分比。a和B列是整数值,可以是正值、负值或零。我需要能够根据a和B之间的差异提供正、负或零%的变化 我理解(并多次使用)在StackOverflow上张贴的常用方法,以避免SSR中的零除错误: =IIF(Fields!A.Value=0,0,Fields!B.Value-Fields!A.Value/IIF(Fields!A.Value=0,1,Fields!A.Value)) 然而,在这种情况下,通常的方法是不够的。考虑以下事项: A

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

我理解(并多次使用)在StackOverflow上张贴的常用方法,以避免SSR中的零除错误:

=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%替换错误消息。社区能提供的任何帮助都将不胜感激

空值怎么样?我假设您坚持使用“P0”格式,下面的格式可以工作,但不会产生“%”符号


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

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

根据您希望看到的百分比变化,当A=0或A是否可以使用Abs(D)/Abs(N)并根据值显示A-增长时,您需要做一些稍微不同的事情?@Irb这与我最初的意图不符,我的初衷是找到一个解决方案,将从0到30(增长)与从0到0(无增长)区别对待。然而,我的老板可以接受在我的报告中将div/0错误格式化为空白,最终这才是真正重要的!但是,建议的公式不完整,仍然会导致div/0错误,因为IIF不短路。@Irb看起来我们正在同时工作,很抱歉删除了您回复的注释!
=IIF(Fields!Denominator.Value=0,
Nothing,
Fields!Numerator.Value/IIF(Fields!Denominator.Value=0,1,Fields!Denominator.Value))
=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))