Службы отчетов SQL Server форматируют часы как часы: минуты - PullRequest
2 голосов
/ 21 мая 2010

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Отвечая на мой собственный # 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)
2 голосов
/ 26 мая 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 обычно возвращают время в секундах, и это избавляет меня от необходимости слишком усердно думать, если мне нужно возвращать ЧЧ: ММ: СС более чем в одном месте. Кроме того, вы можете выполнить все свои агрегаты в обычном режиме и обернуть их так, чтобы получить красивый формат.

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

0 голосов
/ 09 января 2015

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

= Формат (DateAdd ("s", (Параметры! ReportParameter1.Value * 60), "00:00:00"), "ЧЧ: мм: сс")

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

...