将 InfoSphere Warehouse 数据挖掘与 IBM Cognos 报告集成,第 3 部分 : 使用市场购物篮分析的例子从 Cognos 动态调用挖掘

关联规则表述了在大型数据集中哪些项、事件或其他实体会经常同时发生。这一知识可应用于市场购物篮分析,以便通过给出经常同时购买的产品的建议来充分挖掘交叉销售的潜力。而您则可以将关联规则挖掘应用于 InfoSphere Warehouse 并将结果模块导出到 Cognos 报告,这非常类似于本 系列 前期文章对 Cluster 和 Classification 模块的处理。由于关联规则挖掘是一项高度交互的任务,更好的一种解决方案是允许用户直接从 Cognos 报告调用挖掘,甚至指定额外的参数。这种方式可被认为是一种动态挖掘。在本文中,您将了解这一点是如何实现的。

Benjamin G。 Leonhardi, 软件工程师, WSO2 Inc

作者照片:Benjamin LeonhardiBenjamin Leonhardi 是位于德国 Boeblingen 的 IBM Research & Development Lab 的 InfoSphere Warehouse 数据挖掘方面的软件工程师。他从事挖掘可视化、文本挖掘和挖掘报告解决方案方面的工作。



Christoph Sieb, 高级软件工程师, WSO2 Inc

作者照片:Christoph SiebChristoph Sieb 是位于德国 Boeblingen 的 IBM Research & Development Lab 的高级软件工程师。Christoph 负责 InfoSphere Warehouse 数据挖掘中与数据挖掘算法和框架相关的问题。他在商业智能和数据挖掘领域拥有超过 7 年的开发和顾问经验。



Michael J。 Wurst, Ph.D。, 高级软件工程师, WSO2 Inc

作者照片:Michael WurstMichael Wurst 博士是位于德国 Boeblingen 的 IBM Research & Development Lab 的高级软件工程师。他拥有计算机科学博士学位,并负责 InfoSphere Warehouse 中的数据挖掘算法和工具。在加入 IBM 之前,Michael 曾担任 RapidMiner 数据挖掘软件的合作开发者、架构师和顾问。



2009 年 2 月 26 日

简介

在处理大量数据时,很重要的一点是要理解不同实体间相互关联的规律。通常,发现这些规律是个极为复杂的过程。关联规则是一种十分简单却功能强大的、描述数据集的规则,这是因为关联规则表达了哪些实体能同时发生。

关联规则的传统应用多见于零售业。比方说,有这样的一个管理规则,即 “IF 鸡蛋 AND 牛奶 THEN 糖”,它的意思是很多在购物时购买鸡蛋和牛奶的顾客也会购买糖。这类规则甚至能够从大型数据集中被有效发掘出来。借助 InfoSphere Warehouse,能够方便地找到这些规则,本文会对此进行详述。

在本系列的前一篇 文章 中,介绍了如何先在 InfoSphere Warehouse 构建一个挖掘模型,然后再使用 Cognos 公布结果。在某些情况下,这种做法效果还不错。但是,通常,分析师希望能够交互地影响分析,比如,对所找到的规则进行约束。每次当参数改变的时候,都要进入到 InfoSphere Warehouse DesignStudio,再返回至 Cognos,这非常不方便。相反,您可能更希望创建交互报告以便用户能够设置 Cognos 报告内的参数、在后台自动调用挖掘,然后将结果返回至 Cognos。本文将展示实现此目的的具体步骤。

首先,我们先来了解关联规则挖掘的任务以及如何在 InfoSphere Warehouse 内实现此任务。然后,再来看看如何从 Cognos 动态调用数据挖掘。最后,研究此机制实际应用的一个例子。


市场购物篮分析及关联规则挖掘

关联规则及其应用

关联规则描述了哪些项目经常同时发生。在这种上下文环境中,交易的概念就显得极其重要。到商店的一次访问就应被视作是一次交易,而在这次访问期间所购买的所有商品都是同时发生的,被称作是一个市场购物篮。当然,也可以将某顾客在一年内所有的购物视作是一次交易。这取决于所采用的规则。

让我们看一个简单的例子。下表展示了商品的交易。每次交易都包含顾客在一次到店期间所购买的所有商品。

图 1. 示例交易
示例交易

