【问题标题】:SSRS: Summing TimeSpan values in a reportSSRS:在报告中汇总 TimeSpan 值
【发布时间】:2023-04-03 03:37:01
【问题描述】:

我有一个报告和一个数据源,其中一列的类型为 TimeSpan。当我使用Fields!TheTime.Value 时,TimeSpan 值似乎在报告中正确显示,没有问题。

  • 07:02:00
  • 05:41:00

但我想对这些值进行求和以获得一组的总时间。在 C# 中,我当然可以做一个 TimeSpan + 另一个 TimeSpan,所以我知道可以添加它们。我试过了

=Sum(Fields!TheTime.Value)

但它最终会以某种形式打印出来。例如,对于上面的输出时间,我会得到 457800000000 作为总和。那到底应该是什么?

无论如何,如何在报告中汇总时间跨度值?对于上述时间跨度,我想以12:43:00 作为总和。除非我的头在数学上再次让我失望了......但你明白了:p

【问题讨论】:

  • 正如您在下面正确推断的那样,总和值是“tick”值。您还可以通过计算上述时间的秒数来看到这一点:07:02:00 = 25320s 和 05:41:00 = 20460s。 25320 + 20460 = 45780。

标签: reporting-services sum timespan


【解决方案1】:

sigh 解决方案非常简单……为什么我不能一开始就尝试呢?哦,好吧……也许是因为我没有意识到我可以访问TimeSpan 类……也许是因为我认为自己是盲人……但无论如何,它是:

=TimeSpan.FromTicks(Sum(Fields!TheTime.Value))

天哪!

【讨论】:

  • 我需要以“系统”作为前缀 - 例如。 =System.TimeSpan.FromTicks(Sum(Fields!Hours.Value))
  • @David:那你的代码文件中可能没有using System;
【解决方案2】:

@Svish - 我删除了我之前的帖子,因为我对自己的答案有一定的不确定性,但我同意@pfunk。

我终于恢复了 SSRS 并进行了尝试,看起来你的大数字是滴答数,所以看起来对结果进行一些格式化对你有用。

有趣的是,我之前令人费解的答案是求和 DateTime 值(在我的查询中使用 SQL Server DATETIME 数据类型)的解决方法,您无法在 SSRS(和 SQL)中执行此操作,因为您无法对 DATETIME 求和。我将再次将其包含在此处以供将来参考,但我认为之前有点切线:)

以下代码将 DateTime 字段转换为双精度值,对结果求和,然后将其转换回 DateTime 并将其格式化为 hh:mm:ss

=Date.FromOADate(Sum(Fields!TheTime.Value.ToOADate())).ToString("hh:mm:ss")

【讨论】:

  • 在哪里可以找到这些 Date.FromOADate 和 ToOADate() 函数?代码不起作用。尽管我可以编译,但在 Visual Studio 中画了一个红色下划线。但是当我运行它时,我只会在这些字段中得到#Error。
  • FromOADate 和 ToOADate 是 DateTime 类的方法,而不是 TimeSpan 类,我认为你的方法是 TimeSpan。关于您的解决方案的好消息 - 当它是一个简单的答案时,您不只是喜欢它吗:)
【解决方案3】:

可能发生的情况是,当您显示 Fields!TheTime.Value 时,SSRS 足够聪明,可以知道将其显示为 DateTime 类型的字段

当您在其中添加总和时,它认为它是一个数字类型字段并按原样显示(即,它对每个时间跨度字段中的“刻度”数求和)

尝试在字段属性中将总和值专门格式化为日期时间,它可能会正确显示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多