Суммарные значения времени SSRS 2016 представлены в виде строки - PullRequest
0 голосов
/ 03 июля 2018

У меня есть столбец, показывающий время (часы (может быть> 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 ]

0 голосов
/ 03 июля 2018

Добавьте следующий код в ваш отчет

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

0 голосов
/ 03 июля 2018

Он не отвечает конкретно на ваш вопрос, но рекомендуется хранить длительность в секундах или StartDates и EndDates как DATETIME или аналогичный, DATATYPE, а затем использовать DATEDIFF для вычисления продолжительности.

Затем в отчете SSRS вы можете использовать это выражение для отображения в формате ЧЧ: ММ: СС

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