如何在 SSRS 中显示超过 24 小时的小时数

How to display time in hours overshooting 24 hours in SSRS

我有一个报告,其中有一列显示时间累计超过 24 小时。我希望它以小时为单位显示。 我找到了一个解决方案,当时间超过 86400 秒(一天中的秒数)时,它会显示天数和时间,但我只想显示以小时为单位的时间。

=IIF(Fields!TotalTime.Value < 86400, 
Format(DateAdd("s", Fields!TotalTime.Value, "00:00:00"), "HH:mm:ss"), 
Floor(Fields!TotalTime.Value / 86400) & " days, " & Format(DateAdd("s", Fields!TotalTime.Value, 
"00:00:00"), "HH:mm:ss")

你可以只用表达式来做到这一点,但这种方式更可重用..

将以下代码添加到您报告的自定义代码中 (向原作者致歉,我根据多年前的博客...我找不到你的post

Public Function SecondsAsHHMMSS(ByVal secs) As String
        Dim h As String =INT(secs/3600)
        Dim m as string
        Dim s as string
        If Len(h) <2 Then
                h = RIGHT(("0" & h), 2)
        End If
        m = RIGHT("0" & INT((secs MOD 3600)/60), 2)
        s = RIGHT("0" & ((secs MOD 3600) MOD 60), 2)

        SecondsAsHHMMSS= h & ":" & m & ":" & s

End Function

此函数将花费数秒并转换为 HH:MM:SS 格式。

现在我们要做的就是传入每行的累计秒数。

为此我们可以使用 System.TimeSpan。

这假设数据库字段是 TIME 数据类型

=Code.SecondsAsHHMMSS(RunningValue(Fields!TimeInOffice.Value.TotalSeconds, SUM, Nothing))

从中间开始锻炼....

  1. 我们获取 TimeInOffice 字段的值,因为它是 Time 数据类型,所以我们可以使用 TotalSeconds 属性 来获取秒数代表.
  2. 我们得到这些秒数的 运行 总和('Nothing' 是范围,如果你想限制行组内的范围等,请将行组的名称放在引号中, 代替 Nothing 关键字)
  3. 新的我们有秒数,我们将它传递给我们的自定义函数

结果是这样的。