【问题标题】:SSRS 2016 Sum time values represented as stringSSRS 2016 总和时间值表示为字符串
【发布时间】:2018-07-03 10:08:11
【问题描述】:

我有一列,显示时间(小时(可能 > 24):分钟:秒),在我的数据集中以字符串表示。

40:02:20
365:23:30
12:00:59
23:59:59

我需要得到总和,在这种情况下是:

574:59:59 or 24.3:59:59 (any of this output is ok)

我尝试使用下面的表达式,但它给了我错误,因为我需要以某种方式转换时间值。

=TimeSpan.FromTicks(Sum(Fields!time.Value))

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 这个值是作为字符串存储在数据库中还是从 SECONDS 转换为字符串?

标签: reporting-services ssrs-2008 ssrs-2012 ssrs-2016


【解决方案1】:

在您的报告中添加以下自定义代码

Public Dim hours As Integer
Public Dim minutes As Integer
Public Dim seconds As Integer

Public Function sumTime( ByVal s As String) As String

Dim substrings() As String =  s.Split(":")

hours = hours + Cint(substrings(0))
minutes = minutes + Cint(substrings(1))
seconds = seconds + Cint(substrings(2))

minutes = minutes + (Math.floor(seconds / 60))
seconds = seconds mod   60

hours = hours + (Math.floor(minutes / 60))
minutes = minutes mod 60


Return s

End Function

该函数将时间字符串作为参数,将其拆分为小时、分钟和秒,并创建它们的总和。

您可以调用插入以下表达式的函数(图像:蓝色字体颜色)

= Code.sumTime(Fields!time1.Value)

对于总数(图片:绿色字体颜色),您可以使用类似的表达式

= Cstr(Code.hours) & ":" & Right("0" & Cstr(Code.minutes),2) & ":" &  Right("0" & Cstr(Code.seconds),2)

【讨论】:

    【解决方案2】:

    它没有具体回答您的问题,但最佳做法是以秒或 StartDates 和 EndDates 为单位存储持续时间 DATETIME 或类似的 DATATYPE,然后使用 DATEDIFF 计算持续时间。

    然后在SSRS报告中可以使用这个表达式显示为HH:MM:SS

    =Floor(Sum(Fields!someSeconds.Value) / 3600) & ":" & Format(DateAdd("s", Sum(Fields!someSeconds.Value), "00:00"), "mm:ss")
    

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多