Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / сложить время в столбце (MS Reproting Services 2008) / 4 сообщений из 4, страница 1 из 1
27.06.2012, 11:04
    #37856404
r12
r12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложить время в столбце (MS Reproting Services 2008)
Здравствуйте,
MS Reproting Services 2008, отчеты пишу в Report Builder 3.0

есть запрос:
приведу кусок...
Код: sql
1.
2.
3.
SELECT     	CONVERT(date, X.EnterTIME) AS EnterDATA, 
		CONVERT(time, X.EnterTIME) AS EnterTIME, 
		CONVERT(time, (X.EnterTIME - grafik.start)) AS opa



в графе "opa" (это время на сколько опоздал работник) - получается время - 00:15:23 и тому подобное.... 05:35:37

делаю группировку по работнику и хочу получить суммарное время опоздание по каждому работнику
для этого в группе, там где итог, пишу выражение =Sum(Fields!opa.Value)
конечно же он мне выводит какие то непонятные цифры :)
если добавить =CONVERT(time, Sum(Fields!opa.Value)) то выдает ошибку:
В выражении Value для фрагмент текста "Textbox39.Paragraphs[0].TextRuns[0]" содержится ошибка: [BC30108] 'CONVERT' is a type and cannot be used as an expression.

Подскажите как можно просуммировать время по колонке "opa". Время может быть в итоге и такого вида 107:35:33
...
Рейтинг: 0 / 0
27.06.2012, 20:05
    #37857810
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложить время в столбце (MS Reproting Services 2008)
r12,

один из вариантов (из личного опыта)

Вместо
Код: sql
1.
CONVERT(time, (X.EnterTIME - grafik.start)) AS opa


сделать разницу в секундах, будет некое целое число:
Код: sql
1.
datediff(ss, grafik.start, X.EnterTIME) as opa


Просуммировать это целое число - без проблем.

А на экран вместо целого числа выводим в формате дни:часы:минуты:секунды
по формуле:
Код: sql
1.
=int(Fields!opa.Value/86400) &":"& int(Fields!opa.Value/3600) mod 24 &":"& int((Fields!opa.Value mod 3600)/60) &":"& Fields!opa.Value mod 60
...
Рейтинг: 0 / 0
28.06.2012, 10:48
    #37858392
r12
r12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложить время в столбце (MS Reproting Services 2008)
user89,
спасибо большое, все прекрасно работает :)
сделал вот так:
Код: sql
1.
,datediff(ss, CONVERT(time,grafik.start), CONVERT(time,X.EnterTIME)) as opa12


а вывожу вот так:
Код: sql
1.
= int(Sum(Fields!opa12.Value)/3600) &":"& int((Sum(Fields!opa12.Value) mod 3600)/60) &":"& Sum(Fields!opa12.Value) mod 60


это как раз как я и хотел :) (что бы были не дни, а именно часы)

и для проверки вот как:
Код: sql
1.
=int(Sum(Fields!opa12.Value)/86400) &"дней "& int(Sum(Fields!opa12.Value)/3600) mod 24 &":"& int((Sum(Fields!opa12.Value) mod 3600)/60) &":"& Sum(Fields!opa12.Value) mod 60
...
Рейтинг: 0 / 0
28.06.2012, 11:28
    #37858487
Klick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложить время в столбце (MS Reproting Services 2008)
Еще от предшественников досталась такая функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function SecsNToHSM(Secs As Integer) As String
	Dim AvgSecs
	Dim HourStr
	Dim MinStr
	Dim SecStr
	Dim N = 1

	SecsNToHSM = "00:00:00"
	If N > 0 Then
		AvgSecs = Round(Secs / N, 0)
		
		SecStr = CStr(AvgSecs Mod 60)
		If Len(SecStr) = 1 Then SecStr = "0" + SecStr
		
		MinStr = CStr(Int(AvgSecs / 60 Mod 60))
		If Len(MinStr) = 1 Then MinStr = "0" + MinStr
		
		HourStr = CStr(Int(AvgSecs / 3600))
		If Len(HourStr) = 1 Then HourStr = "0" + HourStr

		SecsNToHSM = HourStr + ":" + MinStr + ":" + SecStr
	End If
End Function


В Code отчета запихиваешь ее и, собственно, профит! Писанины меньше в разы получается.

Код: vbnet
1.
=Code.SecsNToHSM(бла-бла-бла)
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / сложить время в столбце (MS Reproting Services 2008) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]