可以看出,pc 的购买次数很频繁。而 pc 和显示器的组合则占到了所有交易的 20%。另外,在购买了 pc 和显示器的情况中,有 50% 还会购买鼠标。如果我们采用如下规则,即 [PC, Monitor]->Mouse,其中 [Pc,Monitor] 是主体,而 Mouse 则是头或目标,那么同时涉及主体和头的交易数量除以所有交易的数量得到的就是 support (20%)。 这种测量方法能告诉我们该规则在数据内发生的频率。但它并不能告所我们该规则的准确度。confidence 描述了规则的主体和头在交易内同时发生次数的百分比。这能给出有关规则准确度的信息。关联规则挖掘要求用户要能说明最少 support 和 confidence。算法还能准确表述出满足这些标准的项目和规则的组合。

关联规则挖掘的应用场景很多。其中最为突出的就是我们已经提到过的零售业。关联规则可用来进行超级市场内的商品摆放,以便经常同时购买的产品的位置能够彼此靠近。更为重要的是,关联规则还可用在电子商务中,通过向用户建议他们可能感兴趣的其他商品来进行潜在的交叉销售。另一个应用的领域是健康医疗,利用关联规则找出经常同时发生的健康问题,以便诊断出患一种疾病的患者还能进行额外的检查,从而判断该患者是否存在其他与此疾病经常连带发生的身体问题。其他的应用领域还包括侵入检测、Web 日志分析、数据库访问模式等等。

序列规则是关联规则的一种,与关联规则稍有不同。序列规则不只能表明哪些实体同时发生,而且还能表明就其出现的时间而言这些事件是如何关联的。比如,序列规则可能会表明先购买笔记本再购买笔记本包的顾客,很有可能在 6 个月内还会购买一个便携鼠标。本文所展示的大部分内容也都适用于序列规则。

InfoSphere Warehouse 内的关联规则挖掘

对关联规则挖掘的调用是通过调用一个存储过程完成的,与 InfoSphere Warehouse 内的所有其他挖掘操作无异。受支持的交易格式各异,在本文的后续章节,我们将使用如下所示的这种交易格式。

图 2. 交易表
交易表

要执行挖掘,必须先告知算法,在哪些列能找到实际的商品,在哪一列包含如何将商品组合成交易的相关信息。在本例中,此列的名字是 TRANSID,用途是根据每个顾客购物的情况对商品进行组合。我们也可以使用顾客 id 作为组的 id 来根据顾客购物的完整历史寻找关联。使用 SQL 命令 IDMMX.BuildRuleModel 或 DesignStudio 内的 Associations 操作符,就能调用挖掘。但必须提供模式名、交易表名、组列、最小 support 和 confidence 以及最大的规则长度。请注意,商品是由 id 描述的。商品的名称可以通过一个名称映射表添加,该表包含商品 id 及相应的描述。此外,还有很多其他的可选项,比如分类法、商品重量等。更多细节,请参考 InfoSphere Warehouse 教程。

与分类或集群模型类似,规则模型也可以在 DesignStudio 被可视化。我们还可以将此模型内包含的信息提取到表内,这与 集群的情况是一样的。通过命令 IDMMX.DM_getRules 或 DesignStudio 内的 Rule Extractor 操作符可实现此目的。在结果集内,每个记录包含一个规则,并具有如下信息:

  • head
  • body
  • confidence
  • support
  • lift
  • length

而包含被提取后的规则的表则非常类似于:

图 3. 规则表
规则表

下一个章节将展示如何将这些信息传递给 Cognos 以便以一种简便的方式对之进行可视化。


从 Cognos 调用挖掘过程

在上篇文章中,您了解了通过将 DB2 存储过程作为 Query Subject 包括到 Cognos Metadata 是能够从 Cognos Reporting 调用 DB2 存储过程的。这样做会使存储过程在报告运行时就能执行,而后,您就能使用它来从已有的 PMML 挖掘模型提取信息。

在本文中,我们还会更进一步,利用 InfoSphere Warehouse Mining SQL API 在参数化了的存储过程内动态创建一个挖掘模型。该存储过程之后会从此模型提取信息并将其返回给 Cognos Report。

实际上,生成这些规则并将它们传递给 Cognos 的过程所涉及到的调用只有两个。一个调用在数据库内构建规则模型,另一个调用提取这些规则并将其作为结果集返回。不过,创建模型的调用是一个不具有任何返回值的存储过程。要从 Cognos 调用挖掘,最好是在对数据库的单一调用内执行这二者。

