根据iReport中的变量对结果集进行排序

时间:2012-10-12 10:02:23

标签: jasper-reports ireport

我的结果集包含列:

interval_start(timestamp) , camp  , queue , other columns
2012-09-10 11:10            c1      q1
2012-09-10 11:20            c1      q2

interval_start 的值间隔为10分钟,如:

2012-09-10 11:10,

2012-09-10 11:20,

2012-09-10 11:30 ....

使用 Joda Time 库和 interval_start 字段,我创建了一个变量来创建字符串,以便 interval_start 的分钟位于00- 30,30设置为分钟,否则00设置为分钟。

我想将数据分组为:

camp as group1
variable created as group2
queue as group3

并完成了一些聚合

但在我的报告结果中,我在相同的时间间隔内多次获得相同的队列 我使用过order by camp, interval_start, queue,但问题仍然存在。

附上截图供您参考:

enter image description here

有没有办法根据创建的变量对 resultset 进行排序?

1 个答案:

答案 0 :(得分:0)

最佳猜测是您的实际SQL查询的问题。你说同一个队列正在重复,但从查看你的图像实际上并没有重复它是一个不同的行。

您的查询很难实现,因为您真的希望查询按order by camp, (rounded)interval_start, queue排序。如果没有它,则按camp列排序,然后排序interval_start的非舍入版本,然后camp。当意味着数据的顺序不正确时,Jasper Reports会按照您希望的方式对它们进行分组。然后真正的踢球者是Jasper Reports,一旦获得数据,就没有对数据进行排序的功能。由开发人员提供。

所以你有几个选择:

  1. 更新您的SQL查询以进行四舍五入的时间。根据您的数据库,这是以不同的方式完成的,但可能需要某种类型的存储过程或函数来处理它(例如,请参阅此TSQL function)。
  2. 而不是在报表中使用sql查询,将其移到报表之外,并处理数据,在java端进行舍入和排序。然后传递它作为REPORT_DATASOURCE参数。
  3. 在表格中添加一列以存储舍入时间。您可以创建一个触发器来处理数据库中的所有操作,而无需更改应用程序中的任何其他代码。
  4. 老实说,这两个选项都不理想,我希望有人出现并提供证明我错误的答案。但我认为目前没有更好的方法。