Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8351181
  • 博文数量: 444
  • 博客积分: 10593
  • 博客等级: 上将
  • 技术积分: 3852
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 15:26
文章分类

全部博文(444)

文章存档

2014年(1)

2013年(10)

2012年(18)

2011年(35)

2010年(125)

2009年(108)

2008年(52)

2007年(72)

2006年(23)

分类: 系统运维

2009-03-18 11:52:58

用Cognos8 BI和DB2 pureXML为XML数据创建业务报告


级别: 中级

Cynthia M. Saracco, 高级解决方案架构师, IBM
Tad Worley, 高级技术启用顾问, IBM

2009 年 2 月 19 日

当今的企业广泛使用 XML 捕捉和交换重要的业务数据,这促使许多公司研究如何使用流行的查询和报告编写工具处理 XML 数据。本文介绍两种用 Cognos® 8 Business Intelligence(BI)和 DB2® pureXML™ 生成业务报告的技术。学习如何为层次化 XML 数据创建关系视图以及编写针对 XML 数据的基于 SQL 的查询,从而从 XML 文档和消息中提取出重要的信息,把这些信息与现有的关系数据集成起来,并创建业务分析师和高管所需的报告。

在过去的十年里,数十个行业组织已经定义了用来表示和交换数据的基于 XML 的格式。这种格式包括用于金融衍生产品柜台交易的 Financial Products Mark-up Language(FpML)、用于医疗保健行业的 Health Level 7(HL7)和 Clinical Data Interchange Standards Consortium(CDISC)规范、用于保险行业的 Association for Cooperative Operations Research and Development(ACORD)规范、用于有价证券交易的 Financial Information Exchange Markup Language(FIXML)、用于银行支付的 ISO 200022(有时候称为 “UNIFI”)以及用于汽车生产的 Standards in Automotive Retail(STAR)。

因此,XML 消息常常包含重要的业务和交易数据,组织必须存储和管理这些数据以满足法律和内部标准的要求。另外,这些 XML 消息的内容常常提供关于内部过程、运营状态和客户偏好的重要信息。因此,对 XML 数据进行查询和报告对于许多公司越来越重要了。本文介绍两种用 Cognos 8 BI 和 DB2 pureXML 管理的 XML 数据创建业务报告的方法。

流行的 XML 数据管理方法包括:

  • 使用表的字符大对象(CLOB)或二进制大对象(BLOB)列在关系数据库管理系统(DBMS)中按原样存储 XML 数据。
  • 把 XML 数据分解为小片段并把它们映射到关系 DBMS 中的表列。(按照这种方式,XML 并不按原样存储为 XML)。
  • 在混合型 DBMS 中以原有的层次化格式存储 XML。

这三种方法都是可行的,根据应用程序需求的不同,它们适合不同的场景。

例如,大对象提供一种简单的数据建模方法,可以保持 XML 数据原来的形态,可以用简单的 SQL 查询以简单明了的方式获取完整的 XML 文档和消息。但是,如果作为大对象存储 XML,对 XML 数据子集的搜索、更新和获取操作的开销会很大,因为 DBMS 不了解 XML 的内部结构。

把 XML 分解为一个或多个表的多个列使用户能够查询和更新数据,而不需要任何特殊技能,比如不需要了解 XML 解析或文档导航技术。另外,分解的 XML 数据的特定部分的运行时查询和更新性能通常是可预知的。这是因为 XML 数据实际上已经被转换为另一种形式。但是,分解过程常常涉及工作量很大的复杂映射,很难适应 XML 消息格式的快速变化。另外,查询分解的 XML 数据很困难,常常需要多表联结。

原生 XML 存储意味着按原样存储 XML 数据,DBMS 完全了解数据的内部层次结构。如果关系 DBMS 包含这种功能,就可以同时存储、共享、查询和更新表中的现有数据和原来只包含在消息或平面文件中的 XML 数据。另外,可以避免复杂的文档分解和重构过程。由于 DBMS 了解 XML 数据的内部结构,所以还对性能有某些好处,可以改进编程生产力。但是,只有少数 DBMS 产品支持这种方式,比如 IBM DB2 pureXML,而且要求开发人员学习更多的查询语言扩展。

