Службы SQL Server Reporting Services форматируют часы как часы:минуты

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

В настоящее время мой запрос запускает хранимую процедуру, которая возвращает часы в формате ЧЧ:ММ, а не десятичные часы, поскольку наши пользователи считают это более интуитивным. Проблема возникает, когда я пытаюсь сложить столбец с помощью выражения SSRS, потому что функция SUM недостаточно умна, чтобы обрабатывать время сложения в этом формате.

Есть ли способ:

  1. Отображать временной интервал (в минутах или часах) в формате ЧЧ:ММ, рассчитывая его в десятичной форме?
  2. Или разделить и вычислить сумму текстовых значений ЧЧ:ММ, чтобы получить итог в виде выражения?

Я бы не хотел писать/запускать второй запрос только для того, чтобы получить общее количество.


person Frank Schmitt    schedule 21.05.2010    source источник


Ответы (3)


Отвечая на мой собственный # 1:

  1. Сделайте так, чтобы ваш запрос возвращал количество минут (обозначается TimeSpent ниже).
  2. Установите формат вашего текстового поля на «Общий», если он еще не
  3. Используйте следующее выражение в качестве значения: =FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
  4. Для текстового поля суммы используйте следующее выражение: =FLOOR(Sum(Fields!TimeSpent.Value) / 60) & ":" & RIGHT("0" & (Sum(Fields!TimeSpent.Value) MOD 60), 2)
person Frank Schmitt    schedule 21.05.2010

Вы также можете попробовать поместить эту функцию в пользовательский код вашего отчета.

Function secondsToString(seconds As int64) As String
Dim myTS As New TimeSpan(seconds * 10000000)
Return String.Format("{0:00}:{1:00}:{2:00}",myTS.Hours, myTS.Minutes, myTS.Seconds)
End Function

Мои SP обычно возвращают время в секундах, и это избавляет меня от необходимости слишком много думать, если мне нужно вернуть ЧЧ:ММ:СС более чем в одном месте. Кроме того, вы можете делать все свои агрегации как обычно и обернуть их в это, чтобы получить красивый формат.

Я не могу взять на себя ответственность за это, поскольку я знаю, что наткнулся на это в Интернете некоторое время назад, но я не могу вспомнить, где.

person KennyNeal    schedule 26.05.2010

Итак, в вашем случае это минуты, поэтому вам нужно преобразовать их в секунды, вы можете попробовать использовать код ниже:

=Формат(ДатаДобавить("с",(Параметры!ПараметрыОтчета1.Значение * 60), "00:00:00"),"ЧЧ:мм:сс")

Надеюсь это поможет

person Aadspro Sandr    schedule 09.01.2015