我正在编写有关SQL Server报告服务器的报告,该报告具有由用户分组的许多小时,并且根据值的总和计算了总计。

目前,我的查询运行了一个存储的POC,该Proc返回了HH:MM格式,而不是小数小时,因为我们的用户发现它更直观。当我尝试使用SSRS表达式添加列时,就会发生问题,因为总和函数不足以处理此格式的添加时间。

有什么办法:

  1. 以小数形式计算时,以HH:mm格式显示时间间隔(以几分钟或小时为单位)?
  2. 或分开并计算HH:MM文本值的总数以作为表达式得出的总数?

我想避免不得不写/运行第二个查询只是为了获得总数。

有帮助吗?

解决方案

回答我自己的#1:

  1. 使您的查询返回数分钟(表示 TimeSpent 以下)。
  2. 如果尚未将文本框的格式设置为“常规”
  3. 使用以下表达式作为值:=FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
  4. 对于sum文本框,请使用以下表达式: =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

我的SP通常会在几秒钟内返回时间,这使我不必付出太多思考,如果我必须返回HH:MM:SS在一个以上的位置。另外,您可以正常进行所有聚合,并将它们包裹在此中以获得漂亮的格式。

我不能为此表示赞赏,因为我知道我前一次在网络上偶然发现了它,但我不记得在哪里。

因此,在您的情况下,您需要将其转换为秒,您可以尝试使用以下代码:

= format(dateadd(“ s”,(参数!reportparameter1.value * 60),“ 00:00:00”),“ HH:MM:SS”)

希望这可以帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top