摘要:Eclipse的商业智能和报表工具(BIRT)项目是一个基于当今流行的Eclipse IDE的开源项目,用于在Java或者J2EE环境下构建和部署报表。这次eclipse BIRT2.3版随着eclipse 3.4的发行版Ganymede一同发行, 本文将以实例的方式介绍这次BIRT 的新功能,我们讲重点介绍其中部分大家最关心的特性包括Crosstab增强,脚本和图表. 如果你想了解完整的BIRT 2.3新功能,你可以查看它的发行说明:
http://www.eclipse.org/birt/phoenix/project/notable2.3.php
1. Crosstab增强
Crosstab 是最适合用来展示行和列不固定的表样,一个Crosstab 一般都是由度量和维组成,BIRT 2.2的时候Crosstab 还只能展示基本的信息,这次BIRT 2.3一次为我们带来了很多增强功能.
1 Crosstab 可以有Crosstab 头部标签.

图1 . Crosstab 的头部标签(左上角红色部分)
2 Crosstab 度量过滤
在之前的版本,Crosstab 只能在维上过滤,这次2.3 版同样支持在度量上过滤了.
图1 中所示就是在度量上过滤掉销售额小于50,000的结果.

图2 , Crosstab 度量过滤
3. Crosstab 空 行/列 配置
Crosstab现在支持当数据不存在的时候单元格的显示. 你可以制定任意文本.

图3 配置Crosstab 当有空行或列时的显示
4. 图形显示度量
一般的Crosstab都是输出数字度量,现在BIRT 2.3 同时还支持图表显示数据. 
图4 : 图表显示Crosstab 的数据
5. 独立的图表输出
在使用图表输出的时候,你同样可以使用图表向导来分别显示度量按照垂直维的聚合或者水平维的聚合.
如果你按水平维聚合就会像下面第一个图表一样,图形是横向的,如果你按照垂直维聚合,就会像第二个图表一样图表是水平的.

图5 Crosstab的水平或垂直显示图表
6. 派生维
当你想在Crosstab里面使用某种自定义计算的时候,你可以使用派生维, 它跟一般的Data Binding是一样的,你可以使用所有在Crosstab 里面的数据. 并且它还有一个菜单项帮你创建派生维.

图6 派生维
7. 事件支持
Crosstab现在同样支持onPrepare() , onCreate() 和 onRender() 方法.下面的例子演示了Crosstab 的事件和脚本支持.新的Script编辑器同样会显示当前事件是onPrepareCell 还是onPrepareCrosstab .

图7 : Crosstab 支持的onPrepare() , onCreate() , onRender() 事件

图8 Crosstab 的脚本输出

图9 Script 编辑器提示
8. Crosstab图表的beforeDrawMarker , afterDrawMarker 事件支持.
新的Crosstab 图表增加了Marker Handler 用来处理beforeDrawMarker() 和 afterDrawMarker() 事件.

图10 : Crosstab 新图表事件beforeDrawMarker() 和 afterDrawMarker()
2. 图表增强.
1 多视图项目(Multi-View Items)
BIRT现在支持把数据绑定到表格,Crosstab , 图表,同样的,数据也可以从表格,Crosstab ,图表里面取出. 现在BIRT支持报表元素有多试图,这些视图都可以共享同样的数据,过滤条件和聚合条件。这些数据视图可以决定它们如何被显示并且和另一个报表元素共享绑定的数据和同一个图表空间. 目前只有表格和Crosstab 支持这个特性,并且第二个视图必须是图表.你可以通过点击表格或Crosstab 然后选择 Create Chart View 菜单.
2 聚合和排序增强.
新的图表现在支持按照分类和Y轴的任意聚合条件进行排序. 同时还加入了一些新的聚合单元类型, 包括时间类型的季度,
3 图表数据源可以是cube元素
新的嵌入式图表可以使用报表的cube数据 , 也就是你在Crosstab 里面看到的图表.

图11: 图表的Data Cube 数据源
4 Cube 图表也可以添加过滤条件
使用Cube 数据源创建的图表同样可以在上面添加过滤条件,你可以过滤选择的值,分类或者Y 轴的聚合数据.
5 饼图可以任意角度旋转.
BIRT 2.3 可以将饼图的第一个切片用任意角度摆放,你可以使用图表编辑向导的饼图旋转滑块来设置.

