Службы отчетов SQL Server Формат часов как часы: минуты

StackOverflow https://stackoverflow.com/questions/2884919

  •  04-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

  1. Сделать ваш запрос возвращать несколько минут (обозначается TimeSpent ниже).
  2. Установите формат вашего TextBox на «General», если это еще не
  3. Используйте следующее выражение в качестве значения:=FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
  4. Для суммой 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")

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top