sea*_*cus 3 reporting-services ssrs-2008
在报告的摘要行中计算平均值时出现错误。我的表情是这样的:
=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-")
Run Code Online (Sandbox Code Playgroud)
(对不起超长的队伍)
当数据看起来像这样时,表达式工作正常:
8311 87 0 0
8311 41 0 0
8311 80 0 0
8311 136 1 136
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果第 2 列超过 120,则第 3 列为 1,否则为 0。仅当第 2 列大于 120 时,第 4 列的值才大于 0,在这种情况下,它与第 2 列的值相同。这样,对于报告服务中该组的汇总行,我可以确定大于 120 的总行数(通过在第 3 列上使用 SUM)。以同样的方式,我可以通过对第 4 列求和来确定第 2 列中大于 120 的值的总数。从那里,将第 4 列除以第 3 列以确定第 2 列的平均值应该很简单值超过 120。
获得平均值后,我想将其转换为时间字符串(例如,“00:02:16”)。如果没有值(即组中没有超过120的第2列值,我想显示一个“-”。
此逻辑似乎适用于第 2 列的值超过 120 的情况。但是,当第 3 列和第 4 列为 0 时,如下所示:
8310 108 0 0
Run Code Online (Sandbox Code Playgroud)
该表达式在运行报告时给出了可怕的 #Error 结果。我假设这是除以零误差,因此我将 IIF 放入表达式中以检查平均计算中的分母是否 > 0。
遗憾的是,对于那些在第 3 列和第 4 列中为 0 的组,#Error 仍然存在。我错过了什么?
SSRS 中的 iif 与 Visual Basic IIF 相同:它评估所有分支,如果任何部分产生错误,整个函数都会抛出错误。
两种常见的解决方法:
第二个选项:替换:
=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-")
Run Code Online (Sandbox Code Playgroud)
和
=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value) / IIF(SUM(Fields!column3.Value)>0,SUM(Fields!column3.Value),1)), "00:00:00"), "HH:mm:ss"), "-")
Run Code Online (Sandbox Code Playgroud)
(我想我得到了正确数量的括号......)
处理除以零的嵌入代码的许多示例也存在,这里有一个。 http://social.msdn.microsoft.com/Forums/is/sqlreportingservices/thread/b8e0730b-da60-49a8-8613-2309ff1a2c90
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |