IBM Cognos 最佳实践: IBM Cognos 8 BI – 跨维度数据源查询

文档性质:技巧或技术;产品:IBM Cognos 8 Report Studio、IBM Cognos 8 Framework Manager;关注领域:报表

本文介绍一种通过统一条件格式对二维数据源进行比较的技术。

Revathi Natarajan, 助理系统工程师 / Cognos 开发人员, IBM

Revathi Natarajan 有丰富的 IBM Cognos 8 BI 开发经验,特别是 Cognos BI Studios 和 Framework Manager。她目前是一位高级 eReporting 分析师,也是一个开发下一代 J2EE 架构的架构指导团队的成员之一,这个框架使用了各种技术,包括 Cognos 8 BI、Adobe Flex、Composite (EII) 和 TIBCO 产品。她在其他 OLAP 工具经验,如 Business Objects、Microsoft BI 产品等,对于各种企业分析/报表需求的最佳 BI 工具的推荐/选择是很有帮助的。她甚至曾经担任一个支持多语言的大型数据仓库的数据建模顾问。



2011 年 6 月 02 日

免费下载:IBM® Cognos® Express V9.5 或者 Cognos® 8 Business Intelligence Developer Edition V8.4 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

目的

本文介绍一种通过统一条件格式对二维数据源进行比较的技术。

适用性

该技术将使用以下工具进行测试:

  • IBM Cognos 8 BI 版本 3 和 4
  • IBM Cognos 8 PowerCubes

该技术也适用于其他维度的数据源,如 Microsoft Analysis Services、IBM InfoSphere Warehouse Cubing Services 和 Dimensionally Modeled Relational (DMR)。

假定条件

本文假定读者了解 IBM Cognos 8 BI,特别是了解如何使用 IBM Cognos 8 Framework Manager 创建数据源和发布包,以及了解如何在 IBM Cognos 8 Report Studio 中创建报表。


概述

有些情况下,二维数据源可能需要进行比较,因为一个数据源可能无法包含所有数据。

例如,一个公司可能每个月会在 IBM Cognos 8 PowerCube 中获取迄今为止 12 个月的数据,时间是在每个月的最后一天。由于捕捉数据量较大,PowerCube 的大小可能会超过 1 GB,并且需要更长的构建时间。同一个公司可能会在每日获取当前月份的数据,并且每天一次构建这个数据集。这个公司还可能希望对当月每天的性能与上月性能进行比较,以确定它们是否在控制范围内。

通过使用下面的方法,这个公司可以将 Current Month PowerCube 中的当月数据与 Rolling Twelve Month PowerCube 的上月数据进行比较。


创建一个具有多个 Cube 的包

为了比较一个报表中两个 PowerCube 的数据,这两个 PowerCube 都必须位于同一个 IBM Framework Manager 包中,而且都发布到 IBM Cognos 8。

  1. 要创建这个包,我们要保证为每一个 PowerCube 创建了数据源,然后将它们导入到如下所示的 Framework Manager 中。
    Framework Manager 的 Project Viewer 显示导入后的两个 PowerCubes
  2. 创建一个包。
    Framework Manager 的 Project Viewer 显示新创建的包
  3. 保证这个包包含两个 PowerCube。
    Framework Manage 包定义显示选择了两个 PowerCubes
  4. 将这个包发布到 IBM Cognos 8。

创建一个联合查询