以此为目的,基本的想法是创建一个用户定义组合函数,此函数首先调用模型创建过程,之后再提取规则并将这些规则作为结果集返回。这个过程如下图所示。

图 4. 用于动态挖掘的用户定义组合函数
用于动态挖掘的用户定义组合函数

此外,也可以手工创建这个组合存储过程。通过 InfoSphere Warehouse 还可以可视地创建它。稍后,将通过一个例子给出实现这一目的的全过程。

使用 InfoSphere Warehouse 创建复杂的挖掘存储过程

首先,必须创建复合挖掘逻辑。InfoSphere Warehouse 包含了 Mining Editor,可用来图形式地设计挖掘流(挖掘命令的序列)。它们可以在 DesignStudio 内执行,也可以被部署到 InfoSphere Warehouse Administration Console 以便定时运行。但是由于所有挖掘操作都基于的是 SQL,所以,也可以从挖掘流生成一个 SQL 脚本(不包括某些操作符,比如 Mining Visualizers 和 Text analytics,它们没有包含在此数据内)。像 Association Operator 和 Rules Extractor(用在如下的例子中)这样的挖掘操作符均被转变为 SQL。Mining Editor 的 “Generate SQL Code” 命令生成代表挖掘流的 SQL DDL 并被包括在存储过程内,挖掘流的结果表作为此存储过程的结果返回。以下的示例向您展示了这一点是如何做到的。

创建复合挖掘逻辑之后,下一个任务是创建、部署并测试想要创建的这个 SQL 存储过程。InfoSphere Warehouse DesignStudio 包含了 Data Development 项目的 Data 透视图,提供了对 Java 和 SQL 存储过程以及用户定义函数创建的支持。由向导负责创建一个模板存储过程,而您则可直接从 DesignStudio 对之进行部署和测试。

下面的示例显示了如何创建挖掘流程,同时创建关联模型并从中提取规则。之后,了解如何从此流程创建 SQL 代码。在下一步中,这种方法被用来从这些 SQL 代码创建一个存储过程。我们会将输入参数添加到这个存储过程以便之后在 Cognos Report 内设置,我们还要参数化所创建的这个挖掘模型。这些从关联模型中提取出来的规则由此存储过程返回并导入到 Cognos 作为查询主题。最后,我们还要学习如何创建一个简单的 Cognos 报告来显示产品的收入列表和允许穿透钻取这些产品的相关关联规则。


使用 Cognos Report 内的动态数据挖掘结果:一个来自零售业的示例

这个示例中,我们将对零售交易数据进行市场购物篮分析。数据代表的是来自某个零售店的市场购物篮(交易)。第一个表中包含用来标识单个市场购物篮的交易 ID 以及产品 ID。要获得有意义的结果,需要为产品 ID 应用一个名称映射表。

在 InfoSphere Warehouse 自带的示例中可以找到此表。要将此表导入数据库:

  • 打开 DB2 命令窗口
  • 进入 InfoSphere Warehouse 的安装目录
  • 导航到 SQLLIB\samples\dwe\ModelingDB2 子目录
  • 连接到工作数据库(在本示例中,为示例数据库 DWESAMP: db2 CONNECT TO DWESAMP)
  • 执行 db2 -tvf retailImport.db2 命令将此示例表导入到用户模式(在我们的示例中,这被叫做 IMINER)
  • 再创建一个新模式,即 ASSOC,通过 db2 CREATE SCHEMA ASSOC 命令可将其用在后面的示例中

此次分析的目的是提取表单的关联规则:

Toy car + flash light => Battery (support: 3%,	confidence: 83%)

上述的规则表明了在玩具汽车和手电筒的购买案例中,有 83% 的顾客还同时购入了电池。购买了所有这几样产品的情况占所有购物篮的 3%(也即 support)。

规则并不是预先计算的,计算由 Cognos 报告触发。在本示例中,有一个针对每个产品的收入列表,借助它就能够穿透钻取特定产品的关联规则。此外,还可以定义这些规则的最小 support 及长度。之后,根据需要,对这些规则继续计算并通过另一个报告返回给用户。比如,这些规则可被用来进行商店内的产品的合理摆放以提高营业收入。