DB2 9.5 为表和 XML 层次结构中的数据提供一种通用的应用程序编程接口和数据库管理平台。这种体系结构(见图 1)使 DB2 能够支持上述的三种 XML 存储方式。但是,越来越多的公司开始使用它的 pureXML 技术(有时候也称为原生 XML 支持)。因此,这是本文的重点。



DB2 体系结构

本文不打算全面讨论 DB2 pureXML 功能,但是应该注意,DB2 支持用行业标准的 SQL 或 XQuery 语言编写的查询(以及同时包含 SQL 和 XQuery 表达式的 “混合型” 查询)。另外,对于需要以关系数据形式处理 XML 数据的应用程序,DB2 允许通过创建视图把 XML 转换为具有传统 SQL 数据类型的结果集。实际上,这是 Cognos 用户直接使用 DB2 pureXML 数据的惟一方法。关于 DB2 pureXML 的更多信息,请参见本文的 参考资料

IBM Cognos 8 BI 使用一个面向服务体系结构(SOA)提供大量报告和分析功能。Cognos 8 BI 允许用户跨多个企业数据源创建和共享报告,从而帮助用户及时地做出更好的业务决策。本文中的测试使用 Cognos 8.3 BI。

Cognos 8 BI 提供一个三层的体系结构,见图 2。表示层向各种平台交付报告,应用层包含报告生成和管理所需的服务,数据层提供对各种数据源的访问能力。



Cognos 体系结构

Cognos 8 BI 为业务用户和 IT 用户提供几个关键的特性,包括报告、分析、指示板、记分卡和数据建模。报告功能使用户能够使用各种预先构建的报告类型,这些报告可以使用许多不同的数据源;由单一元数据层定义可以作为报告数据来源的信息。分析可以对属于多个业务维的信息进行探索。业务指示板可以快速展示复杂的信息,使用标尺、图、表和其他图形元素显示来自各种数据源的数据,可以同时显示多个结果。记分卡帮助企业以一致的方式理解业务战略和战术目标,针对业务目标监视性能。

本文主要使用 Cognos 8 BI Framework Manager 对 DB2 pureXML 数据进行数据建模,并使用 Report Studio 创建报告。

现在讨论为 DB2 pureXML 中存储的数据生成 Cognos 报告的两种基本方法:

  • 在报告向导中使用 XML 数据的关系视图
  • 编写针对 XML 数据的基于 SQL 的查询

第一种方法不要求 Cognos 用户了解查询语言扩展,它提供一种使用 pureXML 数据的简单方法。因此,许多公司喜欢这种方法。但是,这种方法假设 DB2 管理员可以预见业务用户的 XML 数据访问需求。他们必须了解业务用户的需求,才能创建报告所需的视图。另外,根据 XML 数据量、视图的定义和为报告生成的后续查询,可能会出现运行时性能问题。

如果很难预先确定需要访问的 XML 数据,那么第二种方法更合适。另外,对于熟悉 SQL/XML 的 IT 专业人员,直接针对复杂的场景编写查询是比较方便的。例如,他们可能希望使用方便的 DB2 工具(比如 IBM Data Studio 或 DB2 Control Center)设计复杂的查询和研究查询的运行时性能。对结果满意之后,他们只需把编写好的 SQL/XML 语句复制到适当的 Cognos 工具中。

下面通过使用 Cognos 8 BI Framework Manager 进行数据建模,使用 Cognos 8 BI Report Studio 创建报告,使用 DB2 9.5 pureXML 管理数据,分别研究这两种方法。

为了让这些示例更加真实,本文使用的示例数据库包含基于 XML 模式的 FpML(金融衍生产品交易)信息,示例数据是由 International Swap and Derivatives Association(ISDA)提供的。IBM 提供许多免费的与行业相关的 DB2 软件包,包括 FpML 4.2 软件包。本文使用这个 FpML 包创建的数据库。(在 下载 中可以找到这个包的下载链接)。

下面学习如何基于一个同时包含关系数据和 XML 数据的表创建报告。这个表(FPMLADMIN.FPML)的定义见清单 1:



				
create table fpmladmin.FPML(
productID         varchar(50), 
conversationID   varchar(50), 
messageID        varchar(50), 
document          XML)

