2013-07-22 71 views
2

当前我正在尝试对一组数字进行平均,但具有某些条件。SSRS平均值函数返回的结果与预期值不同

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

此外,截至目前我的计算返回一个小数返回到权力(8.9267 .... E -05)。

我试着绕过AVG函数,通过有条件地求和然后除以一个有条件的计数,但它给了我相同的结果。

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

目前我有:

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

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

sum功能适用于条件,但平均不适用。

+2

你可以在'Avg'内绝对使用'IIf'并获得正确的结果。没有你的数据,就不可能说出你的具体情况发生了什么。您是否能够提供几行数据集,以便在可重复的测试用例中演示您的问题? –

+0

@IanPreston这就是我的想法,但我得到了我提到的结果。目前我有= avg(iif((This_case)和(That_case)AND(This_conditional),Fields!ResponseRate.Value,0))基本上我需要平均ResponseRate如果满足某些条件。 (我对SSRS比较陌生,所以我可能会误解你)。求和函数适用于条件,但平均值没有。 – Ryan

+0

你想从计算中完全排除“假”值吗?如上所述,你仍然包括它们,只是将它们设置为'0',因此仍将它们包括在计算中。这可能会解释您的意外结果。如果你想完全排除它们,使用'Nothing'而不是'0'。如上所述,这仍然只是假设 - 您是否可以用样本数据集复制您的问题并将其添加到问题中? –

回答

5

您可以在Avg内使用IIf,并获得正确的结果。

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

在你的例子中,你仍然包含它们,只是将它们设置为0,因此仍将它们包括在计算中。这可能会解释您的意外结果。

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

编辑您可以窝在另一IIf语句检查使用IsNothing NULL值的表达。

说你的病情的平均表达式为:

=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项,它不会返回一个数字。这就造成了一个问题,因为我希望我的报表具有灵活性(大多数情况下它将平均数,但有时候有0个实例)。转换函数能解决这个问题吗? – Ryan

+1

您可以添加一个额外的检查来处理这些情况,方法是将'avg'表达式封装在'IIf'表达式中并检查您的边界情况;以上为例。 –

+1

像你这样的人是我喜欢这个网站的原因。你一直非常有帮助。再次感谢。 – Ryan

0

我想我的两分钱中添加这一项,一:

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

可以为NULL值的东西,如返回0有点晚,但也很有价值。如果另一条记录出现X次,我可以使用上面的代码来平均数据集。

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

因此,如果acctno字段出现1次,则avg该行组的限制字段。 Ian的例子非常有帮助