Службы отчетов SQL Server Формат часов как часы: минуты
Вопрос
Я пишу отчеты на сервере отчетов SQL Server, который имеет несколько часов, сгруппированных, скажем, пользователем и общее количество, рассчитанное на основе суммы значений.
В настоящее время мой запрос управляет хранимым ProC, который возвращает часы, как в формате HH: MM, а не за десятичные часы, поскольку наши пользователи считают более интуитивным. Проблема возникает, когда я пытаюсь добавить столбец, используя выражение SSRS, потому что функция суммы недостаточно умна, чтобы обрабатывать время с добавлением в этом формате.
Есть ли способ:
- Отображение временного интервала (в минутах или часах) в формате HH: MM, в котором его рассчитывается в десятичной форме?
- Или разделить и рассчитать общее количество текстовых значений HH: MM, чтобы прибыть в общей сложности как выражение?
Я хотел бы избежать необходимости писать / запустить второй запрос, чтобы получить общую сумму.
Решение
Отвечая на мой собственный # 1:
- Сделать ваш запрос возвращать несколько минут (обозначается
TimeSpent
ниже). - Установите формат вашего TextBox на «General», если это еще не
- Используйте следующее выражение в качестве значения:
=FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
- Для суммой TextBox используйте следующее выражение:
=FLOOR(Sum(Fields!TimeSpent.Value) / 60) & ":" & RIGHT("0" & (Sum(Fields!TimeSpent.Value) MOD 60), 2)
Другие советы
Вы также можете попробовать поместить эту функцию в пользовательском коде вашего отчета.
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
Мои SPS вообще возвращают время в считанные секунды, и это удерживает меня от того, чтобы слишком усердно думать, если я должен вернуть HH: MM: SS в более чем на одном месте. Кроме того, вы можете делать все ваши агрегации нормально и обернуть их в этом, чтобы получить красивый формат.
Я не могу взять кредит на это, как я знаю, я наткнулся на него в Интернете некоторое время назад, но я не могу вспомнить, где.
Таким образом, в вашем случае его минут, поэтому вам нужно преобразовать его в секунды, вы можете попробовать использовать код ниже:
= Формат (DateAndd («S», (параметры! ReportParameter1.value * 60), "00:00:00"), "hh: mm: ss")
Надеюсь это поможет