Reporting services 仅计算非零值的平均值,并以分钟为单位显示结果:秒(SSRS)

Reporting services 仅计算非零值的平均值,并以分钟为单位显示结果:秒(SSRS),reporting-services,conditional,average,Reporting Services,Conditional,Average,我在SSRS报告中有几个专栏是关于Cisco UCCE半小时级别的数据 管理层希望以分钟为单位查看报告上的值(输入的数据以秒为单位),他们只希望平均值包括呼叫数大于零的值(如果没有任何呼叫需要花费时间,则呼叫的平均时间没有意义包括零的值)。他们也不希望在试图除以零或试图对空字符串进行DateAdd的单元格中看到#Error 我有一个可怕的表情,本来应该这样做的,但它不起作用 =iff(Floor(iif(count(iif(Fields!CallsHandled.Value=0, nothing

我在SSRS报告中有几个专栏是关于Cisco UCCE半小时级别的数据

管理层希望以分钟为单位查看报告上的值(输入的数据以秒为单位),他们只希望平均值包括呼叫数大于零的值(如果没有任何呼叫需要花费时间,则呼叫的平均时间没有意义包括零的值)。他们也不希望在试图除以零或试图对空字符串进行DateAdd的单元格中看到#Error

我有一个可怕的表情,本来应该这样做的,但它不起作用

=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.段落[0].TextRuns[0]的值表达式包含错误:[BC30451]未声明名称'iff'

被扔掉

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


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

在第一个条件测试中,计数的结果(即
或基于
iif
语句的平均值)除以60。令人惊讶的是,SSRS对此没有问题,而在
/60的情况下,仍然得到0。但是,该语句接着测试数字(0或平均值)和字符串(
)的相等性,这将导致您看到的
#错误

因此,基本上通过将第一个条件中的
更改为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"))

这至少可以解决您看到的
#错误,但由于这个表达式非常庞大,我不能保证它能解决所有问题

根据错误
iff
不是有效的函数,它是表达式开头的一个输入错误;当你用
iif
替换它时会发生什么?你是对的,一开始就有一个打字错误,但不幸的是,这个公式仍然不起作用。现在,无论呼叫号码如何,每个单元格都包含#错误。