BIRT:具有动态表名的数据集

时间:2014-12-02 16:45:59

标签: birt

我是Birt的新手,所以我可能会以错误的方式做这件事......

我需要做的是在报告中显示一些统计数据。 数据将在一些特殊表格中一夜之间准备好(我想使用物化视图,但在通过JDBC连接到我的数据库时无法在Birt报表设计器中找到它 - 所以我将使用表格)。

我需要绘制的典型图表是: - X轴上的月份 - Y轴上的值。

对于Y轴,会有多个系列...但我不知道有多少。每个系列数据都将从我刚才上面讨论的那些特殊报告表中提取。

我有两个主要问题: - 如何在图表上显示N系列,N未知? - 如何动态化数据集中的表名?

还有更多的Birt-ish方法吗?也许我从一开始就完全错了,真的不知道。

感谢您的帮助。

1 个答案:

答案 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”菜单,我们可以创建任意数量的系列。