【发布时间】:2014-06-18 12:41:50
【问题描述】:
我们正在寻找一种更强大的方式来收集和处理要在我们的报告中处理的数据。对于一个大型数据库的高级报告,我们需要运行两个独立的 SQL 查询(在同一个数据源上),然后将它们组合起来。
查询1返回:
user id#1 ... 3 columns
user id#2 ... 3 columns
user id#4 ... 3 columns
查询 2 返回:
user id#1 ... 5 columns
user id#3 .. 5 columns
user id#4 ... 5 columns
我们想要展示的内容:
user id#1 ... 3 columns + 5 columns
user id#2 ... 3 columns
user id#3 ... 5 columns
user id#4 ... 3 columns + 5 columns
虽然这违反直觉,但我们发现在 SQL 中组合两个查询的结果会导致 SQL 查询的运行时间大大降低。
我们查看了子数据集,但据我了解,不可能将来自两个子数据集(或主数据+一个子数据集)的数据混合在一个表中。
我们已经查看了子报表,但据我了解,如果我按照我们的意图将子报表放在详细信息区域中,子报表将为报表中的每一行调用一次查询。但出于性能原因,我们希望运行我们准备的两个查询,并且每个查询只运行一次。
我们认为最合理的方法是我们用Java编写这样的高级报表,并且有可能,但是JavaBean数据源无法访问报表参数。我们的数据库很大,因此我们不能只在没有 where 的情况下进行查询,然后进行过滤,Java 代码需要访问报表参数。
我们目前正在研究实现 JRQueryExecutor as recommended there 和 there (last comment),甚至利用 scriptlet。
但这听起来真的很先进,我们想知道我们是在思考错误的方式还是朝着错误的方向前进?如果 JRQueryExecutor 是正确的方式,任何示例或文档都会受到欢迎。
我们也在考虑尝试重构我们的 SQL 以仅通过一个查询来实现结果,但我们确实认为报告系统应该允许我们也可以在 Java 中操作数据。
【问题讨论】:
-
你可能只需要使用 SQL Join 吗?
-
我提到“虽然它违反直觉,但我们发现在 SQL 中组合两个查询的结果会导致 SQL 查询的运行时间大大降低。”
-
需要很长时间?你确定在jasper中后处理会更快吗?
-
在原始java中更快。
标签: jasper-reports