分类: 系统运维
2009-03-18 11:52:58
用Cognos8 BI和DB2 pureXML为XML数据创建业务报告 |
级别: 中级 Cynthia M. Saracco, 高级解决方案架构师, 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 数据管理方法包括:
这三种方法都是可行的,根据应用程序需求的不同,它们适合不同的场景。 例如,大对象提供一种简单的数据建模方法,可以保持 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 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 8 BI 为业务用户和 IT 用户提供几个关键的特性,包括报告、分析、指示板、记分卡和数据建模。报告功能使用户能够使用各种预先构建的报告类型,这些报告可以使用许多不同的数据源;由单一元数据层定义可以作为报告数据来源的信息。分析可以对属于多个业务维的信息进行探索。业务指示板可以快速展示复杂的信息,使用标尺、图、表和其他图形元素显示来自各种数据源的数据,可以同时显示多个结果。记分卡帮助企业以一致的方式理解业务战略和战术目标,针对业务目标监视性能。 本文主要使用 Cognos 8 BI Framework Manager 对 DB2 pureXML 数据进行数据建模,并使用 Report Studio 创建报告。 现在讨论为 DB2 pureXML 中存储的数据生成 Cognos 报告的两种基本方法:
第一种方法不要求 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:
注意:表中 “document” 列的数据类型是 “XML”。因此,DB2 按照原有的层次化格式存储 XML 数据。 FpML 数据常常包含多重嵌套,相当复杂。但是,我们不必成为专家,也可以学习如何为 FpML 数据(或其他类型的 XML 数据)创建报告。为简单起见,本文中生成的报告基于某种类型的 FpML 数据(具体地说,是与信用衍生产品相关的数据),而且只使用 FpML 交易记录的特定部分。 图 3 显示一个 FpML 示例文档的部分内容;这里使用的工具是免费的数据库开发工具 IBM Data Studio。关于 Data Studio 的更多信息,请参见本文的 下载。图 4 给出同一文档的图形化表示;有些人觉得后一种形式更容易理解。(还可以使用 DB2 Control Center 显示 DB2 中存储的 XML 数据)。
正如前面提到的,DB2 允许根据 XML 列中存储的层次化数据创建关系视图。为此,管理员要编写一个作为视图定义的 SQL/XML 查询。这个查询把一个或多个 XPath 表达式的输出映射到关系结果集中的一列或多列。(XPath 表达式必须指定 XML 数据的一部分,即一个 XML 节点,它必须返回一个数据值)。 如果您不熟悉 SQL/XML、XPath 表达式或 下面的语句创建本文使用的 FPMLADMIN.CREDITV 视图。这是一个关系视图,其中包含信用违约互换衍生产品(即在发生违约时由某个知名的金融实体承担损失)的相关信息。这些衍生产品数据包含在 FPMLADMIN.FPML 表中的交易数据中。注意,CREDITV 视图中的列包括交易日期、参与信用互换的实体、参与互换的双方、在发生 “支付违约” 时涉及的金额以及币种。
在本文的 下载 中提供创建此视图的脚本。 安装和配置 IBM Cognos 8 BI 的数据建模和报告特性之后,按照以下步骤定义所需的元数据。
在 Framework Manager 的主页上,可以创建一个查询主题以定义报告的内容。步骤如下:
注意,此示例使用的查询非常简单。可以使用标准的 Cognos 特性创建更复杂的查询,根据需要过滤掉某些列或行。 现在要创建和发布包,以便在 Report Studio 中创建报告。
现在,已经创建了包,可以使用它创建报告了。 本节讲解如何创建一个非常简单的列表报告。在 Framework Manager 中创建元数据并发布包之后,可以以更复杂更有意思的方式使用此数据。 为了创建报告,必须启动 Cognos 8 BI Report Studio。在 Windows 中,可以在 Windows Start 菜单中选择 Cognos 8 BI 菜单项。Web 浏览器中会显示欢迎页面(见图 9)。 按照以下步骤创建报告:
正如前面提到的,Cognos 8 BI Report Studio 提供许多内置的报告类型,还允许根据需要定制任何报告的内容。这些功能可以应用于关系视图,包括在底层 pureXML 数据上构建的关系视图。这里只给出了一个非常简单的报告示例。要想了解关于 Cognos 8 BI Report Studio 功能的更多信息,请参见 参考资料。 对于不适合或无法使用视图的场景,可以让 Cognos 直接基于 SQL/XML 查询生成报告。 因为将在查询中使用 Cognos SQL 中不可用的关键字,所以必须在 Query Options 页面上选择 SQL 类型 Native 或 Pass-Through。(稍后讨论设置方法)。可以任意选择这两个选项之一,但是建议选择 Native,因为 Framework Manager 可以自动地进行性能优化,而在使用 Pass-Through 时不进行优化。关于使用 SQL 类型的更多信息,请参见本文 参考资料 中的 “Framework Manager User Guide”。 根据 SQL/XML 查询创建报告的前几个步骤与前一个示例相同。仍然需要为 DB2 创建 Cognos 8 BI 元数据。假设您已经完成了此步骤,然后按照以下步骤使用 DB2 SQL/XML 查询创建 Cognos 报告。 此示例的查询创建过程与前一个示例稍有不同,因为要手工输入 SQL/XML 查询而不是让 Cognos 在幕后替您生成查询。因此,需要通过设置一个数据库属性来控制在内部如何处理此查询。然后,输入查询本身。按照以下步骤完成这两个任务:
现在,按照以下步骤测试刚才创建的查询:
现在,您可能想知道应该输入哪种查询。对于图 11 所示的工作,使用以下查询;在本文的 下载 中可以找到包含此查询的脚本。此查询比较复杂,但是更加真实;它演示如何返回 XML 数据的多个部分(例如多个 XML 节点)并根据 XML 谓词限制结果。具体地说,此查询返回引用的实体是 “Amcor Ltd” 或 “Abbey National PLC” 的所有信用违约互换衍生产品的相关交易 ID 的文本值。
注意:此查询的第一行调用 创建查询之后,下一步是按照前一节中 创建和发布包 步骤描述的基本过程创建和发布一个包。
可以使用流行的软件产品以多种方式根据 XML 数据创建业务报告。在本文中,学习了使用 Cognos 8 BI 为 DB2 pureXML 数据创建报告的两种技术:使用视图和执行 SQL/XML 查询。 |