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
我有一个表达式在 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