技术开发 频道

从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 包含了 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 项目

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

    创建一个空的挖掘流程:

    展开我们刚刚创建的这个项目。

    右键单击 Mining Flow 文件夹。选中 New -> Mining Flow。

    在后面的向导中,键入 AssocFlow 作为挖掘流程的名称。

    在本例中,我们将开始处理这个数据库,因此,保持默认并按 Next。

    选中 DWESAMP 数据库(或您所选中的那个数据库)并单击 Finish。

    创建挖掘流程:

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

图 6. 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 列,指定名称映射为 Names。Names 是输入端口的名称,该输入端口被连接到名称映射表 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 来直观地查阅这些关联规则。
 

0
相关文章