birt 提供了不少报表交互性, 像是TOC (table of content) , Bookmark , Hyperlink , 图标的交互性和一些script 能够完成的工作. 但是有时候用户可能更需要的不是一开始把报表做成某种形式,而是查看了数据之后,觉得可能要自己来简单的更改一下报表的样式,并且保存下来, 随着数据的不同,同一个报表可能最后会随着分析角度的不同而出现不同的报表展现形式, 其中主要的用户交互性有: 动态排序, 动态过滤, 动态聚合,动态分组,动态显示隐藏列, 改变列的位置, 改变样式. 图表数据过滤,图表样式或格式的改变 (饼图变成柱状图之类的).
在开始介绍怎么样制作BIRT 的动态交互报表之前, IBM developerwork 上有一篇文章介绍BIRT的提示与技巧的文章建议大家先看看(看下面的参考资料) ,
1. 动态排序.
这个功能恐怕任何一个程序都会要求有的, 现在不少ajax 的table 基本上都有能够点击表头进行排序的功能.使用birt 制作动态排序的报表有几种方式. 有两种已经在IBM 上那篇文章介绍了, 一种方式是在表头上加链接,连接到另一个表,并且传递参数怎么排序的, 一种方式是改变sql 语句, 在where clause 后加sort by . 另外我还有两种动态排序的方式: 一种是通过客户端javascript 排序, 一种是通过BIRT API 在运行时排序. 客户端javascript 排序方式其实已经很普遍了, 不少Ajax 库都具有这种table 插件, 象是jquery 的jsgrid 或是flexigrid 插件,YUI 的table 插件也支持不少排序方式. 这种方式只要导入几个js 文件, 一两行代码就可以了,而且还有不少漂亮的样式. 另一种通过BIRT API 在运行时改变排序行为的方式也只需要几行script 就可以完成: 在table 的onPrepare() 事件加上以下代码:
importPackage (Packages.org.eclipse.birt.report.model.api.simpleapi);
if ( params["paramSortOrder"].value != null ){
var sortCondition = SimpleElementFactory.getInstance().createSortCondition();
switch (params["paramSortOrder"].value){
case “city” :
sortCondition.setKey(“row[\"CITY\"]“);
break;
case “state” :
sortCondition.setKey(“row[\"STATE\"]“);
break;
}
sortCondition.setDirection(“asc”);
this.addSortCondition(sortCondition);
}
里面使用的是table 的 addSortCondition 函数 , 当运行的时候,你可以输入你想要排序的列,报表在运行的时候根据你输入列的名称来排序,这种排序方式对于大数据量可能不适合,它不是在sql 里面加的排序条件,而是取出来之后排序的数据. 后面会附上一个实例报表,运行一下就知道了.
2. 动态过滤,动态聚合,动态分组
动态创建过滤条件,动态聚合,动态分组的方法跟上面的script 差不多,就是API 用的不一样, 在这里就不多介绍了,当然也可以通过建立参数过滤数据,建立分组条件来达到同样目的(虽然不是动态交互的).
3.,动态显示隐藏列,
创建一个控制显示一列的boolean 参数, 在column 的visibility 上填这个参数就够了.
4.改变列的位置
通过改变data binding 的方式, 改变Data元素的data binding.
5.改变样式
这个见的最多了,this.style.xxx = xxx 改变样式.
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0708tomlyn/
IBM 的developerwork BIRT 提示与技巧.
http://www.birt-exchange.com/devshare/designing-birt-reports/675-birt-interactivity/#description
介绍BIRT 交互性的, 基于BIRT 2.1
http://birtworld.blogspot.com/2007_03_01_archive.html
介绍怎么样动态隐藏table column 和 chart 数据的.
jquery 的一个table 插件, 支持排序,显示隐藏列,调整列的高度宽度等
http://developer.yahoo.com/yui/datatable/
YUI的table 插件,支持多种排序方式.