【问题标题】:Averaging only non-zero values and displaying the result in Minutes:Seconds in SSRS仅平均非零值并在 SSRS 中以 Minutes:Seconds 显示结果
【发布时间】:2014-03-05 18:10:41
【问题描述】:

我有几列进入 SSRS 报告中关于半小时级别的思科 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 字段。在此过程中的某个地方会导致此错误:

“文本运行‘AHT.Paragraphs[0].TextRuns[0]’的值表达式包含错误:[BC30451] 未声明名称‘iff’。”

被扔掉。

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

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

【问题讨论】:

  • 根据错误iff is not a valid function,这是表达式开头的错字;当您将其替换为 iif 时会发生什么?
  • 你是对的,一开始有一个错字,但不幸的是,公式仍然不起作用。现在每个单元格都包含#Error,无论调用号如何。

标签: reporting-services conditional average


【解决方案1】:

在第一个条件测试中,计数的结果("" 或平均值,基于 iif 语句)除以 60。令人惊讶的是,SSRS 可以接受,并且在"" / 60 你仍然得到 0。但是该语句然后继续测试数字(0 或平均值)和字符串("")的相等性,这将导致 #Error you正在看。

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

这至少应该解决您所看到的#Errors,但由于该表达式是巨大的,我不能保证它会解决所有问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2018-04-21
    • 1970-01-01
    • 2011-11-11
    • 2017-05-26
    • 2020-10-21
    • 2011-06-12
    相关资源
    最近更新 更多