在SSRS中总计H:M:S

时间:2015-12-11 14:18:37

标签: reporting-services ssrs-2008 ssrs-2008-r2 reportingservices-2005

我有一个表达式,它使用以下表达式汇总Reporting Services中小时,分钟和秒(HH:MM:SS)的值:

    =CStr(sum(CInt(split(Fields!Column.Value,":")(0)))+sum(CInt(split(Fields!Column.Value,":")(1)))\60)
    &":"& CStr(sum(CInt(split(Fields!Column.Value,":")(1))) mod 60+sum(CInt(split(Fields!Column.Value,":")(2)))\60)  
    &":"& CStr(sum(CInt(split(Fields!Column.Value,":")(2))) mod 60)

看起来或工作正常,直到用户发现当我们的值为60时,分钟没有被四舍五入。例如,我有这样的总数

    5:60:42, 7:60:02 and so on

如何在表达式中纠正此错误,以便在达到60时将分钟值正确舍入?

1 个答案:

答案 0 :(得分:1)

我相信这应该可以解决问题。

=CStr(sum(CInt(split(Fields!Column.Value,":")(0)))+(sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))\60)\60)
    &":"& CStr((sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))\60) mod 60)  
    &":"& CStr(sum(CInt(split(Fields!Column.Value,":")(2))) mod 60)

在取mod 60之前,您必须首先计算所有分钟的总和 我将尝试解释使用伪代码,这是用于计算总分钟数:

  • 你的(错误的):
  

[(sum_of_all_min mod 60)+(sum_of_all_sec \ 60)]

  • 正确的方法:
  

[sum_of_all_min +(sum_of_all_sec \ 60)] mod 60

在计算小时总数时可以应用相同的值,您必须在除以60之前使用总分钟数量。

  • 这是小时计算,只有更正的版本:
  

sum_of_all_hours + [sum_of_all_min +(sum_of_all_sec \ 60)] \ 60

数字示例,假设你得到了这个:

sum_total_hours = 5
sum_total_min = 59
sum_total_sec = 75

  • 使用你的例子就可以了:
  

5 +(59 \ 60) : (59 mod 60)+(75 \ 60) : (75 mod 60)
   =&gt; 5 +(0) : (59)+(1) : (15)<登记/>    =&gt; 05:60:15

  • 正确的方法
  

5 + [59 +(75 \ 60)] \ 60 : [59 +(75 \ 60)] mod 60 : (75 mod 60)
   =&gt; 5 + [59 +(1)] \ 60 : [59 +(1)] mod 60 : (15)
   =&gt; 5 + [60] \ 60 : [60] mod 60 : (15)<登记/>    =&gt; 06:00:15