在 InfoSphere Warehouse DesignStudio 中创建关联规则

首先,必须创建一个关联规则模型,该模型被存储为 PMML,从中可以提取这些规则并将其放入一个数据库表以供日后的 Cognos 访问。要获取更多关于 PMML 的信息,请参考 PMML 标准 Web 站点

创建一个 Data Warehouse 项目:

在 Project Explorer 中,单击右键并选中 New > Data Warehouse 项目,如图 5 所示。

图 5. 创建一个 Data Warehouse 项目
打开 Data Exploration 视图

在下面的向导中,键入项目名称,比如 “AdvancedAnalytics” ,然后按下 Finish

创建一个空的挖掘流程:

  • 展开我们刚刚创建的这个项目。
  • 右键单击 Mining Flow 文件夹。选中 New -> Mining Flow
  • 在后面的向导中,键入 AssocFlow 作为挖掘流程的名称。
  • 在本例中,我们将开始处理这个数据库,因此,保持默认并按 Next
  • 选中 DWESAMP 数据库(或您所选中的那个数据库)并单击 Finish

创建挖掘流程:

Mining Flow 编辑器打开。在 Mining Flow 编辑器的右侧,可以看到一个带操作符的调色板。有了这些操作符,就能通过将其拖放到编辑器的 canvas 来构建一个 Mining Flow。

图 6. Design Studio 中的挖掘流
Design Studio 中的挖掘流

要创建关联规则挖掘模型并将这些规则提取到数据库表,可以执行如下操作:

  • 在调色板中,可以找到 Sources 和 Targets 区域。选中一个 Table Source 操作符并将其拖到编辑器上。
  • 在表选择对话框中,展开 IMINER 模式(或是默认模式)并选择 RETAIL,然后按下 Finish
  • 用一个名为 RETAIL_NAMES 的表创建另一个 Table Source 操作符。
  • 在这个调色板中,找到 Mining Operators 区域。选中一个 Associations 操作符并将其拖到编辑器上。
  • 把 RETAIL 表的 Output Port 连接到 Associations Input Port,同时将 RETAIL_NAME 表的 Output Port 连接到 Associations Names Port。
  • 选中 Associations 操作符。
  • 在挖掘编辑器下面的属性选项卡内,选中左侧的 Mining Settings 选项卡。
  • 在 Group 列选择列表中,选中 TRANSID。具有相同 TRANSID 的所有产品 (ITEMID) 均被放入一个市场购物篮内。
  • 现在,选中 Name Maps 属性页并将 “Item Id Column” 设为 “ITEMID”,将 “Item Name Column” 设为 “DESCRIPTION”。这两列都来自于 RETAIL_NAMES 表,该表是一个名称查阅表。
  • 进入 Column Properties 页面。将除 ITEMID 列外的所有输入列的 “Field Usage Type” 都设为 Inactive ,ITEMID 列则被设为 Active。
  • 在 “Field Usage Type” 的右侧,可以为列指定 Name Mapping。对于 ITEMID 列,指定名称映射为 NamesNames 是输入端口的名称,该输入端口被连接到名称映射表 RETAIL_NAMES。
  • 从 Mining Operators 下的调色板,可以找到一个 Associations Extractor 操作符。将其拖到编辑器上并将 Associations 操作符的 Model 输出端口连接到提取器的 Model 输入端口。这个提取器操作符能从 PMML 模型(由 Associations 操作符创建)提取关联规则并通过关系表结构提供这些规则。
  • 最后,我们还必须将这些提取出的关联规则存储到一个物理表中。要做到这一点,右键单击提取器的 “rule” 输出端口并选中 Create Suitable Table
  • 将表名称设置为 RETAIL_RULES,对于模式,选择这个 RETAIL 表所在的默认模式。按下 Finish
  • 针对 “RETAIL_RULES” 的一个表目标操作符现在应被显示在挖掘流中。要想只获得针对每次运行的当前规则,选中表目标操作符属性中的 Delete previous content 复选框。
  • 保存这个挖掘流。

至此,挖掘流就已经准备好,可以执行了。

执行这个挖掘流:

