SSRS: суммирование значений TimeSpan в отчете

У меня есть отчет и источник данных, в котором один из столбцов имеет тип TimeSpan. Значение TimeSpan отображается правильно в отчете, когда я его использую Fields!TheTime.Value, никаких проблем.

  • 07:02:00
  • 05:41:00

Но я хотел бы провести суммирование этих значений, чтобы получить общее время группы. В C# и тому подобном я, конечно, могу сделать TimeSpan + еще TimeSpan, поэтому я знаю, что их можно добавить. Я пытался

=Sum(Fields!TheTime.Value)

Но в итоге он распечатывается как какой-то длинный номер. Например, для приведенных выше значений времени я бы получил 457800000000 как сумму. И что это вообще должно быть?

В любом случае, как я могу суммировать значения временного интервала в отчете? Для вышеуказанных временных интервалов я хотел бы закончить 12:43:00 суммой. Если только моя голова снова не подвела меня в математике ... но вы поняли: p

Ответов (3)

Решение

вздох Решение досадно простое ... Почему я просто не мог попробовать это в первую очередь? Ну что ж ... может быть, потому что я не осознавал, что у меня есть доступ к TimeSpan классу ... может быть, потому что я считал себя слепым ... Но в любом случае, вот оно:

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

Ооо!

Что, вероятно, происходит, так это то, что когда вы отображаете Fields! TheTime.Value, SSRS достаточно умен, чтобы отображать это как поле типа DateTime.

когда вы добавляете туда сумму, он думает, что это поле числового типа, и отображает его как таковое (т. е. суммирует количество «тактов» в каждом поле временного интервала)

попробуйте специально отформатировать суммированное значение как дату и время в свойствах поля, и оно, вероятно, будет отображаться правильно

@Svish - я удалил свой предыдущий пост, потому что у меня была неуверенность в своем ответе, но я согласен с @pfunk.

Я, наконец, получил резервную копию SSRS и поигрался, и, безусловно, похоже, что ваше большое число - это количество тиков, поэтому похоже, что небольшое форматирование результата сработает для вас.

Интересно, что мой предыдущий запутанный ответ был обходным путем для суммирования значений DateTime (с использованием типа данных SQL Server DATETIME в моем запросе), который вы не можете сделать в SSRS (и SQL), потому что вы не можете суммировать DATETIME. Я снова включу его сюда для справок в будущем, но я думаю, что раньше было немного касательно :)

Приведенный ниже код преобразует поле DateTime в двойное, суммирует результат, а затем преобразует его обратно в DateTime и форматирует его для hh: mm: ss

=Date.FromOADate(Sum(Fields!TheTime.Value.ToOADate())).ToString("hh:mm:ss")