仅对非零值求平均值,并以秒为单位显示结果:SSRS中的秒数

时间:2014-03-05 18:10:42

标签: reporting-services conditional average

我在半小时级的思科UCCE数据SSRS报告中有几列。

管理层希望在几分钟内看到报告中的值(数据以秒为单位),他们只希望平均值包含呼叫数量大于零的值(通话时的平均时间没有意义)在没有任何需要时间的呼叫时包括零值)。他们也不希望在尝试除以零的单元格中看到#Error,或者尝试针对空字符串尝试DateAdd。

我有这种可怕的表达,应该这样做,但它不起作用。

=iff(Floor(iif(count(iif(Fields!CallsHandled.Value=0, nothing
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing     
,Fields!CallsHandled.Value))) / 
60)="","",Floor(iif(count(iif(Fields!CallsHandled.Value=0, nothing 
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing 
,Fields!CallsHandled.Value))) / 60) &":"& Format(DateAdd("s", 
Avg(iif(count(iif(Fields!CallsHandled.Value=0, nothing 
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing 
,Fields!CallsHandled.Value)))), "00:00:00"), "ss"))

它尝试在HandledCalls字段中确定哪些行的数字大于零,然后通过获取AHT的总和并将其除以HandledCalls的数量来平均AHT字段。在此过程中的某个位置会导致此错误:

“textrun'AHT.Paragraphs [0] .TextRuns [0]'的值表达式包含错误:[BC30451]名称'iff'未声明。”

被抛出。

有没有人曾经使用SSRS显示以这种方式计算的平均值(仅使用非零条目),同时显示平均值,其中仅包含时间跨度内的秒数,以分钟为单位?

编辑:我的表达开头有一个拼写错误。它在运行报表时不再抛出错误消息,但现在每个单元格都包含#Error,无论HandledCall编号如何。

1 个答案:

答案 0 :(得分:0)

在第一个条件测试中,计数结果(""或基于iif语句的平均值)除以60.令人惊讶的是,SSRS可以正常使用在"" / 60的情况下,你仍然得到0.然而,该语句继续测试一个数字(0或平均值)和字符串("")的相等性,这是正在进行的导致你看到的#Error

所以基本上通过将第一个条件中的""更改为0来将数字与数字进行比较:

=iff(Floor(iif(count(iif(Fields!CallsHandled.Value=0, nothing
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing     
,Fields!CallsHandled.Value))) / 60)=0,
"",
Floor(iif(count(iif(Fields!CallsHandled.Value=0, nothing 
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing 
,Fields!CallsHandled.Value))) / 60) &":"& Format(DateAdd("s", 
Avg(iif(count(iif(Fields!CallsHandled.Value=0, nothing 
,1))=0,"",sum(Fields!AHT.Value)/sum(iif(Fields!CallsHandled.Value=0, nothing 
,Fields!CallsHandled.Value)))), "00:00:00"), "ss"))

至少应该解决你所看到的#Error,但由于这个表达很大,我无法保证它能解决所有问题!