这个流生成了一个包含了关联规则的模型并将此模型作为 PMML 模型存储在数据库中。之后,这些规则被提取到一个数据库表以便于日后从 Cognos 内访问。在编辑器下方的视图中,Execution Status 选项卡被选中并且在这个视图的右侧,还可以看见最后一个操作符(即 Target Table 操作符)的表输出。此表显示了所提取的这些规则,每个规则都有一个 ID、Head、Body 信息以及有关的统计数据。可以通过右键单击 Associations 操作符并选中 Open Model 来直观地查阅这些关联规则。

将关联规则挖掘流部署为 DB2 存储过程

稍后,在 Cognos 中,您可能会想用用户定义的输入来动态调用前面设计的这个挖掘流。如前面提到过的,此输入是这些规则的最小 support 及规则的长度。为了实现动态调用,需要创建一个存储过程,它接受这两个参数并通过此用户输入调用挖掘流。

在 Data Development 项目中创建一个新的存储过程:

要创建 Data Development 项目,按如下操作:

  • 在 “Data Project Explorer” 内右键单击,并选中 New ->Data Development Project。若找不到这个 Data Development 项目,则选择 Project . . . 并在整个 ect 列表中查找。
  • 指定名称为 Assoc Stored Procedure 并按下Next
  • 选择 Use an existing connection 并选中零售表被导入其中的这个数据库。单击 Finish
  • 如果系统询问您是否想切换这个透视图,请选择 No

要创建这个存储过程,请如下操作:

  • 展开这个新项目并右键单击 Stored Procedure 文件夹。选中 New" -> Stored Procedure
  • 将过程的名称设为 “ASSOC_PROC” 并选中 SQL 作为此过程的语言。单击 Next
  • 在下一个向导屏,接受所提供的 SQL 语句并单击 Next
  • 在 Parameters 屏,定义两个输入参数 —— support 和长度。按下 Add,将名称设为 support,类型设为 FLOAT。按下 OK
  • 对第二个参数 “length” 做同样的设置,类型为 “INTEGER”。
  • 按下 Finish
  • 一个带存储过程主体的编辑器就会打开。

调整这个存储过程来执行前面定义的挖掘流:

  1. 在此过程的主体有两个语句,其作用是定义一个用来返回表行的指针。将声明指针的第一个语句调整为:
    DECLARE cursor1 CURSOR WITH RETURN FOR
    SELECT * FROM IMINER.RETAIL_RULES;

    此指针返回包含有关联规则的 RETAIL_RULES 表的内容。请注意,在本例中,IMINER 是默认模式,您实际的设置可以不同。
  2. 现在,将可视的挖掘流转换为 SQL 语句以便粘贴到存储过程主体中。通过选择编辑器区域中相应的选项卡切换到 AssocFlow 编辑器。
  3. 在菜单中,选择 Mining Flow -> Generate SQL Code
  4. 另一个编辑器打开,其中包含了代表这个挖掘流的 SQL。选中编辑器的全部内容并复制。
  5. 切换到存储过程编辑器 ASSOC_PROC 并传递进指针声明和指针 “OPEN” 语句之间的那些代码。保存编辑器。
  6. 转到存储过程编辑器的顶部,并将 “CURRENT” 从 set-schema 语句中移除,将模式名称替换为在开始时创???的 “ASSOC” 模式:
    清单 1. 用 ASSOC 模式替代模式名称
    P1: BEGIN 
    	-- Declare cursor 
    	DECLARE cursor1 CURSOR WITH RETURN FOR 
    		SELECT * FROM IMINER.RETAIL_RULES;
    
    SET SCHEMA="ASSOC"; ... ...

    ASSOC 模式被用来部署过程。

  7. 转到 CALL IDMMX.BuildRuleModel 语句并对其进行调整以便能够通过 support 和长度参数动态设置最小 support 和规则长度,如清单 2 所示,我们只对第四和第六个参数进行了调整。
    清单 2. 调整第四个和第六个参数
    CALL IDMMX.BuildRuleModel('AssocAnalysis.IM_ASSOC_03', 
    						  'INPUT_03', 
    						  'TRANSID', 
    						  support, 
    						  25.0,
    						  length,
    						  'DM_addNmp(''nameMap'',''NAMEMAP_03'',
    						  ''ITEMID'',''DESCRIPTION''),
    						  DM_setFldNmp(''ITEMID'',''nameMap''),
    						  DM_setFldUsageType(''ITEMID'',1),
    						  DM_setFldUsageType(''STOREID'',2),
    						  DM_setFldUsageType(''CUSTOMER_ID'',2),
    						  DM_setFldUsageType(''ITEMPRICE'',2),
    						  DM_setFldUsageType(''TRANSDATE'',2),
    						  DM_setMaxNumRules(10000),
    						  DM_setAlgorithm(''SIDE'',
    						  ''<NumBins>5</NumBins>'')');
  8. 最后,进入语句:
    ALTER TABLE "IMINER"."RETAIL_RULES" ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;

    并用如下语句替代它:
    DELETE FROM "IMINER"."RETAIL_RULES";
  9. 保存编辑器。

