【问题标题】:SSRS IIF statement behaving strangelySSRS IIF 语句行为异常
【发布时间】:2016-07-27 00:10:24
【问题描述】:

我有一个要显示的图表数据,而 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。我不明白为什么。 IIF 方法的 ELSE 应该已经执行,因此应该绘制 0 的值。对受影响的值集应该没有影响。有人可以帮我理解这一点吗?

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

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

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

【问题讨论】:

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


    【解决方案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/

    【讨论】:

    • 我已经阅读了您分享的短路方法。即使评估了这两个部分,我也没有得到它,为什么它仍然不使用错误的部分?我尝试更改部分的顺序,以防评估由于错误而在第二部分停止并且没有进行到第三部分但没有成功。更令人惊讶的是,最后一条语句起作用了,它本质上是在做同样的事情。有什么线索吗?希望我不会太麻烦或困惑..
    • 我认为问题在于,虽然错误部分会起作用,但表达式也会评估得到 #DIV/0 错误的真实部分(即使它不会使用它)。然后它只返回错误而不是有效部分。很烦人。
    • 我想我明白你想说什么。但是,为什么最后一条语句有效。取一个数的倒数应该有相同的结果,对吧?为这项努力点赞!
    • 我相信它在技术上是无穷大而不是除以 0。math.stackexchange.com/questions/1009868/…
    • 好吧,那就这样解决了..我将此标记为答案,但将最后一部分添加到帖子中,以便其他人也可以参考..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多