Technical Blog Post
Abstract
掌握Web Query元数据(一)
Body
掌握Web Query元数据
http://www.ibmsystemsmag.com/ibmi/administrator/db2/Get-a-Handle-on-Met…
DB2 Web Query元数据的使用细节
在9月份的IBM Systems Magazine, Power系统—IBM i edition cover story, “解开Web Query”中, 我解释了为什么DB2 Web Query要使用元数据, 为什么它实际上可以降低查询和报表环境的复杂度并为报表开发者提供便利. 在那篇文章中, 我阐述了使用元数据的好处. 在本文, 我将以实际操作更加详细地介绍如何利用这些好处.
什么是元数据?
为了唤起您的记忆, 元数据就是简单化的数据. DB2 Web Query元数据是一个包含您的数据库文件信息的具体化的库. 在DB2 Web Query中建立一个报表或图表之前, 您需要首先在数据源之上建立元数据(也被称为同义词). 您可以在其之上建立同义词的数据库对象包括: 表, 物理文件, SQL视图, DDS逻辑文件, 存储过程和物化查询表(MQT). 您可以使用三种方法来建立元数据: 1. 自己创建元数据. Web Query浏览器启动页和DB2 Web Query Developer Workbench工具都提供了元数据的建立向导. 要建立元数据, 您必须是Web Query系统管理员(为MRADMIN组成员)或者是相应域中的开发者. 这是建立元数据最常用方式. 2. 使用第三方工具. 三个较好的支持DB2 Web Query的供应商及产品为: Databorough的x-WebQuery, Information Builders的Way Data Migrator 以及Coglin Mills的RODIN DB2 Web Query Edition. 3. 找一个ERP或服务提供商. 独立软件提供商(ISVs)有能力将DB2 Web Query内容作为他们解决方案套装软件的一部分. 如果您购买这样的发行版本, 元数据将包含在解决方案套装软件之中. 同样, 一个服务提供商也许有这样的技术和工具来为您建立元数据. 在之前的文章中, 我分享过了DB2 Web Query Developer Workbench, 这是一个基于Windows PC的工具, 它提供了多个强大的组件, 同义词编辑器就是其中一个,它包含的图形界面可以让您: l 定义数据库联接 l 建立虚拟列来集中业务逻辑 l 标准化列格式 l 转换和标准化日期域 l 创建过滤器 l 创建业务视图 l 定义联机分析处理(OLAP)的维度 现在您已经知道了这些优点, 下面将详细介绍如何使用它们. 如果您曾使用Query/400做过报表, 就知道如果您的查询需要多个文件时,就必须在每个查询定义中定义联接. 元数据让您可以在一个地方定义单一、集中的联接, 所有的报表都可以基于元数据的定义来创建. 使用Develop Workbench中的同义词编辑器,您只需要将新的联接字段从已存在的同义词或文件放到簇(而且不需要单独的同义词)中就可以建立同义词. 如何添加新的联接如图 1所示. 当您向同义词中添加一个了联接字段, 您必须在新联接字段上右键选择“联接属性”, 在弹出的对话框中定义联接字段. 在“联接属性”对话框中您可以选择各个联接字段, 如图 2所示. 当您完成添加所有的联接字段,同义词编辑器将会按字段将列分组,提供一个字段的分组可以展开或收缩的用户界面,如图 3 所示. 图 3 – 含多个联接字段的同义词 同义词编辑器还在建模视图标签中提供了一个建模的图形化表示(参照图 4). 您可以双击任何一个字段来显示它的列信息和样本数据. 保存同义词之后,使用如报表助手的DB2 Web Query开发工具,选择新建的同义词作为数据源. 报表助手对话框打开之后,各个连接字段的所有列都可以在报表中使用. 由于各连接字段都已在同义词中定义,因此您不再需要在报表中重新定义. 集中业务逻辑就是将您公司的业务逻辑封装在 DB2 Web Query元数据层,这样可以帮助消除错误,开发人员需要了解每个输出的规则. 在DB2 Web Query中,计算域和条件域可以在同义词中以创建虚拟列的方式分离出来. 例如,我们假设有两个联接的表,ORDERS和STORES. 表STORES中包含一个名为STORESUBCODES的域,它是一个10字符的串,每个字符代表该商店的特定信息. 该域的第4个字符被用来计算订单折扣,有效值为0-9,每个数值代表特定的折扣率.值为0就表示该商店没有折扣,值为9则表示该商店被授权有20%的折扣. 在0和9之间的其它数值就表示在0和20%之间的特定折扣. 如果您要创建的一系列的报表中需要包含如毛利润的计算信息,您就需要知道并理解这个业务规则并将其应用到每个报表中. 将这个操作在元数据中完成会更加简单,因为它只需要被定义一次. 要做到这一点,您需要在元数据中创建两个虚拟列. 第一个是STOREDISCOUNTCODE,把第4个字符在STORESUBCODES域中提取出来(参照图 5). 第二个虚列则包含计算相应折扣的表达式(基于STOREDISCOUNTCODE的值),计算出出售商品调整后的成本(参照图 6). 出售商品调整后的成本列现在可以方便的添加到任何报表中来准确计算毛利润等,而且不需要在几十个利润相关的报表中重新定义这个特定的业务逻辑. 如果您的报表包含如收入和毛利润的这些数字货币列,您可能需要对这些值设定一些标准的格式. 您可以在元数据中进行这些定义,这样就您就可以不必重复的在数百个报表中进行这样的定义. 同义词编辑器提供了一个简单的选择这些格式定义的界面. 我在图 7中展示了一个例子. 在工作中我碰到很多IBM i商店没有将他们的日期存为日期或时间戳格式,这通常是因为数据库的创建时间早于这些日期类型存在的时间. 因此,经常会有数据库使用压缩十进制和字符域来表示日期值. 一个旧日期域的例子就是一个域被定义为压缩十进制数(8,0),它用06252009来表示 图 8 – 旧日期域示例 由于它们并不是真正的日期域,对DB2 Web Query来说可能会有问题:它并不知道这些值实际上是表示日期的. 就像您在图 9中看到的一样,Web Query工具把它们当成了普通的压缩十进制来看待. 图 9 – 旧日期格式 对于存储这些日期值来说,这样也许没有问题,但您可能并不想在您的报表中显示的也是这种格式. DB2 Web Query可以使用一个新的虚拟列来将旧日期域转换为真正的日期域. 图 10中展示了一个例子. 图 10 – 定义为日期的虚拟列 一旦您定义了真正的日期域,您还可以对日期域进行分解. 也就是将日期域分解成4个单独的虚拟列:年,季度,月,日. 在右键菜单中选择日期列并选择分解日期(参照图 11). 图 11 – 分解日期列 正如图 12所示,同义词现在包含了4个新的虚拟列,可以在报表中使用它们. 图 12 – 新分解的日期列 在我的第一篇文章中也提供了为所有欧洲国家创建报表的例子,也提到了DB2 Web Query过滤器可以通过让元数据管理者在同义词中定义所有的欧洲国家来降低复杂度. 然后,您可以创建一个包含所有欧洲国家的过滤器. 情况类似图 13中所示. 图 13 – 含所有欧洲国家的过滤器同义词编辑器
定义数据库联接
建立虚拟列来集中业务逻辑
标准化列格式
转换和标准化日期域
创建过滤器
UID
ibm11145752