将这个存储过程部署到数据库:

要部署前面创建的存储过程,按如下操作:

  1. 在 Data Project Explorer 中,展开 Data Development 项目 “Assoc Stored Procedure”,展开 Stored Procedure 文件夹并右键单击 ASSOC_PROC 过程;选择 Deploy...
  2. 在 Deploy Routines 对话框中,将模式改为 “ASSOC” 并按下 Finish

至此,此存储过程 ASSOC_PROC 被部署到了 ASSOC 模式。可以通过借助 Database Explorer(见图 7)导航到模式内的 Stored Procedure 文件夹来检验部署。这个存储过程使您能够用用户定义的属性设置来动态调用前面设计的挖掘流。

图 7. 在 Design Studio 内部署 ASSOC_PROC 存储过程
部署后的存储过程

在下一节中,将会介绍如何使用 Cognos 来访问这个存储过程并用动态关联规则挖掘构建一个报告。

用 Cognos Framework Manager 为后面的报告创建元数据

在用挖掘结果来创建报告之前,需要定义应该使用哪些资源(数据库、表、存储过程)。借助 Framework Manager,您就可以定义该元数据并能通过定义关系来丰富数据源。

在下面的几个段落中,您将看到如何创建一个 Cognos Framework Manager 项目、定义这两个输入表以及前面创建的存储过程。最后,了解如何发布项目并使其可为报告所用。

打开 Framework Manager 并创建一个新项目:

  • 启动 Cognos Framework Manager。
  • 启动完成后,单击 Create a new project…
  • 在随后出现的对话框中,将名称指定为 AssociationExample 并单击 OK
  • 将语言选择为 English 并按下 OK
  • 由于想要从一个 DB2 数据库中创建元数据,因而选择 Data Sources 并按下 Next
  • 接下来,选择在本例中使用的这个数据库并按下 Next。如果没有对此数据库的连接,就需要创建一个。关于如何创建连接的信息,请参考 Cognos 文档。
  • 现在,系统提示您选择想要作为元数据导入的数据对象。展开 RETAIL 和 RETAIL_NAMES 所在的默认模式,展开 Tables 文件夹并选择前面提到的那些表。
  • 然后,展开 ASSOC 模式及 Procedures 文件夹,并选择前面部署的 ASSOC_PROC 过程。按下 Next
  • 至此,此页面的设置就完成了,按下 Import,然后按下 Finish
图 8. Cognos 8 Framework Manager
Cognos 8 Framework Manager

创建项目后,Framework Manager 显示在 Project Viewer 的左侧(见图 8)。在 Project Viewer 中,可以查阅这个新创建的项目。展开具有数据库名称的文件夹(在本例中是 “DWESAMP”),查看所导入的表及存储过程。现在,定义 RETAIL 与 RETAIL_NAMES 表之间的一个新的 Relationship。这可以简化后面的报告定义。

要创建此关系,可执行下面的步骤:

  • 右键单击数据库文件夹(这里是 “DWESAMP”)。选择 Create -> Relationship
  • Relationship Definition 对话框打开(见图 9)。
  • 可以在左侧和右侧各定义一个查询主题。在左侧,选择 RETAIL 表,在右侧,选择 RETAIL_NAMES 表。
  • 在两侧,选择 ITEMID 列以关联它们。
  • 如图 9 所示设置基数。按下 OK
  • 可以通过单击 Framework Manager 中部的 Explorer 链接来查阅所创建的关系(见图 9)。
图 9. 关系定义对话框
关系定义对话框

下一步,您将看到如何定义存储过程的参数。这些参数被定义为必须通过报告传递的实参。此外,还必须调用一次这个存储过程。不仅是为了对其进行测试,还要检索那些由此存储过程提供的列。要想像报告处理中的一个表那样使用此存储过程,这非常必要。