注意:表中 “document” 列的数据类型是 “XML”。因此,DB2 按照原有的层次化格式存储 XML 数据。

FpML 数据常常包含多重嵌套,相当复杂。但是,我们不必成为专家,也可以学习如何为 FpML 数据(或其他类型的 XML 数据)创建报告。为简单起见,本文中生成的报告基于某种类型的 FpML 数据(具体地说,是与信用衍生产品相关的数据),而且只使用 FpML 交易记录的特定部分。

图 3 显示一个 FpML 示例文档的部分内容;这里使用的工具是免费的数据库开发工具 IBM Data Studio。关于 Data Studio 的更多信息,请参见本文的 下载。图 4 给出同一文档的图形化表示;有些人觉得后一种形式更容易理解。(还可以使用 DB2 Control Center 显示 DB2 中存储的 XML 数据)。



XML 源代码



图形化视图

正如前面提到的,DB2 允许根据 XML 列中存储的层次化数据创建关系视图。为此,管理员要编写一个作为视图定义的 SQL/XML 查询。这个查询把一个或多个 XPath 表达式的输出映射到关系结果集中的一列或多列。(XPath 表达式必须指定 XML 数据的一部分,即一个 XML 节点,它必须返回一个数据值)。XMLTable() 函数提供一种完成此任务的简单方法。

如果您不熟悉 SQL/XML、XPath 表达式或 XMLTable(),请参见 参考资料

下面的语句创建本文使用的 FPMLADMIN.CREDITV 视图。这是一个关系视图,其中包含信用违约互换衍生产品(即在发生违约时由某个知名的金融实体承担损失)的相关信息。这些衍生产品数据包含在 FPMLADMIN.FPML 表中的交易数据中。注意,CREDITV 视图中的列包括交易日期、参与信用互换的实体、参与互换的双方、在发生 “支付违约” 时涉及的金额以及币种。



				

