1

我有一个 BIRT 报告,其中显示了某些日期对某条线路的呼叫的一些统计信息。现在我必须添加一个名为“呼叫处理时间”的新度量。数据是从 MySQL 数据库中收集的:

TIME_FORMAT(SEC_TO_TIME(some calculations on the duration of calls in seconds),'%i:%s') AS "CHT"

即使没有转换为字符串,我也无法以“mm:ss”格式在我的交叉表中显示持续时间。我可以通过不将它们转换为时间/字符串来显示秒数,但这不是人类可读的。此外,我应该添加一个“总计”来计算所有天的平均值。使用秒时没问题,但我不知道如何以时间格式做到这一点。

我必须在查询、数据立方体定义和交叉表单元格中使用哪些数据类型/函数/表达式/设置才能使其工作?

4

2 回答 2

1

时间格式不是持续时间的度量,它不能被总结或用于平均值。一种解决方案是将“秒”作为数据立方体中的度量来计算聚合,并创建派生度量以进行显示。

在您的数据立方体中,选择此“秒”度量并单击“添加”以创建派生度量。我会使用 BIRT 数学函数来构建这个表达式:

  BirtMath.round(measure["seconds"]/60)+":"+BirtMath.mod(measure["seconds"],60)
于 2013-07-12T07:11:40.740 回答
0

以下是一些需要注意的事项: 秒显示为单个数字值(如果 <10)。这是基于的“秒”值不是整数,所以我还需要另一个round()秒,这导致秒有时是“60”。所以我不得不引入更多的 JavaScript 条件来显示正确的格式,包括在“0:00”时根本不显示。对于“总计”列,我使用了秒值的汇总总计,并做了与下面完全相同的事情。

这是我最终使用的实际脚本:

if (measure["seconds"] > 0)
{
    var seconds = BirtMath.round(BirtMath.mod(measure["seconds"],60));
    var minutes = BirtMath.round(measure["seconds"]/60);
    if(seconds == 60)
    {
        seconds = 0;
    }
    if (seconds < 10)
    {
        minutes + ":0" + seconds;
    }
    else
    {
        minutes + ":" + seconds;
    }
}
于 2013-07-12T09:49:03.723 回答