要创建这些参数,可执行以下步骤:

  • 双击 Project Viewer 中的 ASSOC_PROC 存储过程。
  • Query Subject Definition 对话框打开(见图 10)。在下面的部分,可以看到存储过程的这两个参数。单击位于 SUPPORT 参数行右端的 “. . . ” 按钮。
  • 在 Edit Argument 对话框的 Value 文件框中键入 # prompt('support')#。按下 OK
  • 对 LENGTH 实参进行同样的处理(用 “# prompt('length')#” 作为实参值)。
  • 按下 OK 确认 Query Subject Definition 对话框中的设置。
  • 现在,Prompt Values 对话框打开。必须传递这两个示例参数值以使 Framework Manager 执行此过程并检索结果列。在长度值字段中输入 “2”,support 值 “3.0”。现在,关联规则挖掘流被执行并将所提取的规则返回给 Framework Manager。
图 10. Edit Argument 对话框打开时的 Query Subject Definition 对话框
Edit Argument 对话框打开时的 Query Subject Definition 对话框

在导入表和存储过程并调整了数据库对象的元数据后,就可以为此项目创建一个包并将其发布到 Cognos Content Store。它继而也就可以用于 Cognos Report Studio 了。

创建一个包并发布:

  • 要使刚创建的元数据可用,需要进入 Project Viewer 并右键单击 Packages 文件夹。选择 Create -> Package
  • 在名称字段,键入 AssociationRulePackage。按下 Next
  • 不做任何改动,再次按下 Next
  • 在随后出现的对话框中,确保 DB2 已在 “Available function sets” 列表中。按下 Finish
  • 在随后出现的对话框中,按下 Yes 继续这个发布进程。
  • 在 Publish Wizard 的 “Select publish location” 部分中,由于不必做任何改动,直接按下 Next
  • 由于不必指定安全性设置。因此,直接按下 Next
  • 然后按下 Publish
  • 这时会弹出一个对话框,提示说已成功发布了您的包;按下 Finish

使用来自动态关联规则挖掘的结果创建一个 Cognos 报告

要创建一个 Cognos 报告,可以借助 Cognos Report Studio,这是一个完全基于 Web 的应用程序。我们将创建两个报告 —— 一个显示依产品分组的收入列表,另一个显示 RETAIL 表内的产品的关联规则列表。了解如何定义一个从报告 1 到报告 2 的穿透钻取定义。单击此收入列表中的一个产品,打开在规则头内包含所选产品的那些规则。借此,可以分析哪些产品提高了所选产品的收入。甚至,可以定义数据集中的这些规则的最低 support 以及规则的长度。通过一次单击,挖掘就可实时执行,结果也会被过滤和显示出来。

您还需执行如下的步骤来创建收入列表的报告:

  • 启动 Cognos Report Studio。
  • 在 Welcome 屏中,单击 Create professional reports 链接。
  • 在 Select a package 浏览器中,单击在 Framework Manager 中发布的这个 AssociationRulePackage 包。
  • 在 Welcome 对话框中,选择 Create a new report for template
  • 选择 List 模板并按下 OK
  • 在 Insertable Objects 视图的左上窗格内,可以选择不同的选项卡。Data sources 选项卡被选中,如图 11 所示。
    图 11. Report Studio
    Report Studio
  • 在 Insertable Objects 视图中,展开 RETAIL 表并将 ITEMID 列拖到 Report Studio 右侧的编辑器页面的列表表格。然后将 ITEMPRICE 列拖到此列表内的 ITEMID 列的右侧(见图 11)。
  • 展开 RETAIL_NAMES 表并在 ITEMID 和 ITEMPRICE 列间拖拽 DESCRIPTION 列。
  • 单击 ITEMPRICE 列。不要在列头上单击,而是要单击列头下的三个单元格。在工具条中,按下 Sort 按钮(见图 11)并选中 Sort Descending 选项。我们想要让此收入列表能够显示产品组,并且最高的收入列在最顶部。
  • 按下 Run Report 按钮来预览报告的当前状态。
  • 将这个报告保存为 RevenueReport。

为了创建这个关联规则报告,还需执行下面的步骤:

  • 从 List 模板中为同一个包创建一个新的报告。通过选择 File->New in the Report Studio 可以实现此目的。
  • 在 Insertable Objects 视图中,展开 ASSOC_PROC 对象并将 BODYTEXT、HEADNAME、SUPPORT 及 CONFIDENCE 列拖到位于 Report Studio 右侧的编辑器页面上的列表中。
  • 由于只想显示在规则头内包含指定产品的那些规则,因此,必须定义一个过滤器。选择列表内的任意一列并按下工具栏中的 Filters 按钮。
  • 在 Filters 对话框的左下方,按下 Add 按钮。
  • Detail Filter Expression 对话框随即打开。展开 ASSOC_PROC 过程并双击 HEAD。这个头列被加入到对话框的右侧。依照如下方法扩展右侧的部分:
    [DWESAMP].[ASSOC_PROC].[HEAD] = ?product?
    ?product? 表达式定义了一个参数,稍后,根据所单击的产品,该参数将被第一个报告传递。
  • 按下 OK 两次。
  • 要想完成参数的传递及存储过程的调用,必须要做最后一个调整。选择 Explorer 选择栏(见图 11)中的 Query Explorer,然后选中 Query 1
  • 在 Report Studio 左下方的 Properties 中,选择 Processing 属性并从下拉框中选择 Limited Local
  • 按下 Run Report 按钮来预览报告当前的状态。
  • 接下来,系统提示您提供三个参数 —— 其中两个由此存储过程提供,另一个由您刚刚定义的过滤器提供。将 support 设置为 3.0,长度设置为 2,HEAD id 设置为 142。按下 OK
  • 最后,将这个报告保存为 “AssocReport”。

现在,需要通过一个穿透钻取定义扩展第一个报告以便调用第二个报告。

要在收入报告中创建一个穿透钻取定义,还需执行下面的步骤:

  • 通过选择 File->Open 再次打开第一个 RevenueReport。
  • 在编辑器区域中的这个列表内,选择 ITEMID 列(不是列头,而是列头下面的这三个单元格)。
  • 右键单击所选中的单元格并选中 Drill-Through Definitions...
  • 在 Drill-Through Definition 对话框的左下方区域中,选择 Add 按钮。
  • 按下 Report 字段旁边的 “...”,并选中 AssocReport
  • 选中 Open in new window 复选框。
  • 按下 Parameters 框下方的 Edit 按钮。
  • 在 Parameters 对话框中,要定义哪个值将被传递给之前定义的 AssocReport 的产品参数。在这个产品行的 Method 列中,从下拉框中选择 Pass data item value
  • 在此产品行的 Value 列中,选择来自该报告的 ITEMID 列。这个 itemid 将被传递给 AssocReport 并且会导致只显示规则头内包含有此产品的那些规则。
  • 两次按下 OK
  • 保存这个报告。
  • 按下 Run Report 来预览此报告。
  • 在这个排序了的收入列表中,选择一些内容,例如 ID 号为 191 的 “Toy car”。请注意,不是所有的产品都有相关的关联规则,因为这些规则的 support 在计算过程中可能会过小。
  • 现在,系统提示您只需提供两个参数,这是因为穿透钻取定义传递了第三个参数 —— 该产品。将 support 设为 2.0、长度设为 3,并按下 OK

下面的图 12 显示了最终的报告。第一个报告按照递减顺序显示产品收入。第二个报告显示了所选产品经过滤的、动态创建的那些关联规则。

图 12. 零售关联规则的最终报告
零售关联规则的最终报告

结束语

在本文中,您了解了关联规则挖掘及如何用 InfoSphere Warehouse 获得关联规则的有关内容。关联规则挖掘是一项高度交互的任务,用户通常需要尝试多种参数设置才能达到理想的结果。Cognos 则非常适于为交互规则分析提供支持。除了在本系列前两篇文章中介绍的技术外,您还掌握了挖掘是如何实际从 Cognos 动态调用的,这样一来,无须切换到 DesignStudio,用户就能设置参数和限定条件。在本系列最后一期文章中,将会为您介绍如何在一个交互式客户细分应用程序中综合使用到目前为止本系列文章所展示的所有方法。

参考资料

学习

获得产品和技术

  • 用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个开发项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=373017
ArticleTitle= 将 InfoSphere Warehouse 数据挖掘与 IBM Cognos 报告集成,第 3 部分 : 使用市场购物篮分析的例子从 Cognos 动态调用挖掘
publish-date=02262009