SSRS IIF声明表现得很奇怪

时间:2016-07-22 16:44:48

标签: reporting-services ssrs-2012 iif-function

我有一个要显示的图表数据,SSRS的行为方式可能最奇怪。为了解释一下,我在一个图表区域中有条形图和折线图。折线图是问题所在。

要理解这一点,以下是我正在处理的确切数据:

ID  Hours   Cost
-------------------
1   NULL    NULL
2   NULL    NULL
3   NULL    NULL
4   NULL    NULL
5   NULL    NULL
6   NULL    NULL
7   NULL    NULL
8   0       718.11
9   0       905.61
10  0       546.73
11  0       -708.4
12  0       1095.19
13  NULL    NULL
14  0       864.32
15  NULL    NULL
16  0       2165.96
17  0       1745.61
18  NULL    NULL
19  0       25984.04
20  80      8720.37
21  0       7074.41
22  0       -2431.18

现在,根据这些数据,我的折线图上印有以下测试表达式:

= IIF(RunningValue(Fields!Hours.Value,Sum,Nothing) <> 0, 100, 200)

这个表达式给了我一个正确的输出,这是一个值为200的连续折线图,直到ID值19.然后,图形变为100并继续。

当我将表达式更改为我的实际要求时,问题就开始了,如下所示:

= IIF(RunningValue(Fields!Hours.Value,Sum,"Details") <> 0, (RunningValue(Fields!Cost.Value,Sum,"Details")/RunningValue(Fields!Hours.Value,Sum,"Details")), 0)

图表从ID 8突破到19.我不明白为什么。应该已执行ELSE方法的IIF,因此应绘制值0。对受影响的值集合应该没有影响。有人能帮助我理解这个吗?

我已经使用以下声明解决了这个问题,但我自己不确定为什么会这样,而不是之前的陈述。

= IIF(RunningValue(Fields!Hours.Value,Sum,"Details") <> 0, (RunningValue(Fields!Cost.Value,Sum,"Details") * RunningValue(Fields!Hours.Value,Sum,"Details") ^ -1), 0)

如果需要任何其他信息来了解这个问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

我认为这是 IIF 语句的问题,它解决了两种可能性并提出了零除错误。

Does the iif function compute both paths in SSRS or is it short-circuited?

如果分母为0,通常用户将分子的IIF添加为0,如果分母为0,则分母的第二个IIF除以1,如果分母为0,则结果为0。

我认为将函数更改为1的幂而不是除以零,结果是无穷大而不是除以0.

https://math.stackexchange.com/questions/1009868/why-does-zero-raised-to-the-power-of-negative-one-equal-infinity/