Cognos 最佳实践之 Drill Down 与 Drill Up

IBM Cognos 商业智能系列软件提供了专业报表的制作平台,能够制作出更加精细的专有报表,尤其在报表之间的关联分析上有着很强大的功能。钻取功能是 Cognos Report Studio 中的重要功能之一,包括同一报表不同层次 (Level) 之间的钻取:上钻 (Drill up) 和下钻 (Drill down),还有不同报表之间的穿透钻取 (Drill through)。本文通过在同一报表不同层次之间实现 Drill up 和 Drill Down 来介绍如何用 IBM Cognos 商业智能软件制作出专业的报表。

朱凯, 软件工程师, IBM

朱凯,IBM 中国系统与技术部的 Developer,浙江大学软件工程硕士。他目前的主要工作是 Cognos 报表开发。



杨奕, 助理架构师, IBM

杨奕,IBM 中国系统与技术部的 IT 专家,上海交通大学电子工程硕士。他目前的主要工作是为客户设计,定制化,和实施各种高端存储的解决方案。



张昕, 高级软件工程师, IBM

张昕,IBM 中国系统与技术部的 IT 专家,上海交通大学电子工程硕士。他目前的主要工作是为客户设计,定制化,和实施各种高端存储的解决方案。



2012 年 4 月 26 日

简介

常规和度量维度用于启用元数据的 OLAP 演示、Drill up 和 Drill down 以及多种 OLAP 功能。而本文主要介绍常规维度(Regular Dimension),因为它是 Drill up 和 Drill Down 实现的基础。

常规维度包含描述性信息和业务键信息,并将信息组织在一个层级内(从粒度的最高级别到最低级别)。它通常包含多个级别,并且每个级别需要一个键和一个标题。如果您的级别没有单独的键,建议您在计算中创建一个键。

常规维度建立在数据源或已在模型中定义的查询主题的基础之上。您必须为每个级别定义一个业务键和一个字符串类型的标题。验证模型时,将检测业务键和标题信息的缺失情况。请勿将常规维度联接至度量维度,而是基于基础查询主题创建联接,并在常规维度和度量维度之间创建范围关系。

常规维度可分解为称为“级别(Level)”的信息组。反过来,各级别可以组织为层级。例如,时间维度可以包含组织到单一层级(称为“Time Dimension”)中的级别“Year”、“Quarter”、“Month”、“Day”和“Hour”。

图 1. Time Dimension
Time Dimension

分层,建立命名空间(Namespace)

将一个模型分为多个层次是规范建模的常规手段,分层可以使你的模型更加强壮、易变更、易扩展。而一般我们在 Cognos 建模过程中,会将整个模型分为 4 层,每一层以一个命名空间表示。

  • Database View:在这一层,主要是将建模所需要的数据表(Data Table)以查询主题(Query Subject)的形式从数据源中导入进来,并对这些查询主题建立连接关系(Relationship)。这些都是原始数据,导入后一般不再对数据做修改。
  • Consolidation View:在这一层,主要以 Database View 中的查询主题为基础,进行一些必要的过滤和运算,建立新的查询主题。
  • Dimension View:这一层以 Consolidation View 中的查询主题为基础,建立常规维度和度量维度,这一层将是本文关注的重点。
  • Presentation View:这一层是为最终的报表展示服务的,是可选的,一般的报表可以直接将 Consolidation View 和 Dimension View 中的查询主题和维度进行展示。

最终的效果如图 2 所示:

图 2. 分层模型
分层模型

建立查询主题(Query Subject)

在创建常规维度之前,首先要建立查询主题。本文以时间维度为例,那么首先要在 Database View 中建立一个名为“TIME_DIMENSION”的查询主题,这个查询主题来源于数据库中的一张表,如图 3 所示。

图 3. 查询主题 TIME_DIMENSION 的来源
查询主题 TIME_DIMENSION 的来源
图 4. 查询主题 TIME_DIMENSION
查询主题 TIME_DIMENSION

TIME_DIMENSION 的数据实例如下图所示:

图 5. TIME_DIMENSION 数据实例
TIME_DIMENSION 数据实例

在一些情况下,我们会发现 Database View 中的一些查询项并不是我们想要在报表中展示的样子,或者有些查询项我们根本不想在报表中展示。那么,我们就需要在 Consolidation View 中新建一些查询主题,在这些查询主题中,添加我们需要在报表中展示的查询项,而这些查询项基本上都来自 Database View。同时,我们可以根据需要,对这些查询项进行一些处理,使之转化我们期望在报表上展示的形式。

在本文的例子中,我们在 Consolidation View 中,以 TIME_DIMENSION 查询主题为基础再创建一个新的查询主题 Time,在这个查询主题中,我们会对 TIME_DIMENSION 查询主题中的一些字段进行一些处理。例如,我们对字段 DAY_KEY 做一些字符处理,如下图所示,它从“Jan 1, 2009 12:00:00 AM”转化成“2009-01-01”的形式,因为作为 DAY_KEY,我们不需要它的小时、分钟等信息,只需要具体的年、月、日。

