写在前言:对于数据产品而言,报表是数据产品的必要组件。在调研了润乾,Pentaho,Looker,Birt等组件后,最终决定选择Birt。

1. 报表参数传递

参数传递的应用场景比较广泛,在Birt设计器中有两个位置涉及到参数,一个是DataSet数据集创建的时候,有一个Parameters选项,另外就是在Data Explorer中有一个Report Parameters,这里主要介绍后者.因为Birt参数的对外接口就是Report Parameters,数据集中的参数也要通过这个报表参数去设置.

首先新建一个报表参数,如图:

这里创建一个默认名称的参数,其中Display type表示这个参数的显示类型,与它边上的hidden选项对应,如果hidden不打勾,说明这个参数会以Birt默认的View界面的形式表现.可以是多种形式,就是弹出一个窗口,要用户输入,这不符合项目的需要,所以通常我们将参数hidden.如下:

这时创建好了参数,说一点,这个参数的可作用范围是整张报表的rptdesign文件,在可以输入脚本和表达式的地方都可以通过params["NewParameter"].value使用.上面hidden复选框上面还有一个Is Requeired选项,如果勾选,意味必须要传递这个参数,否则报表会出错.

现在用这个参数,动态的改变一下数据集合,参数传递主要涉及几个问题,一个是URL传参,一个是同request传参,这是主要的两种传参方式,都会说明一下.

2. 报表维度动态变换

维度变化的应用场景在项目中应该也是比较多的,比如一个柱图根据用户下拉列表的选择不同,根据不同的维度统计一个度量.
如果按照Birt之前的做法需要为每个维度制作一个报表,这明显不符合我们的需要.这个功能之前在网上没有找到具体的资料,尝试过通过Birt Char API和图表表达式拼凑的种种方式,最后试验出现在通过数据集计算列这种方式实现,大家也可以自己尝试下别的方法.

继续用之前的报表文件,修改它的数据集,定义一个计算列,这个列通过参数不同,绑定不同的真实列.如图:

例子写的比较简单,如果传入的参数是1,那么这个计算的列的实际值就是ITEM_CLASS否则就是CLASS_ON_MR.最后数据集中如图:

数据集修改完毕,现在去修改Cube,在Cube里我们实际上需要的是dimension_parma这个维度,但是必须要将所有涉及到的维度,就是这个dimension_parma条件中包含的维度都加入到cube的维度中.如下:

现在Cube修改完毕,去修改图表里面的数据绑定.直接将dimension_parma绑定到X轴.如图:

现在测试一下,使用最简单的URL传参所以部署一下,将项目发布到Tomcat,访问结果如下:

3. 报表钻取

BIRT的钻取说白了就是网页上的超链接,点击链接会出现另一个页面而已,而需要注意的就是它可以以当前报表上的数据为查询条件进行查询,并在下一个页面中进行显示。

说明其步骤分为如下两步:

一、 准备两张报表,当然两个报表某些地方是需要有关联关系的.

我准备了两张报表,1是告警种类的统计信息,其参数为别为起始时间与结束时间。2是统计信息的明细信息,其参数为超时间、结束时间及主机名称。两个报表是通过报表1的主机名及输入报表的起止时间为关联进行关联的。

二、 为两张报表建立关联关系.

1、 选择要关系的数据字段并在属性编辑器中选择‘超级链接’。

2、 点击编辑,在弹出的对话框中选择钻取功能。

 3、 在‘第1步’中选择报表文件。

4、 确定后在在下面的‘报表参数’处会变成白色,在参数下的第一行单击鼠标左键会出现下拉列表,在其中选择要使用的参数,要注意的是有的版本只能逐行的这么点击,点击其它地方是没有反应的。

5、选择好参数后点击值处会变成如下形式,点击出现的按钮为参数设值,如果没有为参数设置必须的值那么点击主页面的链接后会弹出报表2的参数输入框要求输入必须的参数。

在弹出的表达式生成器中的类别会有可供选择的几个大类型,一般我用的是头两个,其中第一个是主报表用的数据集中可用的数据,如下图所示,第二个是报表参数,就是主报表中输入的参数

6、 这是我设置好的参数,确定后报表的链接部分便结束了。

最后发两张报表的运行效果图。

1、这是主报表,告警数量后会进行钻取

2、这是钻取后显示的页面。

上面就是报表钻取的方式,这里的超链接也可以设置在图表的Format Chart这个部分,这里有交互的相关设置.

参考资料:http://my.oschina.net/blogshi/blog/194704