下面的步骤将介绍如何使用一个 Union 对象关联两个 PowerCube。

  1. 打开 IBM Cognos Report Studio,然后选择刚刚发布的包。
  2. 选择 Blank 创建新报表。
  3. 使用 Query Explorer,单击 Queries
    Report Studio - Query Explorer
  4. Insertable Objects 空格,添加三个查询到中间窗格。
    Report Studio - 查询工作区
    其中两个查询将作为基础查询,分别对应一个 PowerCube。每一个查询都包含相同数量的项目,它们具有相同的名称和顺序,这样它们就能够在第三个查询中实现联合。
  5. 将这些查询重命名,如下所示。
    Report Studio - 显示重命名查询的查询工作区
  6. 双击 Current Month 查询,然后将 Current Month 分析中的以下项目添加到查询中。
    • Time 维度的 Month 级别
    • Products 维度的 Product line
    • Order method 维度的 Order method type
    • MeasuresQuantity
    • 设置结果如下所示。
    Report Studio - 查询工作区的 Data Items 窗格
    这个查询还将添加一个数据项来区分查询中用来表示当前月份数据的项目。
  7. Insertable Objects 中,单击 Toolbox 选项卡,然后将一个 Data Item 拖到查询中。
  8. Expression Definition 窗格中,输入 “Current Month”
    Report Studio - Data Item Expression 对话窗口
  9. 单击 OK,然后将数据项重命名为 Month Flag
  10. 使用 Query Explorer,浏览到 Previous Month 查询。

    在这个查询中,Month 数据项将是一个使用空间函数查询分析中最近一个月数据的计算。滚动的 12 个月分析中最后一个月包含了前一个月的数据。
  11. Toolbox 中将一个 Data Item 拖到查询中,然后在 Expression Definition 窗格中输入 closingPeriod(
  12. Available Components 中,展开 Rolling 12 Month 分析项,将 Time 维度的 Month 级别添加到表达式中,然后输入 ).
    这样就会出现如下所示的表达式。
    closingPeriod([Sales and Marketing - Rolling 12 Months].[Time].[Time].[Month])
  13. 单击 OK,然后将数据项重命名为 Month
  14. Rolling 12 Month 分析中的以下项目添加到查询中。
    • Products 维度的 Product line
    • Order method 维度的 Order method type
    • Measures 的 Quantity
  15. Insertable Objects 下,单击 Toolbox 选项卡,然后将一个 Data Item 拖到查询中。
  16. Expression Definition 窗格中,输入 “Previous Month”
    Report Studio - Data Item Expression 对话窗口
  17. 单击 OK,然后将数据项重命名为 Month Flag
  18. Query Explorer 中,单击 Queries,然后将一个 Union 项添加到 Combined Cubes 查询右边。
    Report Studio - 添加了 Union 对象的查询工作区
  19. Current Month 查询拖到 Union 项的顶部虚线方框中,并将 Previous Month 查询拖到 Union 项底部的虚线方框中。
    Report Studio - 给 Union 项添加了查询之后的查询工作区
  20. 双击 Combined Cubes 查询,然后将 Union1 的所有项目添加到查询中。
    Report Studio - 添加了一个 Union 项中查询项的查询工作区

如果现在查看该查询的列表数据,那么能看到由 Month Flag 项标识的当前月份和上个月份的记录。

Cognos Viewer 显示 Union 查询的扁平数据

数据是从两个分析查询到的,即当前月(这里是 2007 年 7 月)和上一月(2007 年 6 月)。


创建一些计算来分离当前月份和上个月份的值

由于 Combined Cubes 查询的结果集是一个比较当前月份和上个月份值的 Union,所以这些数值需要基于 Month Flag 值进行分离。为了实现这一点,我们必须创建两个计算,一个对应当前月份,另一个对应上个月份。

  1. Combined Cube 查询中,从 Toolbox 中将一个 Data Item 拖到该查询。
  2. Expression Definition 窗格,创建以下表达式。

    case when [Union1].[Month Flag] = 'Current Month' 
    then [Union1].[Quantity] end

    这个表达式会检查 Month Flag 的值。如果它是 “Current Month”,那么就检索 Quantity 值。
  3. 单击 OK,将数据项命名为 Current Month,然后将 Regular Aggregate 属性设置为 Total
    Report Studio 显示一个新数据项的属性设置
  4. 使用以下表达式创建另一个 Date Item,将它命名为 Previous Month,然后将 Regular Aggregate 属性设置为 Total。

    case when [Union1].[Month Flag] = 'Previous Month'
     then [Union1].[Quantity] else 0 end

    这个表达式会检查 Month Flag 的值。如果它是 “Previous Month”,那么就查询 Quantity 值,否则将这个值设置为 0。设置为 0 是避免返回空值。这是将来 Boolean 变量计算时需要使用的,它会比较 Current Month 和 Previous Month 的值。Combined Cubes 现在就包含以下的项目。
    Report Studio 显示 Combined Cubes 查询的 Data Items 窗格

