我有一个BIRT报告,显示某些日期某些行的来电统计信息。现在我必须添加一个名为“呼叫处理时间”的新功能。数据从MySQL DB收集:
TIME_FORMAT(SEC_TO_TIME(some calculations on the duration of calls in seconds),'%i:%s') AS "CHT"
即使没有转换为String,我也无法在“mm:ss”格式中显示交叉表中的持续时间。我可以通过不将它们转换为时间/字符串来显示秒数,但这不是人类可读的。 此外,我应该添加一个“总计”来计算所有日子的平均值。使用秒时没问题,但我不知道如何以时间格式执行此操作。
我必须在查询,数据立方体定义和交叉表单元格中使用哪些数据类型/ functoins /表达式/设置才能使其正常工作?
答案 0 :(得分:1)
时间格式不是持续时间度量,不能归纳或用于平均值。解决方案是在数据立方体中将“秒”作为度量来计算聚合,并创建用于显示的派生度量。
在您的datacube中,选择此“秒”度量并单击“添加”以创建派生度量。我会使用BIRT数学函数来构建这个表达式:
BirtMath.round(measure["seconds"]/60)+":"+BirtMath.mod(measure["seconds"],60)
答案 1 :(得分: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;
}
}