简介
Eclipse 的商业智能和报表工具(BIRT)项目是一个基于当今流行的 Eclipse IDE 的开源项目,用于在 Java 或者 J2EE 环境下构建和部署报表。该项目提供的主要下载项中包括以下内容:
- BIRT 设计器—用来构建报表。
- Web 查看器—一个用来部署报表的 J2EE 示例,其中包含了一个 JSP 标签库以降低与现存的 web 应用的耦合。
- BIRT 制图包—支持构建复杂的图表。
BIRT 项目于 2005 年夏天发布了第一个主版本并且到目前为止已经拥有了超过 100 万的下载量。请访问 http://www.eclipse.org/birt 来更多地了解 BIRT 项目,这上面有关于 BIRT 项目的介绍,指南,下载以及使用的例子。我们将以对 BIRT 设计器的介绍作为本文的开始,并且以对 BIRT 查看器的讨论作为本文的结束。其中,BIRT 设计器用来进行报表的设计,而 BIRT 查看器则用来部署设计以及产生最终的报表。
BIRT 2.2 Collage
BIRT 设计器
在 BIRT 的中间位置是由一系列 Eclipse 插件组成的报表设计器,这些插件构成了一个提供拖拽能力以快速设计报表的设计透视图。报表是以 XML 格式创建和存储的。
Figure 1 - Eclipse BIRT Designer
此 Eclipse 透视图包含了很多视图,这些视图提供了创建报表的功能。我们将在后面对此进行阐述。
报表编辑器
报表编辑器用来构建报表并且扮演着一个画布的角色来定位和格式化报表元素。在该视图中有很多标签页,例如布局,母板页,脚本,XML 源以及预览。
- 布局标签页用来对报表进行可视化布局并且提供了拖拽的功能。
- 母板页用来设定整个报表的头,脚以及背景图片。例如,该页通常是所有报表头的位置。
- 脚本标签页提供了对 JavaScript 编辑器的访问。BIRT 支持这样一种事件模型,在该模型中可以使用 Java 或者 JavaScript 来改写事件处理器。我们可以在报表产生和渲染阶段调用这些事件处理器,并且这些事件处理器还能修改报表属性,比如改变字体颜色,数据值以及调用外部代码。
- XML 源标签页可以显示 XML 源代码用于报表设计。尽管通常情况下最好使用布局视图,但也可以在此标签页中编辑 XML 代码。
- 预览标签页允许报表设计者快速地将报表转化为 HTML。 注意你也可以利用工具栏以其他被支持的格式来预览报表。
Figure 2 - BIRT Preview
数据浏览
在构建报表之前,我们通常都要建立数据源。BIRT 提供了数据浏览视图以简化该任务。
Figure 3 - Data Explorer View
Eclipse 视图允许设计者向报表设计器中添加数据源和数据集。本质上,一个数据源仅仅就是数据连接。数据集可以被理解为一个可执行的查询以及该查询所返回的特定的列。
BIRT 提供了对 JDBC,XML,flat file(译者注:falt file 是一个只能连续的读写的计算机文件。它包含一条或多条记录,每个记录包含一个或多个字段, http://en.wikipedia.org/wiki/Flat_file)和脚本化的数据源的驱动。随着 BIRT2.2 的发布,BIRT 还提供了一个 Web Service 数据源和一个改进的 flat file 驱动,现在该驱动已经支持 CSV,TSV,SSV 以及 PSV 文件格式。
BIRT 还提供了一个叫做联合数据集(Joint Data Set )的特殊数据集以使用内外连接来整合现存的数据集。当从不同的数据源中整合数据集时该特性的作用就显得尤为明显。除此之外,现在 BIRT 数据源具备导入或者链接本地连接配置文件的能力以此来达到跨报表的连接共享的目的。
在增加报表参数和数据体时我们也会使用数据浏览视图。报表参数将呈现给报表的最终用户并且经常用来为特定的用户进行报表的个性化定制。例如:报表参数可以依赖数据集参数来修改查询,我们可以在 BIRT 的 JavaScript 表达式中用此来改变报表元素的样式和可见性,或者在脚本事件中基于选择的输出格式来定制内容。
报表参数可以是静态或者动态的。静态参数允许用户选择预先定义好的值集或者在文本框中输入一个值。动态参数可以是绑定到现存的 BIRT 数据集的一些数据。例如,用户可以从一个数据集提供的客户列表中选择一个客户。
此外,BIRT 支持级联参数,它可以显示多个下拉列表,并且一个下拉列表显示的内容会随着前一个列表的内容的改变而动态改变。例如,一个级联参数可以在第一个列表中显示客户列表,在第二个列表中显示选中客户的订单。
Figure 4 - Cascaded Parameter
现在 BIRT2.2 的动态参数可以支持使用 JavaScript 表达式来显示文本和参数值。这个改进使得参数列表以一种更符合逻辑的方式呈现给最终用户。例如,在开发一个详细订单的报表时,你可能希望展示一个所有订单的动态参数列表。表达式使得你可以为每个订单增加相应的客户姓名。图 5 显示了一个动态参数列表。
Figure 5 - Dynamic Parameter Expression
数据浏览视图也支持数据体的创建。这是 BIRT2.2 的新特性,且与新的交叉报表元素联合使用。BIRT 数据体是多维的,基于一个或多个 BIRT 数据集,使用新的跨标签数据立方构建器(Cross Tab Cube Builder)来构建的。请参见下面的图表。
Figure 6 - Cross Tab Cube Builder
除了上面提到的特性,BIRT 现在提供两个新的项目类型使得 Java 开发者可以创建更多的数据源。这些数据源基于 Open Data Access(ODA)框架,该框架由 Eclipse Data Tools Platform(DTP)项目提供。我们构建图形界面时需要使用 ODA 设计器插件,该插件是报表开发者使用相应的驱动时所需要的。当开发你自己驱动的运行时部分时,需要利用 ODA 运行时驱动的插件项目。该插件通常部署在一个运行时环境中,主要负责处理对数据源的调用和结果的获取。
Figure 7 - BIRT Projects
调色板
BIRT 调色板视图用来向报表画布中添加报表条目。调色板视图包含了一些报表元素,这些元素用来显示从数据浏览视图中获得的数据。仅仅是简单地从调色板视图中拖拽报表到报表编辑器中就可以使用该报表了。BIRT 报表元素支持所有可在属性编辑器视图中配置且可被 BIRT 的报表对象模型(Report Object Model)描述的属性。
Figure 8 - Palette View
调色板支持以下报表项
- 标签元素用来显示静态文本。像大多数报表元素一样,我们可以改变文本的外观以支持本地化,同时也可以设置超链接,字体大小和高亮等属性。
- 文本元素与标签很相似,不过具有更多的属性:可以显示多行,格式化良好的 HTML。利用 BIRT 的表达式构建器我们可以将现存的数据集的值,参数,JavaScript 函数以及 BIRT 特有的函数注入到格式化的 HTML 中。通过使用标签,文本元素还可以用于创建可在客户端执行的脚本。
- 动态文本元素经常用来显示 CLOB 数据类型值。这些值也可以利用 BIRT 的表达式构建器与其他数据联合使用。
- 数据元素是用来显示来自数据源的值的基本元素。可以利用表达式构建器改变和操纵数据值。例如,如果一个数据集具有一个叫做 first name 的列,还有一个叫做 last name 的列,那么你可以利用表达式构建器将二者连接起来组成一个新的数据元素。
dataSetRow["contactLastName"] + ", " + dataSetRow["contactFirstName"]
- 图片元素用来管理报表中输出图片。BIRT 支持获取 URI 中的图片以及嵌入在设计器中的图片,来自数据源的动态图片(BLOB)以及文件夹中的图片文件。
- 网格元素作为其他报表元素的容器,以一种合乎逻辑的方式来定位元素位置。网格元素被配置为表格格式。例如,如果你的报表显示产品销量情况,而你想在表格的右侧增加一个图表,那么你就可以增加一个一行两列的网格元素来完成这个任务。
- 列表元素也是作为其他元素的容器。列表不同于其他容器型元素的地方在于列表会迭代绑定到其上的数据集。默认的列表元素有一个头,一个尾和细节部分。当渲染列表时,头和尾通常只显示一次,而绑定到列表的数据集的每一行的细节部分都要显示。在细节部分中可以包含文本元素或者其他的容器型元素,例如网格,表格或者另一个列表。
- 表格元素与列表元素很相似,因为他们都是容器元素并且都会迭代绑定到其上的数据集,但是表格元素是以平面列表方式展现的。表格元素的布局很像 HTML 的表格一样。表格元素有头,尾和细节部分以及列。
- 聚合元素是 BIRT2.2 新加入的元素类型,其利用新的聚合构建器来向报表中增加聚合元素。该聚合构建器提供了超过 25 种不同的函数,例如 SUM,MIN,MAX 和 AVERAGE。
Figure 9 - Aggregation element
- 图表元素允许向报表设计器中插入图表。当一个图表元素被置于报表编辑器中时,图表构建器向导将会自动出现。该向导用来设计图表并提供三个设计标签页(选择图表类型,选择数据和选择图表格式)。BIRT2.2 提供了 13 种图表类型以及很多子类型的组合。图表构建器提供了拖放,图表预览,数据过滤和参数化等功能。图表元素可以以 PNG,JPG,BMP 和 SVG 的输出格式呈现,并且这些输出格式支持钻透(drilling through ),高亮(highlighting),开关可视化(toggling visibility)以及客户端脚本(client side script)。
- 跨标签元素也是 BIRT2.2 中新出现的元素,用来显示 BIRT 数据体中的数据。在 BIRT 以前的版本中,表格元素中列的数量在设计时就要确定好,而在跨标签元素的帮助下,列和行的数量都可以动态生成。该元素也支持等级聚合和数据显示,允许三维的行和列并且会测量数据以便使其显示在恰当的交叉点上。
Figure 11 - BIRT Cross Tab element
库资源管理器
库资源管理器视图具有拖放功能,使得用户可以从现存的报表库中拖放组件到当前报表中。 BIRT 中的库是一些可被其他报表使用的高效报表 XML 片段。这些库被使用它们的报表所引用,这意味着库的改动会自动地反映到所有使用它们的报表中去。一个很好的示例是使用一个报表库存储公司标识(logo)。如果公司标识改变了,只需要更新库就可以了,而不用更新引用它的报表。库被引用的位置是相对于资源文件夹的,在设计阶段通过设计器,在运行阶段通过 Web 查看器都可以配置该资源文件夹。
Figure 12 - Library Explorer
属性编辑器
属性编辑器视图用来对增加到报表上的报表元素设置属性。视图中显示何种条目将决定于报表编辑器中所选的元素类型。属性窗口中显示一些通用设置,例如样式,宽度和字体信息。此外,大多数报表元素支持可视化的属性设置,这样就可以动态地隐藏内容了。在属性标签的右侧,视图具有如下特性:排序,分组,映射,高亮和过滤页。
大多数功能都是自说明的,映射标签页允许动态构建(使用表达式构建器),以使得报表元素的显示值可以动态改变。例如,如果月份行的值是“1”,你可能想显示“January”。高亮标签页根据条件来动态地应用不同的样式,例如以红色来显示低销售量。大多数功能都允许在一个条目上应用多个条件或者关键字。一个条件可能改变字体颜色,而另一个条件可能改变字体大小。一个排序关键字可以按字母顺序列出结果,而另一个排序关键字却将“Jones”放在列表的最上面。
此外,在 BIRT2.2 中,当使用高亮时,报表开发者可以指定样式而不必手动地去设置样式属性。
Figure 14 - Style Highlighting
大纲
大纲视图展示了报表设计的图形化继承体系,同时说明了报表元素与容器的关系。我们可以直接在大纲视图中选择报表元素,当报表设计非常复杂时,这个功能非常有用。此外,在 BIRT2.2 中,大纲视图可用来导入或者链接外部样式,也可用来查看实现了脚本事件处理器的报表元素。
导入一个样式表会将该样式表的值复制到报表 XML 中。使用一个外部样式表允许你链接到 BIRT 资源文件夹中的样式表。
更多特性
BIRT2.2 还提供了两个新视图。一个视图显示 example 报表,另一个视图显示 example 图表并且提供了 Java 代码以产生图表。当在 Java 应用中使用图表引擎时会使用到该视图。
Eclipse BIRT Web 查看器
一旦报表开发完成了,我们就可以使用 BIRT 的 example Web 查看器部署它们。在 BIRT2.2 中该查看器已经得到了改进,它是一个基于 AJAX 的 J2EE 应用,说明了如何使用 BIRT 引擎来产生和渲染报表内容。
Web 查看器概览
Web 查看器可用来产生和渲染报表,同时也支持更多的交互性特征,例如内容表格,以多种格式导出报表内容,客户端和服务器端打印以及报表分页。利用查看器导航和工具栏使得这些特征成为可能。下图展示了使用查看器的一个示例。
Figure 17 - Example Web Viewer
Toolbar
查看器的工具栏有很多图标,他们可以完成内容表格的显示,重新运行报表,导出数据,以多种格式导出报表以及客户端和服务器端打印等任务。一个内容表格是基于报表设计而自动产生的。通过修改报表的分组片段可以定制内容表格。要从 example 查看器中访问内容表格,请选择该图标
Figure 18 - Example Table of Contents
工具栏也提供了一个图标来重新运行现存的报表。当用户想要修改用于产生报表的参数集时,这将十分有用。要访问该特性,请选择该图标 Figure 19 - Example report parameter dialog containing cascaded parameter
一个改进的数据导出对话框在 BIRT2.2 中首次出现。可以通过图标激活该对话框。
Figure 20 - Example Export Data Dialog
结果集被显示在一个下拉列表中,该下拉列表包含了报表中所有数据绑定控件。这些结果集并不是 BIRT 的数据集,但却包含了数据容器中绑定的列,而该数据容器中的数据则来自于一个数据集。这些可用的列显示在左边的列表框中,而对话框控制着这些列的导出。数据导出分隔符也已经得到了改进以支持更多的分隔符,例如制表符,分号,冒号,垂直线。此外,数据可以用用户指定的编码导出。
查看器同样支持以多种格式导出报表。利用导出报表对话框就可以完成报表的导出,我们可以通过选择图标来访问该对话框。
Figure 21 - Example Export Report Dialog
该对话框允许报表用户将报表导出为 Word,PowerPoint,PDF,PostScript 和 XLS 格式。此外,用户可以选择导出所有页面或者指定范围的页面。
BIRT 中的客户端打印是在 example 查看器中完成的,这是通过用户选择图标将报表转换为 PDF 格式实现的。用户可以利用标准的 PDF 功能打印或者保存报表。
Figure 22 - Client Print Example
BIRT2.2 的 example 查看器也提供了服务器端打印功能。该特性可以通过在 web.xml 中做如下设置而禁用。
<context-param><br></br> <param-name>BIRT_VIEWER_PRINT_SERVERSIDE</param-name><br></br> <param-value>OFF</param-value><br></br></context-param>
可以通过选择图标来访问服务器端打印功能。
Figure 23 - Example Server Side Print Dialog
该对话框将列出可用的服务器端打印机以及影响打印结果的各种设置
Viewer Navigation Bar
当显示一个多页的报表时我们将使用查看器导航条。分页是由报表元素和分组的分页符属性来决定的。这些属性就像使用前后分页符或者分页符间隔那样简单,而分页符间隔则指定了将一个分页符插入到产生的 HTML 中之前一个容器元素要处理多少行。当通过 Servlet 映射来使用查看器时,其默认行为是加载首页且使得导航条控件可用。导航条包含了可以向前向后或者直接定位页面的控件。
Web 查看器部署向导
利用 Web Tools Platform 项目 (WTP) 的一部分,BIRT2.2 现在可以支持 Web 项目。该项目类型会将 example 查看器自动部署到你所选择的应用服务器中。此外,新的 BIRT 标签库也会被部署进去。通过新建项目,在 Business Intelligence and Reporting Tools 类别下面选择 Web 项目,我们可以使用该项目类型。
Figure 24 - Web Project
Web 查看器标签库
现在 Web 查看器包含了一个标签库,该标签库可被用来定制查看器的行为。我们可以通过两种方式部署该标签库,其一是按照通常方式部署查看器;其二是利用 BIRT 的 Web 项目部署向导。此外,如果你想将 BIRT 部署在一个上下文中,并且将标签库放置在一个单独的上下文中,你可以通过复制 birt.tld 到你的 WEB-INF\tlds 目录下并且从查看器库目录中复制 coreapi.jar,modelapi.jar,viewerservlets.jar 和 com.ibm.icu_3.6.1v20070417.jar 到目录:新上下文 /web-inf/lib 下来实现。将下面的代码添加到你的 web.xml 文件中:
<jsp-config><br></br> <taglib><br></br> <taglib-uri>/birt.tld</taglib-uri><br></br> <taglib-location>/WEB-INF/tlds/birt.tld</taglib-location><br></br> </taglib><br></br></jsp-config>
在这种方式下,报表将通过 BIRT 查看器被引用,而不是新的上下文。
查看器标签库包含 5 个标签:param,paramDef,parameterPage,report 和 viewer。每个标签都有多个属性来控制查看器的行为。
Figure 25 - BIRT Tag Library
结论
这篇文章介绍了 BIRT2.2 的一些新特性。请访问 BIRT 的网站和 BIRT 新闻组 来了解更多信息。
查看英文原文: An Introduction to the Eclipse Business Intelligence and Reporting Tools
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于 Java 轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的 J2EE 培训讲师经历。参与 InfoQ 中文站内容建设,请邮件至 china-editorial@infoq.com 。
评论