另外,对字段的处理并不总是必要地,关键取决于你希望在最终的报表上展现哪些数据,而这些数据又是以怎样的形式展现。所以,不能一概而论。

图 6. 处理 DAY_KEY
处理 DAY_KEY

同样,我们会对其他一些字段进行相关处理,最终得到如图 7、8 所示的结果。

图 7. 查询主题 Time
查询主题 Time
图 8. 查询主题 Time 的实例
查询主题 Time 的实例

Time 查询主题包含了许多查询项,他们都是建立时间维度所需要的,包括各个级别(Level)所需的业务键(business key)以及描述信息,其中业务键用于唯一标示某个级别(Level)。


建立维度(Dimension)

在 Consolidation View 中建立好查询主题后,就能以此为基础,在 Dimension View 这一层创建一个常规维度了。在“Dimension View”上右键创建“Regular Dimension”,可以也取名为“Time”,并创建层级(Hierarchy)“Time Dimension”。在 Framework Manager 中对层级的定义如图 9 所示,其中定义了各个级别(Level):“Year”、“Quarter”、“Month”、“Day”和“Hour”,而每个 Level 又包含各自的业务键和描述信息,如图 10 所示。

这些业务键和描述信息,都来自 Consolidation View 中查询主题 Time 的各个查询项(Query Item)。例如,级别 Quarter 的业务键“QUARTER_KEY”的来源(Source)就是查询主题 Time 中的“QUARTER_KEY”,如图 9 所示。

图 9. Time Dimension
Time Dimension
图 10. 各个 Level 所包含的信息
各个 Level 所包含的信息

在 Framework Manager 中对常规维度可以指定多个层级。常规维度的多个层级可用作相同查询的视图。但是在一个查询中,一次只能使用一个层级。例如,您不能在交叉表报表的行中使用一个层级,在列中使用相同维度的另一个层级。如果您需要在同一个报表中使用两个层级,则必须创建两个维度,为每个层级各创建一个。


报表展现

工具:Report Studio。

在本文中提供的案例用于展示受 IBM System Director 监控的各个服务器的历史性能数据。其中有个部分需要按照不同的时间粒度来显示性能数据,设计的目标是用户可以动态地在一张图上选择不同的时间粒度进行显示数据,这就需要在时间维度上实现 Drill up 和 Drill down。

例如,用户可以在图表 11 中的时间轴上右键,选择“Drill up”,然后就可以看到同一时间段按 Week 显示的数据,如图表 12;反过来也一样,用户可以在图表 12 中的时间轴上选择任意一个 Week 右键,选择“Drill down”,就可以看到所选择 Week 中按 Day 显示的数据,如图表 13。

图 11. 按 Day 粒度显示数据
按 Day 粒度显示数据
图 12. 按 Week 粒度显示数据
按 Week 粒度显示数据
图 13. 按 Day 显示的 Week 31 的数据
按 Day 显示的 Week 31 的数据

要达到这样的效果,就需要在 Framework Manager 中建立好时间维度,然后再 Report Studio 中以时间维度作为折线图的横轴。当然,首先要开启 Drill up 和 Drill Down 功能,如图 14、15 所示。

图 14. Drill Behavior 选项
Drill Behavior 选项
图 15. 开启 Drill 功能
开启 Drill 功能

总结

本文从建模开始,一步一步讲解了如何在报表中实现 Drill up 和 Drill Down。

Database View 是模型的基础,它包含了所有的原始数据,我们一般不在这一层进行多余的数据操作。因为 Consolidation View 和 Dimension View 都直接或间接依赖于它,如果一旦它有所变动,就会影响到整个模型,应尽量避免。

Consolidation View 是一个中间层,它直接依赖于 Database View,又为 Dimension View 提供数据。我们在这一层上建立的查询主题和查询项,基本都是我们要在报表上展示的数据。然后根据需要,对某些查询项进行一些处理。

Dimension View 是直接和 Drill up 和 Drill Down 功能相关的一层,因为我们要在这一层建立 Regular Dimension,而建立的基础则是 Consolidation View 中的查询主题和查询项。

建立好 Regular Dimension 后,我们就可以在报表中应用 Drill up 和 Drill Down 功能了。

虽然 Drill up 和 Drill Down 功能的实现,看起来只取决于 Regular Dimension,但是我们应该看到,一个定义良好,并且层次分明的模型对报表的实现是至关重要的。

参考资料

学习

获得产品和技术

讨论

条评论

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=812097
ArticleTitle=Cognos 最佳实践之 Drill Down 与 Drill Up
publish-date=04262012