创建报表并添加条件格式

现在两个分析已经联合在一起了,并且也创建了用于比较当前月份数据和上个月份数据的值,那么我们可以创建报表布局了。这个例子的报表将是一个交叉表。

  1. 使用 Page Explorer,浏览 Page1,然后从 Toolbox 中添加一个 Crosstab 对象到报表布局中
  2. 选择这个交叉表,然后在 Properties 窗格中,将 Query 属性修改为使用 Combined Cubes 查询。
  3. Insertable Objects 中,单击 Data Items 选项卡,然后将 Combined Cubes 的查询项拖到如下所示的交叉表中。
    Report Studio 显示一个交叉表
  4. 使用 Condition Explorer,单击 Variables,然后将一个新的 Boolean Variable 对象添加到 Variables 窗格。
  5. 在新的 Boolean Variable 的 Expression Definition 中,创建以下表达式。

    [Combined Cubes].[Current Month] > [Combined Cubes].[Previous Month]
  6. 单击 OK,然后将这个新变量重命名为 var_Month_Comparison
    Report Studio 显示 Variables 窗格和属性
  7. 使用 Page Explorer,转回到 Page1
  8. 选择 Current Month 列的事实单元格。
  9. Properties 窗格中,单击 Style Variable 属性旁边的省略号
  10. Variable 中,从下拉列表中选择 var_Month_Comparison,然后单击 OK
  11. 使用 Condition Explorer,在 var_Month_Comparison 中单击 Yes
  12. Properties 窗格中,将 Current Month 事实单元格的 Foreground Color 属性修改为 Green
    Report Studio 显示事实单元格的条件格式
  13. 使用 Condition Explorer,在 var_Month_Comparison 中单击 No
  14. Properties 窗格中,将 Current Month 事实单元格的 Foreground Color 属性修改为 Red
    Report Studio 显示事实单元格的条件格式
  15. 运行报表。其结果如下所示。
    Cognos Viewer 显示两个 PowerCube 的联合查询的条件格式化报表输出
    如果比月的值小,当前月份值会高亮显示为红色,而大于或等于,则高亮显示为绿色。
    为了以保持一致的方式显示空值,我们可以使用条件样式在 Previous Month 列隐藏值为 0 的数据。记住,这里使用了 0 来替换所有的空值,这样就能够保证 Boolean Variable 计算 [Combined Cubes].[Current Month] > [Combined Cubes].[Previous Month] 能够正常执行。
  16. Report Studio 中,右键单击 Previous Month 列的事实单元格, 转到 Styles,然后单击 Conditional Styles
  17. 单击 New Conditional Style 图标,然后单击 Advanced Conditional Style
    Report Studio - Conditional Styles 对话窗口
  18. 单击左下角的 New Advanced Condition 图标,然后在 Expression Definition 窗格,创建下面的表达式。
    [Combined Cubes].[Previous Month] = 0
  19. 单击 OK,然后单击新条件旁边的 Edit 图标(铅笔)。
  20. 单击 Advanced 选项卡,然后在 Visible 下拉列表中选择 No
  21. 在三个打开的对话窗口中单击 OK,然后再次运行报表。
    Cognos Viewer 显示两个隐藏 0 值的 PowerCube 的联合查询的条件格式化报表输出结果
    现在 Previous Month 列隐藏了 0。

结束语

通过使用本文介绍的方法,报表作者就能够比较不同维度的数据源,并按条件地格式化显示其中的值。


下载

描述名字大小
Zip 文件Query_Across_Dimensional_Data_Sources.zip3,430KB

参考资料

学习

获得产品和技术

讨论

  • 参与 developerWorks 博客 并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

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=677761
ArticleTitle=IBM Cognos 最佳实践: IBM Cognos 8 BI – 跨维度数据源查询
publish-date=06022011