在 DB2 Data Warehouse Edition 中使用 Business Intelligence Reporting Tool 3
开始之前
关于本系列
本教程是 在 DB2 Data Warehouse Edition 中使用 Business Intelligence Reporting Tool 系列 的第 3 部分。这一部分讲解如何在 DWE Design Studio 中创建复杂的 BIRT 报告,重点是创建分组报告和汇总报告。创建这些报告之后,可以按照本系列 第 2 部分 中的描述把它们部署在 WebSphere Application Server 上。本系列的第 4 部分主要讨论为 DB2 关系数据创建交互式报告和图表。
这个 教程系列 针对下面这样的读者:
希望了解如何在 Design Studio 中为关系数据创建报告
觉得其他报告工具对于为关系数据创建报告太复杂了
希望了解 BIRT 插件的工作方式
关于本教程
本教程演示如何在 Design Studio 中使用 BIRT 创建汇总报告和分组报告。
本教程解释以下任务:
创建汇总报告(每月利润率报告):
设置基本结构
创建参数
创建数据集并在其中添加参数
创建数据集
在查询中使用参数
创建报告的布局
设置报告的样式
重用样式
根据条件突出显示
动态图像或红绿灯
操作数据
创建计算列
数据的动态排序
创建分组报告(按部门分组的利润率):
构建分组报告
启用内容目录
添加部门名次
动态地更新查询
操作数据
创建简单的计算
创建与组相关的计算
创建复杂的聚合计算
目标
在本教程中,学习如何在 DB2 Data Warehouse Edition(DWE)中创建汇总报告和分组报告,然后在 Web 浏览器中查看它们。在创建这些报告的同时,还要创建红绿灯和复杂的两遍(two pass)计算。创建报告之后,可以按照本系列 第 2 部分 中的描述把它们转换为 PDF 和 CSV。
前提条件
本教程假设读者熟悉 Eclipse IDE 的一些基本概念,包括视图、编辑器、面板等等。对 Eclipse 的介绍参见 参考资料 一节。
在开始学习本教程之前,您应该完成本系列第 1 部分 “在 DWE Design Studio 中安装 BIRT 和示例数据”(developerWorks,2007 年 4 月)中的基本安装和配置步骤:
必须在 DWE Design Studio 9.1.1 中安装 BIRT Report Designer v2.1.1
创建 DWE olapanddatamining 示例数据库
创建 V_SALES 和 V_SALES_GROUPED SQL 视图
在 WebSphere Application Server V6.0 中安装 BIRT
使用提供的示例报告连接 DB2 示例数据
本教程要重用本系列 第 2 部分 中创建的许多工件,所以假设用户已经学习了第 2 部分,或能够访问它提供的源代码。在阅读本教程时,最好同时打开第 2 部分以便参考。
系统需求
必须在 Design Studio 9.1.1 中安装 Data Warehouse Enterprise Edition 9.1.1,必须能够访问 WebSphere Application Server v6.0。
必须能够访问 DWE 示例数据(本教程使用本系列第 1 部分中创建的 DWESAMP 数据库)。
必须能够访问 BIRT 开放源码产品并在 DWE Design Studio 环境中安装(本教程使用 BIRT V2.1.1)。
为了运行本系列中的示例,需要一个 Windows® 系统,至少需要 512MB 的空闲内存空间。
创建汇总报告(每月利润率报告)
设置基本结构
为了创建汇总报告,首先需要用空白模板创建一个新报告,然后在其中添加数据。把新报告命名为 MonthlyProfitabilityReport.rptdesign(创建报告并查找后文使用的 MartLibrary.rptlibrary 的方法参见 第 2 部分)。
通过使用 MartLibrary.rptlibrary,把数据源和主页面拖动到这个报告中。删除这个页面的默认主页面。这个报告的 Outline 视图应该与下图相似。在本教程和下一个教程中,将重用 MartLibrary 以避免重复操作。
图 1. 通过重用 MartLibrary 创建的初始报告布局
创建报告参数
与每日销售报告一样,需要创建报告参数来动态地更新查询。按照以下步骤创建报告参数:
在 Data Explorer 视图中,右键单击 Report Parameter 并选择 New Parameter。
在向导中输入以下参数值:
Name: pStoreId
Data type: Integer
Display type: text box
Default value: 16
选择 Hidden 并单击 OK 关闭窗口。
提示:BIRT 提供了一个用于单一值传输的文本框。如果没有选择 Hidden 复选框,那么在运行报告时就会在一个窗口中显示默认值。可以在窗口中编辑这个值,然后根据这些参数生成报告。
以相似方式创建另外两个参数,pYear 和 pMonth。把数据类型设置为 Integer,把默认值分别设置为 2002 和 3。一定要选中 Hidden 复选框。
Data Explorer 应该与图 2 相似:
图 2. 添加报告参数
创建数据集并在其中添加参数
创建数据集
在 Data Explorer 视图中,可以看到已经添加了 Db2Server 数据源。现在,可以创建自己的数据集并在报告中显示数据。按照以下步骤创建数据集:
在 Data Explorer 视图中,右键单击 Data set 节点并选择 New Data Set。New Data Set 向导打开。
如果还没有选择 DB2Server 的话,就选择它作为数据源。可以检查 Data Source 类型(DB2Server)中的详细信息是否与前面设置的信息相同。
把数据集的名称改为 MonthlyProfitabilityReportDataSet 并单击 Next。
在本教程中,我们使用 SQL 创建一个汇总数据集。也可以使用 BIRT 创建这个数据集,但是会略微复杂一些。
一个新查询窗口打开,其中显示数据集的详细信息。把以下 SQL 语句粘贴到 SQL 框中:
清单 1. 每月利润率报告的数据集中使用的查询
select StoreId as StoreID, YEAR as YEAR,
MONTH as MONTH, RTRIM(GROUP) as GROUP,
RTRIM(DEPARTMENT) as DEPARTMENT,
RTRIM(SUBDEPARTMENT) as SUBDEPARTMENT,
ITEMS as ITEMS, AVGPRICE as AVGPRICE,
CGS as CGS, SALES as SALES,
PROFIT as PROFIT, PROFITPCT as PROFITPCT
from MARTS.V_SALES_GROUPED
注意:这个场景使用 SQL 的 RTRIM 方法删除末尾的空格。
单击 Finish。
单击 Preview results 查看查询的结果。
在查询中使用参数
与每日销售报告一样,在查询中添加参数使它成为动态查询。
修改前面在数据集中创建的 SQL 查询。选择 Outline > Edit Data Set 并在查询中添加以下 WHERE 子句:
where StoreId=? and Year=? and Month=?
提供参数绑定:
在 Edit Data Set 窗口中单击 Parameters,查看查询中的可替换参数的列表。注意,对于查询中的每个 “?”,都有一个参数行。BIRT 按照位置进行参数映射。
从列表中选择 param1 并单击 Edit。在 Link To Report Parameter 列表中,选择 pStoreId。对于这三个参数,数据类型都应该是整数,Direction 应该是输入。
对于第二和第三个参数(pYear 和 pMonth)分别重复前面的步骤。
这个报告的 Navigator 视图应该与图 3 相似:
图 3. Navigator 视图
在 Preview 选项卡中预览结果。应该只看到 2002 年 3 月 StoreID 16 的值。
在继续操作之前,保存工作。
创建报告的布局
因为这个报告是从空白面板创建的,所以可以灵活地在报告上创建定制的布局。
按照以下步骤创建报告的布局:
在 Layout 选项卡中,右键单击报告并选择 Insert > List。这会在报告上创建一个列表元素。
我们不使用这个列表的细节行,所以可以单击它的减号使它最小化。
在 Header 选项卡提供的空间中,右键单击并插入一个网格。保持默认的列数和行数并单击 OK。
在最上面一行网格右边的单元格中,右键单击并插入一个 Text 框。Edit Text 对话框打开。在这里,创建一些 HTML 元素,在运行时用这些元素更新查询。
在文本区域中输入以下 HTML:
清单 2. 添加的 HTML 元素
<form id='Updates' action='../frameset'>
<input type='hidden' name='__report' value='MonthlyProfitabilityReport.rptdesign'>
<B>Year: </B><input type='text' name='pYear' id="pYear"
SIZE=4 value="<value-of>params["pYear"]</value-of>">
<B>Month: </B><input type='text' name='pMonth'
SIZE=2 value="<value-of>params["pMonth"]</value-of>">
<B>Store ID: </B><input type='text' name='pStoreId'
SIZE=2 value="<value-of&g