0

我无法汇总存储在 SQL 事实表中的电话通话时间

我有一个电话通话时间的 SQL 表,按人分类,在 Cognos Analytics 数据模块中使用。

我想在交叉表中使用这些数据,并以 HH:MM:SS 报告每个人的总通话时间。

当我尝试总计时间时,SQL 列的格式为 time(0),Cognos 抛出 [MSR-VRF-1202 The column "Call Length" has the data type "time" and can't be aggregated] 错误。

显示总通话时间的正确方法是什么。

更新

通过在 Cognos Anaytics 中使用大量查询计算,我已经成功解决了一半的问题。我更新了 SQL 事实表以包含以秒为单位的新时间度量,然后使用下面的查询项。

HH as FLOOR(TOTAL([CALLTIMEINSECONDS])/3600)

MM as FLOOR(([CALLTIMEINSECONDS]-[HH]*3600)/60)

SS 为 [CALLTIMEINSECONDS]-([HH]*3600)-([MM]*60)

HH1 为 IF ([HH]<10) THEN ('0'+CAST([HH],VARCHAR(4))) ELSE (CAST([HH],VARCHAR(4)))

MM1 作为 IF (MM<10) THEN ('0'+CAST(MM,VARCHAR(2))) ELSE (CAST(MM,VARCHAR(2)))

SS1 作为 IF (SS<10) THEN ('0'+CAST(SS,VARCHAR(2))) ELSE (CAST(SS,VARCHAR(2)))

一直为 [HH1]+':'+[MM1]+':'+[SS1]

这适用于单个交叉表行,但不会汇总,也不适用于任何图表。

4

2 回答 2

1

为什么两个人会花时间阅读并投票否决真正的援助请求?我认为这是一个分享知识和经验的地方。很明显,这些人需要更多的出去,生活,或者被安排。对不起,我无能为力,但希望其他人会

于 2019-02-16T16:54:29.053 回答
0

我会假设

  • 您将使用术语时间和持续时间作为同义词。
  • 您正在使用 MS SQL Server。

相应地调整您的最终解决方案。

我在 SQL 中的解决方案是:

format(sum(DATEDIFF(second, TIMEFROMPARTS(0,0,0,0,0), [CallDuration])) / 3600, '0#') + ':' + 
format(sum(DATEDIFF(second, TIMEFROMPARTS(0,0,0,0,0), [CallDuration])) / 60, '0#') + ':' + 
format(sum(DATEDIFF(second, TIMEFROMPARTS(0,0,0,0,0), [CallDuratoin])) % 60, '0#')

基于 Cognos 的解决方案可能涉及多个查询。以下是基本部分:

  • 将时间转换为数字。
  • 对数字求和。
  • 将求和的数字转换为时间(或时间部分——小时、分钟、秒)。
  • 格式化输出。

如果您单独计算部分,则可以在页面上进行格式化,而不是将 Cognos 查询为 5 个文本项,其中一些具有Text的Source 类型,而另一些具有Report ExpressionData item value的Source 类型。换句话说,3 个查询计算和 2 个文本项。

<hours>:<minutes>:<seconds>
于 2019-02-20T01:11:01.357 回答