create view fpmladmin.creditv 
tradeDate, entityName, party1, party2, amount, currency) as 
select t.* from fpmladmin.fpml, 
xmltable(XMLNAMESPACES(DEFAULT ''),
'$DOCUMENT/FpML'
columns
tradeDate date path 'trade/tradeHeader/tradeDate',
entityName varchar(80) path 
'trade/creditDefaultSwap/generalTerms/referenceInformation/referenceEntity/entityName', 
party1 varchar(80) path 'party[1]/partyName', 
party2 varchar(80) path 'party[2]/partyName', 
amount varchar(30) path 
'trade/creditDefaultSwap/protectionTerms/creditEvents/failureToPay
/paymentRequirement/amount', 
currency varchar(10)  path 
'trade/creditDefaultSwap/protectionTerms/creditEvents/failureToPay
/paymentRequirement/currency'
) 
as t 
where productid like 'credit%'
and 
xmlexists ('declare default element namespace ""; 
$DOCUMENT/FpML/trade/creditDefaultSwap/protectionTerms
/creditEvents/failureToPay/paymentRequirement')
and 
xmlexists ('declare default element namespace ""; 
$DOCUMENT/FpML/trade/creditDefaultSwap/generalTerms
/referenceInformation/referenceEntity/entityName')%

在本文的 下载 中提供创建此视图的脚本。

安装和配置 IBM Cognos 8 BI 的数据建模和报告特性之后,按照以下步骤定义所需的元数据。

  1. 启动 Framework Manager 工具。
  2. 选择 create a new project。指定项目名称并单击 OK
  3. 选择一种语言并单击 OK
  4. 对于元数据源,选择 Data Sources 并单击 Next
  5. 单击 New 创建一个新的数据源。单击 Next,然后指定数据源名称(比如 "FPML")并单击 Next
  6. 指定 DB2 作为数据源类型,单击 Next
  7. 输入 DB2 数据库名(FPML)以及有效的用户 ID 和密码。
  8. 测试连接以确保输入的信息都是正确的。成功地连接之后,单击 Finish
  9. 在 Data Source 窗口中,选择刚才创建的数据源并单击 Next
  10. 选择要导入的所有对象,单击 Next 并单击 Import。等到所有对象都成功地导入之后,单击 Finish。我们已经为此项目定义了适当的元数据(即数据模型)。现在,进入 Framework Manager 主页(见图 5)。


Framework Manager

在 Framework Manager 的主页上,可以创建一个查询主题以定义报告的内容。步骤如下:

  1. 右键单击刚才创建的 FPML 数据模型并选择 Create > Query Subject
  2. 在左边的面板中,展开 FPML 和 CREDITV。双击所有列,它们应该会出现在右边的面板中(见图 6)。这会创建一个选择 DB2 视图的所有列的查询(在 SQL 中,这可以表示为 SELECT * from FPMLADMIN.CREDITV)。
  3. 在 Test 选项卡上,选择 Test Sample。Framework Manager 执行此查询,应该会看到与图 7 相似的输出。
  4. 选择 OK 保存查询。


查询定义



测试查询

注意,此示例使用的查询非常简单。可以使用标准的 Cognos 特性创建更复杂的查询,根据需要过滤掉某些列或行。

现在要创建和发布包,以便在 Report Studio 中创建报告。

  1. 如果需要的话,启动 Framework Manager 主页。
  2. 在左边树结构的底部,右键单击 Packages 并选择 Create > Package
  3. 指定项目名称并单击 Next
  4. 指定包的内容将包含刚才创建的查询、FPML 数据模型和 CREDITV 视图。为此,检查列表中提供的选项并确保选择适当的选项。取消选择其他内容(见图 8)。单击 Next
  5. 把除 DB2 之外的所有函数集转移到左边的面板,单击 Finish。在程序询问是否希望打开 Publish Wizard 时,选择 Yes。单击 Next,然后单击 Next ,单击 Finish。需要通过发布包让用户可以使用元数据,这样用户就可以在其他 Cognos 工具中使用此包创建报告。


包定义

现在,已经创建了包,可以使用它创建报告了。

本节讲解如何创建一个非常简单的列表报告。在 Framework Manager 中创建元数据并发布包之后,可以以更复杂更有意思的方式使用此数据。

为了创建报告,必须启动 Cognos 8 BI Report Studio。在 Windows 中,可以在 Windows Start 菜单中选择 Cognos 8 BI 菜单项。Web 浏览器中会显示欢迎页面(见图 9)。



启动 Report Studio

按照以下步骤创建报告:

  1. 单击 Create professional reports 启动 Report Studio。
  2. 选择 Create a new report or template 并指定报告类型 List
  3. 在左边的面板中,展开树结构中的查询。选择所有列,然后把它们拖到主面板中。
  4. 双击标题,为报告指定新的标题。
  5. 在菜单栏中,选择 Run。指定 Run Report – HTML。应该会看到与图 10 相似的报告。


示例报告

正如前面提到的,Cognos 8 BI Report Studio 提供许多内置的报告类型,还允许根据需要定制任何报告的内容。这些功能可以应用于关系视图,包括在底层 pureXML 数据上构建的关系视图。这里只给出了一个非常简单的报告示例。要想了解关于 Cognos 8 BI Report Studio 功能的更多信息,请参见 参考资料

对于不适合或无法使用视图的场景,可以让 Cognos 直接基于 SQL/XML 查询生成报告。

因为将在查询中使用 Cognos SQL 中不可用的关键字,所以必须在 Query Options 页面上选择 SQL 类型 NativePass-Through。(稍后讨论设置方法)。可以任意选择这两个选项之一,但是建议选择 Native,因为 Framework Manager 可以自动地进行性能优化,而在使用 Pass-Through 时不进行优化。关于使用 SQL 类型的更多信息,请参见本文 参考资料 中的 “Framework Manager User Guide”。

根据 SQL/XML 查询创建报告的前几个步骤与前一个示例相同。仍然需要为 DB2 创建 Cognos 8 BI 元数据。假设您已经完成了此步骤,然后按照以下步骤使用 DB2 SQL/XML 查询创建 Cognos 报告。

此示例的查询创建过程与前一个示例稍有不同,因为要手工输入 SQL/XML 查询而不是让 Cognos 在幕后替您生成查询。因此,需要通过设置一个数据库属性来控制在内部如何处理此查询。然后,输入查询本身。按照以下步骤完成这两个任务:

  1. 在 Cognos 8 BI Framework Manager 中,展开左边面板中树结构中的 Data Sources,选择 DB2 数据源。
  2. 检查 Framework Manager 底部的属性面板,把 Query Processing 参数改为 Limited Local
  3. 现在创建另一个查询。右键单击树结构中的数据模型并选择 Create > Query Subject
  4. 选择 Data Source (Manually build a SQL query),指定查询名称并单击 OK
  5. 选择数据源,取消 Run database query subject wizard,单击 Finish
  6. 在 SQL 选项卡中,手工输入所需的 SQL/XML 查询,见图 11。


查询定义窗口

现在,按照以下步骤测试刚才创建的查询:

  1. 在右下方的 Test 选项卡中,单击 Options。对于 Type 字段,选择 Native 并单击 OK(见图 12)。
  2. 单击 Test Sample,应该会显示查询的结果(见图 13)。


查询选项窗口



测试结果窗口

现在,您可能想知道应该输入哪种查询。对于图 11 所示的工作,使用以下查询;在本文的 下载 中可以找到包含此查询的脚本。此查询比较复杂,但是更加真实;它演示如何返回 XML 数据的多个部分(例如多个 XML 节点)并根据 XML 谓词限制结果。具体地说,此查询返回引用的实体是 “Amcor Ltd” 或 “Abbey National PLC” 的所有信用违约互换衍生产品的相关交易 ID 的文本值。



				

select xmlserialize(content
xmlquery('declare default element namespace 
"";
$fpml/FpML/trade/tradeHeader/partyTradeIdentifier[1]/tradeId/text()' 
passing document as "fpml")  as varchar(25) ) tradeID1, 
xmlserialize(content
 xmlquery('declare default element namespace 
"";
$fpml/FpML/trade/tradeHeader/partyTradeIdentifier[2]/tradeId/text()' 
passing document as "fpml")  as varchar(25) ) tradeID2   
from fpmladmin.fpml 
where xmlexists('declare default element namespace 
"";
$fpml/FpML/trade/creditDefaultSwap/generalTerms
/referenceInformation/referenceEntity[entityName="Amcor Ltd" or "Abbey National PLC"]' 
passing document as "fpml"
)

注意:此查询的第一行调用 XMLSerialize() 函数,这让 DB2 返回 XML 数据的序列化字符串版本。Cognos 8 BI 等工具要求提供序列化的 XML。(关于 XML 序列化的更多信息,请参见 参考资料)。

创建查询之后,下一步是按照前一节中 创建和发布包 步骤描述的基本过程创建和发布一个包。

  1. 如果需要的话,启动 Framework Manager 主页。
  2. 在左边树结构的底部,右键单击 Packages 并选择 Create > Package
  3. 指定项目名称并单击 Next
  4. 指定包的内容将包含刚才创建的查询和 FPML 数据模型。为此,检查列表中提供的选项并确保选择适当的选项。取消选择其他内容。单击 Next
  5. 把除 DB2 之外的所有函数集转移到左边的面板,单击 Finish。在程序询问是否希望打开 Publish Wizard 时,选择 Yes。单击 Next,然后单击 Next ,单击 Finish。现在已经发布了包,可以在其他 Cognos 8 BI 工具中使用它了。

  1. 启动 Report Studio。
  2. 单击刚才创建的包。
  3. 选择 Create a new report or template 并指定报告类型 List
  4. 在左边的面板中,展开树结构中的查询。选择所有列,然后把它们拖到主面板中。
  5. 双击标题,为报告指定新的标题。
  6. 在菜单栏中,选择 Run。指定 Run Report – HTML。应该会看到与图 14 相似的报告。


报告

可以使用流行的软件产品以多种方式根据 XML 数据创建业务报告。在本文中,学习了使用 Cognos 8 BI 为 DB2 pureXML 数据创建报告的两种技术:使用视图和执行 SQL/XML 查询。

阅读(1098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~