图12 设置饼图的角度
6 长轴标签增强
现在BIRT 支持当轴的标签文字很长的时候用省略号省略一部分文字.
7 更多图表示例
现在在图表示例试图里面添加了一些新的示例报表用来展示新的图表增强功能.
3. 脚本增强
新的BIRT 2.3 在脚本功能上也有不少新功能,比如前面已经介绍的Crosstab 里面的事件增强功能. 图表里面增加的beforeDrawMarker() 和afterDrawMarker() 事件. 同时它还包括下面一下新的功能.
1. BIRT JavaScript 调试器
BIRT 的事件可以在报表生成或者展现的时候用来处理自定义问题,你可以使用 Java 或者JavaScript 来编写,这些事件处理程序可以用外部代码修改报表内容或在报表引擎处理报表的时候改变它们的行为. 在之前的版本中,如果你想调试用Java 写的事件处理程序,你可以像调试普通Java 程序那样在eclipse 里面编辑. 但是对于JavaScript 事件处理程序却没有提供类似的功能. 新的BIRT 2.3 版本现在支持JavaScript 的调试器, 这个调试器可以和报表调试启动配置一起工作.

图13 报表调试启动配置窗口
当触发事件后,你可以一步一步的执行,或者设置断点.

图14 JavaScript 设置断点
2. JavaScript 编辑器的增强
新的 JavaScript 编辑器编辑页面可以列出一个报表元素所有的事件方法,而不是一次只列出一个方法, 编辑器同样也支持代码折叠,设置断点.

图15 增强的JavaScript 编辑器
3. Script 自动验证
新的JavaScript 编辑器可以帮助开发者更好的验证代码,包括在编译前验证或者调试的时候发现错误的代码. 
图16 调试的时候发现错误

图17 编译之前自动验证
4 更友好的出错信息提示
在提供脚本验证之外,BIRT 同样也提高了错误信息的描述.以便于我们更好的发现问题

图18 更好的出错信息
本文作者: gemini5201314 (gemini5201314@gmail.com)
4. 其他一些增强功能
1 更好的外部样式表支持
BIRT 可以把元素的样式放在报表元素里面,创建一个新样式(同样也是储存在报表里),或者从一个外部样式文件导入(就像CSS 那样),或者连接到外部的样式表 , 之前的版本中连接样式表文件必须放在resource 文件夹里面, BIRT 2.3 现在支持报表可以在查看的时候连接外部样式表. 它可以引用一个完整或者相对的URL.
比如你可以使用resource/style/ LinksPasteBlue.css 文件, 它的相对URL是根据你的应用程序位置而设定.

图19 相对或绝对URL 链接 ,只在HTML 输出使用样式表.
2. 水平分页支持
当开发一个包含很多列的报表时,如何合理的控制页面宽度就变成了一个问题,BIRT 2.3 新增加的水平分页功能能同时支持表格和Crosstab , 你可以通过点击你想要分割的那一列然后在Page Break 的After 里面设置Always 属性. Crosstab 同样可以通过点击Column Area 的Page Break 来水平分页.

图20 水平分页
3 Library 改变
原来的Library Explorer 试图现在改名叫作Resource Explorer ,它包括多项改进包括使用特定的resource folder 可以导航所有的资源包括图片,脚本,jars 和libraries , 在UI上也有许多的改变,包括在resource folder添加或创建内容,另外你可以使用菜单添加任何一个报表的元素到library.

图21 新的Library
4 多结果集储存过程支持
BIRT 现在支持通过JDBC Driver 来调用储存过程. BIRT 2.3现在的编辑器提供一个新的选项让开发者来选择执行的储存过程的名字和数量. Oracle 的储存过程也可以有输出参数.

图22 多结果集储存过程
5 粘贴复制样式表格式
BIRT 支持连接或者导入样式表给报表元素,这可以让报表元素之间共享一些属性,BIRT 2.3 现在可以从一个报表元素上面复制样式到另外一个元素上面, 当然,你也可以使用Ctrl+C 加上Ctrl+ V

图23 复制粘贴样式
6 项目特定设置
Eclipse 在3.4版本中支持了每一个项目可以单独使用一个特定的项目设定,BIRT 现在同样可以一个项目使用一个或多个设定,这些设定就是你在preference 页面可以看到的BIRT 的项目设定,包括预览的行数,crosstab 的设定,元素的名称,resource 和 template 文件夹的位置等. 现在你可以将这些设定导出或储存起来, 从而可以提供多个项目使用, 或一个项目在开发或部署的时候使用不同的项目设定.

