【问题标题】:SSRS Avg function returns result that is different than expectedSSRS Avg 函数返回的结果与预期不同
【发布时间】:2013-07-22 14:09:09
【问题描述】:

目前我正在尝试对一组数字进行平均,但有一定的条件。

是否可以在avg() 中使用iif() 并返回正确的结果?

此外,到目前为止,我的计算返回一个小数,返回一个幂 (8.9267....E -05)。

我尝试通过有条件地求和然后除以条件计数来规避AVG 函数,但它给了我相同的结果。

有人可以解释为什么返回并提供帮助吗?

目前我有:

=avg(iif((This_case) AND (That_case) AND (This_conditional)
  , Fields!ResponseRate.Value
  , 0))

如果满足某些条件,基本上我想要平均 ResponseRate。

sum 函数在这些条件下工作正常,但平均值不行。

【问题讨论】:

  • 您绝对可以在Avg 中使用IIf 并获得正确的结果。如果没有您的数据,就不可能说出您的特定情况下发生了什么。您能否提供几行数据集,在可重复的测试用例中证明您的问题?
  • @IanPreston 这就是我的想法,但我得到了我提到的结果。目前我有 =avg(iif((This_case) AND (That_case) AND (This_conditional), Fields!ResponseRate.Value, 0)) 如果满足某些条件,我基本上想要平均 ResponseRate。 (顺便说一下,我对 SSRS 比较陌生,所以我可能会误解你)。 sum 函数在这些条件下工作正常,但平均值却不行。
  • 您想从计算中完全排除False 值吗?如上所述,您仍然包括它们,只需将它们设置为0,因此仍将它们包括在计算中。这可能解释了你意想不到的结果。如果您想完全排除它们,请使用Nothing 而不是0。如上所述,这仍然只是假设 - 您可以使用示例数据集复制您的问题并将其添加到问题中吗?
  • 使用 Nothing 代替 0 有效。感谢您的帮助!
  • 不客气!我根据我们的讨论添加了一个答案;请考虑将此设置为接受的答案。

标签: function reporting-services ssrs-2008 average iif-function


【解决方案1】:

您绝对可以在Avg 中使用IIf 并获得正确的结果。

是否要从计算中完全排除 False 值?

在您的示例中,您仍然包括它们,只是将它们设置为 0,因此仍然将它们包括在计算中。这或许可以解释你意想不到的结果。

如果您想完全排除它们,请使用 Nothing 而不是 0

评论后编辑

您可以在 另一个 IIf 语句中嵌套表达式,并使用 IsNothing 检查 NULL 值。

假设你的条件平均表达式是:

=Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing))

您可以为 NULL 值返回 0,例如:

=IIf(IsNothing(Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing)))
    , 0.0
    , Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing)))

【讨论】:

  • 我有一个后续问题——如果它试图平均 0 个项目,它不会返回一个数字。这带来了一个问题,因为我希望我的报告灵活(大多数情况下它会平均一个数字,但有时会有 0 个实例)。转换函数能解决这个问题吗?
  • 您可以通过将avg 表达式包装在IIf 表达式中并检查您的边缘情况来添加额外的检查来处理这些情况;见上面的例子。
  • 像你这样的人是我喜欢这个网站的原因。你非常有帮助。再次感谢。
【解决方案2】:

我想把我的两分钱加到这个上,有点晚了,但也很有价值。如果另一条记录出现 X 次,我可以使用上面的代码对数据集进行平均。

=AVG(IIF(Count(Fields!AcctNo.Value, "AcctNo1") = 2, Fields!Limit.Value, Nothing))

因此,如果 acctno 字段出现 1 次,则平均该行组的限制字段。伊恩的例子很有帮助

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2015-08-13
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多