SSRS 总计 H:M:S

Totaling H:M:S in SSRS

我有一个表达式在 Reporting Services 中总结小时、分钟和秒的值 (HH:MM:SS),表达式为:

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

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

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

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

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

=CStr(sum(CInt(split(Fields!Column.Value,":")(0)))+(sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))))
    &":"& CStr((sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))) 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)
=> 5 + (0) : (59) + (1) : (15)
=> 05:60:15

  • 正确的做法

5 + [59 + (75 \ 60)] \ 60 : [59 + (75 \ 60)] mod 60 : (75 mod 60)
=> 5 + [59 + (1)] \ 60 : [59 + (1)] mod 60 : (15)
=> 5 + [60] \ 60 : [60] mod 60 : (15)
=> 06:00:15