图24 项目特定设定
7. 添加JavaScript文件UI 支持
如果你要调用一段脚本多次的话,你可能更愿意将这些脚本写进一个JavaScript 文件里,这样,每次你调用的时候就不用重复函数体了,并且当你修改的时候也只用修改一处. 你可以把创建这些函数的过程放在beforeGeneration 事件之前并储存进reportContext 以便全局调用. BIRT 现在也提供一个GUI 菜单让你把resource folder 里面的JavaScript 文件添加进报表,这样,当JavaScript 文件添加进去以后,你就可以在BIRT 的脚本表达式或事件实现里面调用这些函数. 这个按钮被添加在了报表的general properties 里面的resources tab 下面. 你也可以把这个应用在library 里面. 之前的版本也支持这个功能,只是没有GUI,你可以在报表开头添加
<list-property name=”includeScripts”>
<property>myjsfile.js</property>
</list-property>

图25 添加JavaScript GUI支持
8. Connection Profile 向导
当创建一个数据源时,开发者可以使用connection profile 来取得数据源的属性, 这个connection profile 是被DTP Data Explorer 试图创建的,它包括用户名和密码,在之前的版本中,你必须先创建connection profile ,然后才能在创建report 的时候使用它,现在BIRT 2.3 提供一个新的向导让你在data source 编辑器里面就可以创建connection profile.
9 SQL Query Builder 原型
BIRT 2.3提供一个来自DTP SQL Query Builder (SQB)的功能并使用了DTP的Database Connectivity framework. 这个集成的SQB功能同时提供一个图形化的构建器和一个文本编辑器来创建SQL Query , 用户无论是使用文本编辑器或图形编辑器都可以自动反映到另外一个. 它使用了一个内建的SQL 分析器,目前这一功能还只是一个原型,并且不提供任何向后支持.

图26 新的Query Build
10 预览扩展点
BIRT 现在使用应用程序上下文对象来储存引擎的配置信息,比如图像的位置, 生成超链接时的URL配置, 图表生成的时候图片的格式 ,这些应用程序上下文在报表生成和展现的时候都可用,你可以使用Report Engine API 或者session 变量. 在你运行BIRT 之前,你可以把这些定制化的信息储存在应用程序上下文中,然后使用BIRT 表达式或者脚本来取得这些属性,这对于开发的时候测试或调试报表的时候尤其有用. 现在BIRT 提供一个预览扩展点,这个扩展点提供一个插件让程序在运行报表之前改变应用程序上下文.
应用程序扩展点提供两个函数,getName()和getAppContext() ,getName() 用来命名你实现扩展点的名字,getAppContext() 用来从你的插件取得应用程序上下文.

图27 预览的扩展点
图
11 边框样式
现在BIRT 2.3 提供了四种新的边框样式: Groove, Ridge, Inset, and Outset .

图28 新的边框样式
12 新的聚合函数CONCATENATE
BIRT 2.3 提供一个新的聚合函数CONCATENATE 用来吧字符串连接在一起,你可以指定中间用什么符号隔开比如逗号或分号.

图29 新的CONCATENATE 函数
13 生成report Document
新的report run 菜单里面有一个新选项可以让你选中的report 生成report Document.

图30 生成report Document 菜单
另外还有一些新功能或增强,下面一次性列出:
双向报表的支持,主要用来支持阿拉伯语言的报表
新的数据装载API 用来取得和装载数据集,主要用来输出像是CSV 这样的格式.
Pdf 和postscript 的模板优化,减少了这些模板的体积
新的应用程序上下文可以在报表运行的时候设定JDBC Driver的classpath. 你可以在应用程序上下文里面使用(“OdaJDBCDriverClassPath”) 把属性传给报表查看器.
另外新的ROM (Report Object Model) 从eclipse help 的文档菜单移除了,在之前的版本,你都可以在eclipse 的help 菜单中看到BIRT 的ROM的,新版本中由于很多BIRT 报表引擎,设计引擎和图表引擎的API上的改变, 所以将ROM 从eclipse help 菜单中移除,如果你想查看新的ROM ,你可以从eclipse 的站点下载它的birt-source 包,里面还是包括了ROM ,不过上面的文档不一定是最新的,随时可能因为API的改变而改变.
在新的BIRT 2.3版本中我们看到了强大的开源报表工具框架BIRT 不仅添加了很多激动人心的新功能,同时还做了许许多多易用性上的改进.作为一款免费并且开源的产品,相信更多人会选择BIRT 作为他们报表开发的第一选择.
如果你对BIRT 有兴趣的话,你可以在以下站点找到更多BIRT资源,包括很多文章,报表示例,代码等.
http://www.eclipse.org/birt/phoenix/ birt 官方站点,提供下载,教程,代码等各种资源.
http://www.birt-exchange.com/ Actuate 建立的用来宣传birt 的社区,你可以在上面找到很多报表示例,你也可以在上面提问, 会有很多Actuate 回答你的问题
http://www.actuatechina.com/ Actuate 的中文社区,你在上面可以用中文提问,安迅的工程师会第一时间为你做出解答.