我是Birt的新手,所以我可能会以错误的方式做这件事......
我需要做的是在报告中显示一些统计数据。 数据将在一些特殊表格中一夜之间准备好(我想使用物化视图,但在通过JDBC连接到我的数据库时无法在Birt报表设计器中找到它 - 所以我将使用表格)。
我需要绘制的典型图表是: - X轴上的月份 - Y轴上的值。
对于Y轴,会有多个系列...但我不知道有多少。每个系列数据都将从我刚才上面讨论的那些特殊报告表中提取。
我有两个主要问题: - 如何在图表上显示N系列,N未知? - 如何动态化数据集中的表名?
还有更多的Birt-ish方法吗?也许我从一开始就完全错了,真的不知道。
感谢您的帮助。
答案 0 :(得分:2)
数据库不允许使用常规查询参数动态化表名,因此我们需要通过脚本来处理它。
最简单的方法是使用DB存储过程执行此操作:BIRT数据集查询仅使用表名作为参数调用数据库的存储过程。以下是使用MySql JDBC进行此类数据集查询的示例:
CALL `myschemaname`.`mystoredprocedure`(?);
这里,问号'?'是一个查询参数,在数据集编辑器中,我们将其链接到表示表名的报表参数。然后,此存储过程构建动态查询并返回相关数据。
另一个选择是在BIRT数据集的“beforeOpen”脚本中注入表名:
1-在数据集中,使用任意有效的表名初始化查询,例如:
select *
from myvalidtablename
2-在Eclipse设计器中选择数据集 - >脚本标签 - > beforeOpen
假设表名在报表参数中:
this.queryText=this.queryText.replace("myvalidtablename",params["myTableNameParam"].value);
关于如何处理N系列,它取决于表中数据行的设计方式。两个主要案例:
案例1 - 系列分为多行:
month1;serie1;value
month1;serie2;value
month2;serie1;value
month2;serie2;value
这是最聪明的情况,因为它是在带有“选项Y系列分组”的BIRT图表中动态处理的。这就是this chart的工作原理:country field设置为可选分组,BIRT处理所有内容。
案例2 - 系列分为多列:
month1;valueSerie1;valueSerie2
month2;valueSerie1;valueSerie2
在这种情况下,我们需要明确地声明每个系列。在图表编辑器中,通过下拉“Value(Y)series”菜单,我们可以创建任意数量的系列。