代码之家  ›  专栏  ›  技术社区  ›  Gyuzal

SSRS 2016总和时间值表示为字符串

  •  0
  • Gyuzal  · 技术社区  · 6 年前

    我有一个列,显示时间(小时(可能是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))

    我很感激你的帮助。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mazhar    6 年前

    它不会明确回答您的问题,但最佳实践是将持续时间以秒或开始日期和结束日期存储为 DATETIME 或类似的数据类型,然后使用 DATEDIFF 计算持续时间。

    然后在ssrs报告中,可以使用此表达式显示为hh:mm:ss

    =Floor(Sum(Fields!someSeconds.Value) / 3600) & ":" & Format(DateAdd("s", Sum(Fields!someSeconds.Value), "00:00"), "mm:ss")
    
        2
  •  3
  •   niktrs    6 年前

    在报表中添加以下自定义代码

    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)
    

    enter image description here

    enter image description here