IBM Cognos 最佳实践: IBM Cognos 10 Dynamic Query Mode 迁移场景

产品:IBM Cognos 10;关注领域:升级/迁移

本文将描述从 Compatible Query Mode 迁移到 Dynamic Query Mode 时遇到的各种场景。

Ken Tanaka, 开发经理, IBM

Ken Tanaka 是 Cognos 平台团队中的一名开发经理,主要工作领域是数据访问基础架构和集成。他感兴趣的技术领域主要是数据库和报表,具有大约 17 年的软件开发经验。



Daniel Wagemann, Cognos 最佳实践顾问, IBM

Daniel Wagemann 是位于加拿大的 Business Analytics 的一名 IBM Cognos 最佳实践顾问。在他从事 IBM Cognos 产品套件方面的工作的 11 年中,他对 IBM Cognos 部署的所有领域有了广泛的了解。他的专业领域包括课程开发、技术写作、咨询和客户支持。几乎可以在 Proven Practices Site 的所有领域中找到他的作品。



Glen Seeds, Cognos OLAP Query Planner 架构师, IBM

Glen Seeds 是 Cognos BI Platform 团队的一名架构师。他的工作涉及维度查询的所有方面,主要关注如何使查询引擎语义满足 BI 作者的需求。Glen 在 IBM Cognos 已工作了 14 年,在担任 Cognos BI Platform 团队架构师的 6 年中,他参与撰写了大量产品文档和培训材料,指导创作者根据维度数据创建报告。



Hamid Majdabadi, Cognos 平台团队负责人, IBM

Hamid Majdabadi 是 IBM Cognos 平台团队的负责人,主要负责确保 TM1 和 Microsoft 基础架构和集成中的 IBM Cognos 10 Dynamic Query Engine 的质量。他感兴趣的技术领域主要是 OLAP,以及 TM1 和 Microsoft SQL Server Analysis Services 与 IBM Cognos BI 和报告的集成。Hamid 拥有超过 12 年质量保证工作经验。



Maddy Knuth, IBM Cognos Analytic Applications 信息开发人员, IBM

Maddy Knuth 是加拿大的一名 IBM Cognos 信息开发人员,主要负责处理 IBM Cognos 产品文档。她目前正在负责处理各种用户文档,其中包括 IBM Cognos Analytic Applications 文档。Maddy Knuth 的专长是基于任务的用户文档,她还积极致力于客户文档中的语法和创新。



Rick Kenny, Cognos Data Access 高级技术人员, IBM

Rick Kenny 是 IBM Cognos 的一名高级技术人员,擅长查询语言。目前,他正在领导针对 IBM Cognos 查询语言的一个正式规范的开发工作。在 Cognos 工作的 5 年中,他曾领导 Cognos Architecture Council 和各种跨产品架构项目。Rich 是一位软件业资深从业人员,拥有超过 25 年为客户构建企业系统产品的经验,工作涉及信息检索、远程资产跟踪和扫盲培训等大量领域。



Robyn Kinnaird, 编辑

Robyn Kinnaird 是 IBM 的一名技术编辑。她担任编辑和技术作者已有超过 20 年的时间。Robyn 参与撰写和制作文档和技术文本,其中涉及电信、医疗、个人生产力软件、网络、商业分析软件等领域。她拥有英语语言和写作专业学士学位,是加拿大编辑协会成员。



Ron Ferguson, 技术文档编辑, IBM

Ron Ferguson 是一名 IBM Cognos 产品技术编辑。Ron 从事软件业的写作和编辑工作已有 20 年的时间,在 Cognos 公司工作了 7 年时间。



Sylvie Savoie Evasuk, SAP BW QC, IBM

Sylvie Savoie Evasuk 曾在 Cognos 实验室担任了 16 年的软件质量保证工程师。她曾参与 Architect、Cognos Query、Powerhouse 等 Cognos 遗留产品的开发,还参与了一些较新产品的软件开发,比如 Report Studio、Query Studio、Analysis Studio、Framework Manager、PowerPlay Studio 和 Cognos 8 Go! Dashboard。她拥有 St Francis Xavier University 的心理学荣誉学位,随后参加了为期一年的计算机科学强化学历课程。她了解 Cognos 产品的客户和设计视角。Sylvie 目前担任 Platform Test Organization 的团队负责人职位。



2011 年 11 月 21 日

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

简介

目的

本文将描述从 Compatible Query Mode 迁移到 Dynamic Query Mode 时遇到的各种场景。每个场景都包含一个场景 ID,它可作为一个公共引用点,促进与 IBM Cognos Support 之间的对话。

适用范围

本文档适用于使用:

  • IBM Cognos 10

从 Compatible Query Mode 迁移到 Dynamic Query Mode

尽管已竭力地帮助用户将报告从 Compatible Query Mode 轻松迁移到 Dynamic Query Mode,但还是有一些报告在迁移时发生行为异常的场景。这些偏差均可以通过以下事实解释:Dynamic Query Mode 将与相关构件行为一致的清晰行为规则应用到所有适用的例子。当这些规则不适用时,报告失败,并显示一条消息指出底层问题。下面各小节将详细描述这些场景,并为解决这些异常场景提供建议方案。

来自相同层次结构的级别的不相邻嵌套

文档 ID:DQM-D131-150041
OLAP

使用基于 OLAP 的包时,来自相同层次结构的级别的不相邻嵌套的报告将生成以下错误消息:

XQE-PLN-0212 The report nests more than one level from the same hierarchy but they are not adjacent to each other. Please make levels from the same hierarchy adjacent.

下面的案例研究展示了如何迁移这样一个报告:报告作者在报告中以不相邻格式利用来自相同层次结构的级别。交叉表 (crosstab) 在行上分别投射 Sales region、Product line 和 Country,在列上投射了 Years,还拥有一个 Quantity 作为交叉表的度量值。该报告布局如下列图所示。

图 1. 一个交叉表:分别包含 Sales region、Product line 和 Country 行,Years 列,和 Quantity 度量值。
图 1. 一个交叉表:分别包含 Sales region、Product line 和 Country 行,Years 列,和 Quantity 度量值。

Sales region 和 Country 是来自相同层次结构的级别,但是,在 Metadata 视图中,Sales region 比 Country 高一个级别。

图 2. 显示 Sales region 和 Country 级别的 IBM Cognos Report Studio 元数据布局
图 2. 显示 Sales region 和 Country 级别的 IBM Cognos Report Studio 元数据布局

在 Compatible Query Mode 中执行时,报告正确显示:Sales region、Product line 和 Country 分别为行,Year 为列,Quantity 为度量值。

图 3. 使用 Compatible Query Mode 在 IBM Cognos Viewer 中执行的已投射交叉表
图 3. 使用 Compatible Query Mode 在 IBM Cognos Viewer 中执行的已投射交叉表

在 Dynamic Query Mode 执行相同的报告会生成以下错误消息:

XQE-PLN-0212 The report nests more than one level from the same hierarchy but they are not adjacent to each other. Please make levels from the same hierarchy adjacent.

为了正确执行这个报告,Dynamic Query Mode 要求来自相同层次的级别在相同的层级顺序中相邻。可以重新安排上述的示例报告,通过直接将 Country 嵌套到紧邻 Sales region 来执行 Dynamic Query Mode。新的嵌套避免了 Sales region 和 Country 级别被 Product line 级别分隔的情况。

当报告通过 Dynamic Query Mode 重新执行时,不再产生错误。报告正确显示:Sales region、Country 和 Product line 为交叉表的行,Years 为列,Quantity 为度量值。

图 4. 使用 Dynamic Query Mode 的报告输出,级别嵌套顺序更改为匹配层次结构的层级顺序
图 4. 使用 Dynamic Query Mode 的报告输出,级别嵌套顺序更改为匹配层次结构的层级顺序

嵌套相同层次结构的级别所使用的层级顺序与元数据定义的顺序不同

文档 ID:DQM-D132-150046
OLAP

使用基于 OLAP 的包时,通过 Dynamic Query Mode 执行时,相同层次结构级别的顺序与元数据中定义的顺序不同的报告将生成以下错误消息:

XQE-PLN-0213 The report nests levels from hierarchies 'hierarchy_names' breaking the hierarchy level order. Please nest levels according to natural hierarchy level order.

下面的案例研究展示了如何迁移这样的报告:报告作者使用的相同层次结构级别的顺序与元数据定义的顺序不同。交叉表分别在行上投射 Country 和 Sales region,在列上投射 Years,将 Quantity 作为度量值。这个报告布局如下图所示。

图 5. 一个交叉表:在行上分别投射 Country 和 Sales region,在列上投射 Years,将 Quantity 作为度量值。
一个交叉表:在行上分别投射 Country 和 Sales region,在列上投射 Years,Quantity 作为度量值。

Sales region 和 Country 是来自相同层次结构的级别,但是,在 Metadata 视图中,Sales region 比 Country 高一个级别。

图 6. 显示 Sales region 和 Country 级别的元数据布局
图 6. 显示 Sales region 和 Country 级别的元数据布局

以 Compatible Query Mode 执行该报告时,报告显示 Country 和 Sales Regions 为交叉表行,Years 为列,Quantity 为度量值。

图 7. IBM Cognos Viewer 显示一个交叉表,其中 Country 和 Sales Region 嵌套为行,Years 为列,Quantity 为度量值
图 7. IBM Cognos Viewer 显示一个交叉表,其中 Country 和 Sales Region 嵌套为行,Years 为列,Quantity 为度量值

以 Dynamic Query Mode 执行这个报告将生成以下错误消息:

XQE-PLN-0213 The report nests levels from hierarchies 'Sales regions' breaking the hierarchy level order. Please nest levels according to natural hierarchy level order.

为了正确执行这个报告,Dynamic Query Mode 要求根据层次结构规定的顺序嵌套级别。可以重新安排嵌套在该交叉表示例的行上的级别,将 Country 嵌套到 Sales region 下以匹配交叉表的层级顺序,然后通过 Dynamic Query Mode 执行报告。这个新嵌套就绪后,交叉表如图 8 所示将 Country 和 Sales region 投射到行上,将 Years 投射到列上,将 Quantity 作为度量值。

图 8. 投射后的交叉表,重新安排了级别以匹配层次结构的层级顺序
图 8. 投射后的交叉表,重新安排了级别以匹配层次结构的层级顺序

以 Dynamic Query Mode 重新执行该报告时,该报告不再生成错误。报告正确显示:Sales region 和 Country 为交叉表的行,Years 为列,Quantity 为度量值。

图 9. Sales Region 和 Country 嵌套在行上以匹配层次结构的层级顺序的报告输出
图 9. Sales Region 和 Country 嵌套在行上以匹配层次结构的层级顺序的报告输出,

多个边上的相同层次结构

文档 ID:DQM-D134-150047
OLAP

使用基于 OLAP 的包时,将来自相同层次结构的级别投射到交叉表的不同边、行和列上的报告将生成以下错误:

XQE-PLN-0215 The report has levels from the same hierarchy on multiple edges. Please place levels from each of the following hierarchies on only one edge, 'hierarchy_names'.

下面的案例研究展示了如何迁移这样一个报告:报告作者在多个边上利用来自相同层次结构的级别。下面的交叉表将 Country 级别作为列,Sales region 作为行,Quantity 作为度量值。Country 级别和 Sales region 来自相同的层次结构。

图 10. 一个交叉表:Sales region 投射到行边上,Country 投射到列边上
图 10. 一个交叉表:Sales region 投射到行边上,Country 投射到列边上

以 Compatible Query Mode 执行这个报告时,报告显示 Sales regions 为行,Country 为列。数量度量值数据在适当的单元中显示为对角斜线 (diagonal skew)。

图 11. IBM Cognos Viewer 中显示的一个交叉表,度量值数据位于对角斜线上
图 11. IBM Cognos Viewer 中显示的一个交叉表,度量值数据位于对角斜线上

以 Dynamic Query Mode 执行这个报告将生成以下错误消息:

XQE-PLN-0215 The report has levels from the same hierarchy on multiple edges. Please place levels from each of the following hierarchies on only one edge, 'level_names'.

为了正确执行这个报告,Dynamic Query Mode 要求按照层次结构规定的顺序在单个边上嵌套层级。可以重新安排示例报告,将 Country 行嵌套到 Sales region 行下方,将 Quantity 度量值移动到列上,然后通过 Dynamic Query Mode 重新执行报告。这个已投射的交叉表如下图所示。

图 12. 将 Country 行嵌套在 Sales region 下方并将 Quantity 嵌套为列,重新安排以通过 Dynamic Query Mode 执行的交叉表
图 12. 将 Country 行嵌套在 Sales region 下方并将 Quantity 嵌套为列,重新安排以通过 Dynamic Query Mode 执行的交叉表

以任一查询模式执行这个报告时,报告都显示 Sales regions 和 Country 嵌套为行,Quantity 度量值数据嵌套为列。

图 13. IBM Cognos Viewer 显示 Sales Regions 和 Country 数据嵌套为行,Quantity 度量值数据嵌套为列
图 13. IBM Cognos Viewer 显示 Sales Regions 和 Country 数据嵌套为行,Quantity 度量值数据嵌套为列

在 IBM Cognos Analysis Studio 内使用 % of Each Column Total

文档 ID:DQM-D047-150048
OLAP

如果使用基于 OLAP 的包创建一个 Analysis Studio 报告,该报告中相同层次结构的两个级别位于相同的边上并且其中的选项 '% of Each Column Total' 已被选中),那么每种查询模式的输出会有不同。下面的场景展示了它们差别。

看看这样一个报告:在行上投射 Sales Region 和 Country,在列上投射 Accessories、Diagnostic Kits 和 Repair Kits;度量值是列合计的 %。

以 Compatible Query Mode 执行报告时,该地区的每个 Country 百分比的总和为 100%。

图 14. 一个交叉表:子项目的百分比的合计为父项目的 100%
一个交叉表:子项目的百分比的合计为父项目的 100%

如果以 Dynamic Query Mode 执行报告,则度量值单元的百分比值将变为所有 Country 行百分比总和。只有在合计整个报告的所有百分比时,百分比总计才等于 100%。

图 15. 一个交叉表:子项目的百分比合计为所有父项目的 100%
图 15. 一个交叉表,子项目的百分比合计为所有父项目的 100%

在 Dynamic Query Mode 中,报告显示与 All the Countries 相关的每个值的百分比,但是在 Compatible Query Mode 中,它返回默认成员(通常是根成员)的子成员的总计。

目前,Dynamic Query Mode 返回的结果不能通过一个报告重新设计覆盖。如果需要 Compatible Query Mode 结果,这种特殊报告样式将被排除在迁移到 Dynamic Query Mode 的候选者之外。

使用值表达式的切片器

文档 ID:DQM-D008-138775
OLAP

使用基于 OLAP 的包时,如果报告包含适用值表达式的切片器 (slicer),那么执行报告时会生成以下错误:

XQE-PLN-0054 The query is not supported. The slicer contains at least one value expression. The slicer must have all set or member expressions.

切片器是成员集。因此,一个切片器必须包含一个成员表达式和一个集合表达式 (set expression)。

看看这样一个报告:报告按零售商区域显示所有产品线的收入。在下面的示例布局中,Report Author 替代 Product line 作为行边,Retailer Region 作为列边,Revenue 作为度量值。

图 16. 一个交叉表报告:Product line 位于行边上,Retailer region 位于列边上,Revenue 作为度量值
图 16. 一个交叉表报告:Product line 位于行边上,Retailer region 位于列边上,Revenue 作为度量值

执行该报告时,Compatible Query Mode 和 Dynamic Query Mode 生成的输出相同,在每个 Product line 和 Retailer region 合并中显示以美元和美分为单位的收入。在下面的样例输出中,Product line “Personal Accessories” 和 Retailer region “Americas” 交叉处的单元显示的 Revenue 为 465,140,601。

图 17. 一个交叉表:按 Retailer region 显示 Product lines 的收入
图 17. 一个交叉表:按 Retailer region 显示 Product lines 的收入

如果报告作者只想查看 Canada 和 United States 的合并(总计)收入,而不想将其他国家的收入包含在内,他可能会使用一个具有以下成员集表达式的切片器:

[Canada] + [United States]

在 Compatible Query Mode 中,对切片器表达式进行验证将导致以下警告消息:

OP-ERR-0233 Slicer Member Set expression="value(tuple([Canada])) + value(tuple([United States]))" is invalid. For anything other than a set of members from the data source, the results may not be what you expect.

然而,报告将正确执行并生成输出,该输出包含想要查看的 Canada 和 United States 的收入合计。在下面的示例输出中,每个 Product line 和 Retailer region 合并的 Revenue 均低于前面报告输出(涵盖所有国家)中的对应值。例如,“Personal Accessories” 和 Retailer region "Americas" 合并的 Revenue 现在为 79,114,381,而不是 465,140,601。

图 18. 交叉表:显示 Compatible Query Mode 中带有切片器的报告的合并收入
图 18. 交叉表:显示 Compatible Query Mode 中带有切片器的报告的合并收入

执行加法时,两个操作对象都必须是值,且结果总是一个值。在显示的示例中,“Canada” 和 “United States” 两个成员的加法意味着 “成员 Canada 的值 + 成员 United States 的值”。由于这是一个值,而不是一个成员或集,因此它在切片器中无效。以 Dynamic Query Mode 执行经过修改的报告将生成以下错误消息:

XQE-PLN-0054 The query is not supported. The slicer contains at least one value expression. The slicer must have all set or member expressions.

对于本例,适当的解决方案是从选中的成员(Canada 和 United States)中创建一个切片器成员集,而不用显式计算。这个切片器成员集变成:

set([Canada], [United States])

这个切片器按照预期的方式工作,因为包含选中成员的层级的默认汇总为 Total。因此,通过合计来自 Canada 和 United States 以汇总交叉表中的每个单元中的收入。

使用经过修改的切片器成员集执行报告时,该输出同样包含 Canada 和 United States 合并(总计)收入。下面的收入与前面样例的输出一致。例如,“Personal Accessories” 和 Retailer region “Americas” 合并的 Revenue 为 79,114,381,与前面相同。

图 19. 交叉表:包含来自切片器成员集 (Canada 和 United States) 中 Canada 和 United States 合并 Revenue 值
图 19. 交叉表:包含来自切片器成员集 (Canada 和 United States) 中 Canada 和 United States 合并的 Revenue 值

一种替代解决方案是将切片器替换为嵌套在交叉表边上的显式计算。例如,该计算可以沿着 Retailer region 下的列边嵌套。执行这个报告生成的输出将与前两个样例输出相同。同样,“Personal Accessories” 和 Sales region “Americas” 合并的 Revenue 值为 79,114,381,如下面的交叉表所示。

图 20. 交叉表:Canada 和 United States 的合并 Revenue 嵌套在 Retailer region 下方的列边上
图 20. 交叉表中的 Canada 和 United States 的合并 Revenue 嵌套在 Retailer region 下方的列边上

尽管这种解决方案需要更改报告布局,但是,在包含前面的切片器使用的成员的层次结构中没有默认汇总 (Total) 时,这种解决方案很合适。

具有无效范围的摘要过滤器

文档 ID:DQM-D015-138423
OLAP

使用基于 OLAP 的包时,包含一个具有一个无效范围的摘要过滤器的报告将生成以下错误消息:

XQE-PLN-0035 The query is not supported. It contains a summaryFilter with a scope that is not a projected dataItem.

看看下面的列表报告:该报告包含 Product line、Region 和 Revenue 三列。Product line 已经被分组,Revenue 中添加了一个摘要合计 (Summary Revenue)。

图 21. 列表报告的布局:按照 Product line 和 Region 列示 Revenue ,按照 Product line 分组
图 21. 列表报告的布局:按照 Product line 和 Region 列示Revenue,按照 Product line 分组

如果只想显示总收入大于 300 万美元的 Product line,报告作者要添加一个摘要过滤器,基于数据项 Revenue 在 Product line 中设置范围,条件如下:

[Revenue] > 300000000

如果以 Compatible 和 Dynamic Query Mode 执行报告,则只显示总收入大于 300 万美元的 Product line。

假如报告作者现在想更改报告以按产品类型而不是产品线显示收入。这个列表报告现在则由三列组成:Product type、Region 和 Revenue。Product type 已经被分组,并在 Revenue 上添加了一个摘要合计 (Summary Revenue)。

图 22. 列表报告布局:按照 Product type 和 Region 列示 Revenue,按照 Product type 分组
图 22. 列表报告布局:按照 Product type 和 Region 列示 Revenue,按照 Product type 分组

尽管 Product line 现在已经替换为 Product type 查询项目,但摘要过滤器仍然就位,并以一个现在没有投射的数据项目 “Product line” 为范围。

如果通过 Compatible Query Mode 验证该报告,则会显示下面的警告:

OP-ERR-0210 The summary filter scope (Product line) found in the query (Query1) is not valid. It must refer to a projected query item. If it is projected, make sure that it is not a sibling to a query item of a different dimension.

尽管存在这个警告,但以 Compatible Query Mode 执行该报告仍然能生成预期的结果。下面的屏幕截图显示了一个简单列表,其中包含 Product type、Region 和 Revenue 三列。Product type 已被分组,并向 Revenue 应用了一个摘要。只显示了合并 Revenue 大于 300,000,000 的 Product types。

图 23. IBM Cognos Viewer 显示一个列表报告,该列表报告包含了合并 Revenue 大于 300,000,000 的 Product types
图 23. IBM Cognos Viewer 显示一个列表报告,该报告包含了合并 Revenue 大于 300,000,000 的 Product types

以 Dynamic Query Mode 执行以下报告将生成以下错误消息:

XQE-PLN-0035 The query is not supported. It contains a summaryFilter with a scope that is not a projected dataItem.

为了以 Dynamic Query Mode 执行这个报告,报告作者应该确定是否仍然需要摘要过滤器。如果不需要,可以通过移除过滤器来修复报告。

如果报告作者想要用过滤 Product type 的摘要值,则修改摘要过滤器,相应地设置范围,并将阈值更改为适合 Product type 级别的值。

如果业务要求是按地区显示 Product type 的收入,同时只显示未投射的数据项 Product line 的总收入大于 $300,000,000 的数据行,那么就不适合使用摘要过滤器。在这种情况下,报告作者可以使用一个强制性的 after-auto-aggregation 细节过滤器,该过滤器具有如下表达式:

Aggregate([Revenue] for [Product line]) > 300000000

执行这个带有过滤器的报告所生成的输出与以 Compatible Query Mode 执行原始报告所生成的输出一致。通过在一个未投射的数据项上的 after-aggregation 细节过滤器中使用 for 子句,底层查询会自动将该项目投射并分组为列表的最外层列。如果要重新创建一个等效报告,列表报告要包含 Product line、Product type、Region 和 Revenue 列。Product line 和 Product type 列要应用一个分组和摘要。此报告的布局如下图所示。

图 24. 由 Product line、Product type、Region 和 Revenue 列组成的列表报告布局
图 24. 由 Product line、Product type、Region 和 Revenue 列组成的列表报告布局

由于 Product line 是一个已投射查询项目,那么这个特殊报告的过滤器将会是原始摘要过滤器:

[Revenue] > 300000000

细节过滤器中的 NOT 操作符

文档 ID:DQM-D122-138427
OLAP

使用基于 OLAP 的包时,如果报告使用一个细节过滤器,而该过滤器包含了一个应用到层次结构的 NOT 操作符,那么执行报告将生成以下错误消息:

XQE-PLN-0190 Detail filters on multi-level member sets using the NOT operator are unsupported.

下面的案例研究描述了如何迁移这样一个报告:报告作者试图排除层次结构中的某个层级中的某些成员。对于这个特殊示例,报告作者创建了一个简单列表报告,该报告包含 Product line 和 Product type 列。

图 25. 包含 Product line 和 Product type 列的列表报告
图 25. 包含 Product line 和 Product type 列的列表报告

报告执行时,生成一个简单列表报告,其中包含 Product line 和 Product type 数据,如下图所示。

图 26. IBM Cognos Viewer 显示一个包含 Product line 和 Product type 数据的列表报告
图 26. IBM Cognos Viewer 显示一个包含 Product line 和 Product type 数据的列表报告

要过滤掉所有以字母 C 开头的 Product types,报告作者在整个 Products 层次结构(所有级别)上创建了一个过滤器,表达式如下:

not (caption([data_source].[Products].[Products]) starts with 'C')

以 Compatible Query Mode 执行时,报告显示所有不以字母 C 开头的 Product types。这是因为过滤器只应用到 Products 层次结构的最低投射级别,Product line 没有被过滤。因此,Camping Equipment 仍然出现在输出中,如下图所示。如下图所示。

图 27. 应用已移除以字母 C 开头的 Product types 的过滤器后的列表输出
图 27. 应用了已移除以字母 C 开头的 Product types 的过滤器后的列表输出

如果以 Dynamic Query Mode 执行这个报告,则会显示下面的错误消息:

XQE-PLN-0190 Detail filters on multi-level member sets using the NOT operator are unsupported.

要以 Dynamic Query Mode 正确执行报告,可以使用以下表达式,将过滤器应用到Product type 级别:

not (caption([Product type]) starts with 'C')

以 Dynamic Query Mode 和 Compatible Query Mode 同时执行更改后的报告,生成的输出与以 Compatible Query Mode 执行带有初始过滤器表达式的报告的输出相同。

在分析摘要外部使用 NestedSet 函数

文档 ID:DQM-D027-157125
OLAP 和 DMR

在一个分析摘要函数(比如 rank)的 within set 子句外部使用 nestedSet 函数的报告将生成以下错误:

XQE-PLN-0130 NestedSet is intended to be used only in the 'within set' parameter of the Rank function. In other contexts, it may not do what you expect.

在 Dynamic Query Mode 中,nestedSet 函数仅限于使用在分析摘要函数的 within set 子句中,下面是一些分析摘要函数示例:

  • 百分比 (percentage)
  • 百分位 (percentile)
  • 分位数 (quantile)
  • 四分位 (quartile)
  • 等级(rank)

即使是在上面的函数中使用 nestedSet,结果也可能不是您所预期的。因此,nestedSet 函数的文档只用于 IBM Cognos Analysis Studio 中,不建议用于其他 Studio。

下面的案例研究展示如何迁移这样一个报告:报告在分析摘要函数的 within set 子句外部的一个表达式中使用 nestedSet 函数。对于本示例,交叉表报告包含列边上的 Quantity 和外层行边上的 Product line,此外,还在 Product line 中嵌套了 Top Two Products。

图 28. 报告布局:显示了嵌套在 Product line 中的 Top Two Products 的 Quantity
图 28. 报告布局:显示了嵌套在 Product line 中的 Top Two Products 的 Quantity

Top Two Products 计算是由下列表达式组成:

NestedSet ( members ([Product line]), topCount ( descendants ( currentMember ( [data_source].[Products].[Products]), [data_source].[Products].[Products].[Product type]), 2, [Quantity] ) )

以 Compatible Query Mode 执行报告时,它显示每个 Product Line 中数量位于前两位的产品类型。下图提供了该输出的视图。

图 29. 显示每个 Product line 中 Quantity 位于前两位的产品类型
图 29. 显示每个 Product line 中 Quantity 位于前两位的产品类型

以 Dynamic Query Mode 执行这个报告将生成以下错误消息:

XQE-PLN-0130 NestedSet is intended to be used only in the 'within set' parameter of the Rank function. In other contexts, it may not do what you expect.

要正确执行这个报告,Dynamic Query Mode 要求从 Top Two Products 计算中移除 NestedSet 函数,如下面的表达式所示:

topCount ( descendants ( currentMember ( [data_source].[Products].[Products]), [data_source].[Products].[Products].[Product type]), 2,[Quantity] )

以 Dynamic Query Mode 和 Compatible Query Mode 同时执行更改后的报告,生成的输出与以 Compatible Query Mode 执行未修改的报告生成的输出一致。

基于相同维度的不同命名空间

文档 ID:DQM-D116-138602
DMR

使用 DMR 包时,如果报告包含来自不同命名空间中的维度的项目,而这些命名空间基于相同的底层维度,那么执行报告将导致两个不同维度。

下面的案例研究展示如何迁移这样一个报告:报告包含来自两个基于相同维度的命名空间的项目。看看这样一个简单列表报告:报告只包含来自一个命名空间的 Product line 级别和来自另一个命名空间的 Product type 级别。这些项目来自的两个维度都基于相同的关系表,Product line 和 Product type 在该关系表中相关联。

图 30. 一个简单列表报告:其中的两个投射项目来自不同命名空间中的两个维度
图 30. 一个简单列表报告:其中的两个投射项目来自不同命名空间中的两个维度

以 Compatible Query Mode 执行时,报告只显示 Camping Equipment 的 Product types。Compatible Query Mode 将这两个来自独立命名空间的维度视为来自相同的维度,这是因为它们都基于相同的关系表。

图 31. 包含来自两个维度的级别的列表报告输出
图 31. 包含来自两个维度的级别的列表报告输出

如果以 Dynamic Query Mode 执行报告,会列出每个 Product line 中所有可能的 Product types。Dynamic Query Mode 分别对待这两个来自独立命名空间的维度,从而保持了模型的最初意图。

图 32. 列表报告包含来自两个独立处理的维度的级别
图 32. 列表报告包含来自两个独立处理的维度的级别

如果将报告修改为包含来自单个命名空间的相同维度的 Product line 和 Product type,那么 Dynamic Query Mode 和 Compatible Query Mode 的输出等同于以 Compatible Query Mode 执行的原始报告的输出。

主细节和已分区交叉表中的摘要过滤器

文档 ID:DQM-D083-145498
OLAP 和 DMR

使用基于 OLAP 或 DMR 的包时,在分区的交叉表包含摘要过滤器的报告将生成以下错误:

XQE-PLN-0159 Unsupported summary filter with a scope on a query with master detail relationship to itself.

看看下列的交叉表报告:报告作者将 Product line 和 Sales Region 嵌套为行,将 Sales region 嵌套为列。Revenue 被选择为交叉表度量值。已将摘要计算应用以汇总所有 Sales regions 的 Revenue 的 Year。该交叉表如下面的屏幕截图所示。

图 33. 一个交叉表:Product line 和 Product type 为行,Sales region 和 Summary 为列,Revenue 为度量值
图 33. 一个交叉表:Product line 和 Product type 为行,Sales region 和 Summary 为列,Revenue 为度量值

报告作者现在决定在 Revenue 上添加一个摘要过滤器,并以 Product type 为范围,以便从输出移除所有小于或等于 $300,000,000 的摘要值。报告作者还决定在 Product line 上分区交叉表。交叉表的分区将 Product line 查询项目放置到标头中,生成了一个 “主-细节” 关系。下图显示了交叉表布局的这些更改。

图 34. 交叉表:显示 Product type 行,Sales regions 列,度量值 Revenue,和分区的 Product line
图 34. 交叉表:显示 Product type 行,Sales regions 列,度量值 Revenue,和分区的 Product line

以 Compatible Query Mode 执行报告时,为每个 Product line 显示一个单独的交叉表,其中只包含在所有 Sales regions 中总 Revenue 大于 $ 300,000,000 的 Product types。下图展示了 IBM Cognos Viewer 中的报告输出。

图 35. 显示分区交叉表的 IBM Cognos Viewer 输出
图 35. 显示分区交叉表的 IBM Cognos Viewer 输出

如果以 Dynamic Query Mode 执行同一个报告,则会生成以下错误消息:

XQE-PLN-0159 Unsupported summary filter with a scope on a query with master detail relationship to itself.

这个错误由显示 Product line 的列表分区和交叉表之间的 “主-细节” 关系 (master-detail relationship) 导致。由于主和细节都使用相同的查询,摘要过滤器会应用到主和细节。由于 Product type(这是摘要过滤器的范围)只在细节中投射,因此摘要过滤器对于主无效。

要以 Dynamic Query Mode 正确执行这个报告,必须将列表分区和交叉表之间的 “主-细节” 关系 (master-detail relationship) 分割为两个独立查询。在这个场景中,列表对象需要关联到一个新的主查询,该查询只包含没有摘要过滤器的 Product line 数据项。下面的屏幕截图显示 List object 的 Report Studio Properties 页,其中包含与主查询的新查询关联。

图 36. 显示 Query 关联的列表属性
图 36. 显示 Query 关联的列表属性

由于列表对象关联到没有摘要过滤器的主查询,报告现在以 Dynamic Query Mode 执行,并返回预期结果。

共享相同查询的页面集和列表摘要过滤器

文档 ID:DQM-D083-145498
OLAP 和 DMR

使用基于 OLAP 或 DMR 的包时,如果报告包含一个摘要过滤器,一个 Page set 和两个共享相同查询的列表,则执行报告将生成以下错误:

XQE-PLN-0159 Unsupported summary filter with a scope on a query with master detail relationship to itself.

下面的列表包含按 Product type 和 Sales region 列示的 Quantity sold。除应用到 Product type 和 Sales region 的分组外,还向 Quantity sold 添加了一个摘要计算。基于数据项 Quantity sold 添加一个摘要过滤器,以 Product type 为范围,以便从输出中移除小于或等于 3,000,000,000 的摘要值,如下图所示。

图 37. 按 Product type 和 Sales region 显示的 Quantity sold
图 37. 按 Product type 和 Sales region 显示的 Quantity sold

要在每页显示一个 Product line,在 Product line 上分组的 Page explorer 中创建一个页面集。下图展示了页面集和 Product line 分组。

图 38. 按 Product line 分组的页面集
图 38. 按 Product line 分组的页面

除第一个列表外,报告作者决定添加第二个列表,以按 Product line 和 Product type 显示 Revenue。与第一个列表相同,第二个列表也关联到相同的查询。下面的屏幕截图展示了包含两个列表的报告布局。最左边的列表仍然包含按 Product type 和 Sales region 列示的 Quantity sold,按 Product type 和 Sales region 进行分组,Quantity sold 有一个摘要计算。最右边的列表包含 Product line、Product type 和 Revenue,并在 Product line 和 Product type 中进行一个分组。

图 39. 包含两个使用相同查询的列表的报告
图 39. 包含两个使用相同查询的列表的报告

当报告以 Compatible Query Mode 执行时,它显示了两个并排的列表对象。左边的列表显示 Product type、Sales region 和 Quantity Sold,右边的列表显示 Product line、Product type 和 Revenue。由于页面集分组,右边的列表只在每页上显示一个 Product line,如下图所示。

图 40. 两个列表的 IBM Cognos Viewer 输出
图 40. 两个列表的 IBM Cognos Viewer 输出

如果以 Dynamic Query Mode 执行这个报告,则会显示以下错误消息:

XQE-PLN-0159 Unsupported summary filter with a scope on a query with master detail relationship to itself.

这个错误是由页面集分组在内部创建的 “主-细节” 关系所导致的。由于主和细节都使用相同的查询,摘要过滤器会应用到主和细节。由于 Product type(这是摘要过滤器的范围)只在细节中投射,因此摘要过滤器对于主无效。

要以 Dynamic Query Mode 正确执行这个报告,必须将两个列表之间的 “主-细节” 关系分割为两个独立查询。在这个场景中,右边的列表对象和页面集分组需要关联到另一个查询,该查询包含 Product line、Product type 和 Revenue,但不包含摘要过滤器。

由于右侧列表对象和页面集分组关联到一个没有摘要过滤器的查询,报告现在以 Dynamic Query Mode 执行,并返回预期结果。

带有值表达式的 tuple 函数

文档 ID:DQM-D016-13877
OLAP

使用基于 OLAP 的包时,使用值表达式作为 tuple 函数的参数的报告将生成以下错误消息:

XQE-PLN-0093 The query is not supported. The argument at position 1 of 'tuple' from the data item 'Tuple_Revenue/Product cost,Camping Equipment' cannot be coerced into a 'Member' expression.

在下面的交叉表中,报告作者将 Year 投射为行,将一个使用 tuple 函数的计算投射在列上。这个计算的表达式包含 tuple([Revenue Divided by Product Cost],[Camping Equipment]),其中 [Revenue Divided by Product Cost] 是一个独立数据项,带有表达式 [Revenue]/[Product cost]。这个交叉表如下面的屏幕截图所示。

图 41. 以 Year 为行并以 tuple 计算为列的交叉表布局
图 41. 以 Year 为行并以 tuple 计算为列的交叉表布局

以 Compatible Query Mode 执行报告时,会显示以下警告消息。

OP-ERR-0182 Invalid parameter '[Revenue Divided by Product Cost]' provided for 'tuple' at position '1' for 'dataItem="Tuple Calculation"'. This parameter is 'Numeric' type but is expected to be one of the following: 'member'.

尽管以 Compatible Query Mode 执行报告时出现了警告消息,但交叉表显示 Years 为行,以及针对 Camping Equipment 列中 Revenue 除以 Production cost 的值。报告输出如下面的屏幕截图所示。

图 42. 显示 Years 为行和 tuple 计算为列的 IBM Cognos Viewer 输出
图 42. 显示 Years 为行和 tuple 计算为列的 IBM Cognos Viewer 输出

如以 Dynamic Query Mode 执行这个报告,则会生成以下错误消息:

XQE-PLN-0093 The query is not supported. The argument at position 1 of 'tuple' from the data item 'Tuple_Revenue/Product cost,Camping Equipment' cannot be coerced into a 'Member' expression.

这个错误是由于向 tuple 函数传递的参数不为成员或度量值所导致的。

要以 Dynamic Query Mode 正确执行这个报告,应将原始 tuple 计算替换成下列计算。

tuple([Revenue],[Camping Equipment])/tuple([Product cost],[Camping Equipment])

进行上述更改后,以 Dynamic Query Mode 和 Compatible Query Mode 同时执行更改后报告,将生成相同的输出。

属性分组

文档 ID:DQM-D143-138738
DMR

使用基于 DMR 的包时,对属性分组的某些报告可能会生成不同的输出。

下面的列表报告包含 Product size 属性和 Revenue 度量值。在 Product size 上应用了一个细节过滤器,以便只显示产品大小等于 100 ml 的数据。这个报告布局如下面的屏幕截图所示。

图 43. 带有 Product size 属性和 Revenue 的列表对象
图 43. 带有 Product size 属性和 Revenue 的列表对象

以 Compatible Query Mode 执行报告时,会返回一行产品大小为 100 ml 的记录。收入值是所有 100 ml 大小的产品的总和。这个报告输出如下面的屏幕截图所示。

图 44. 显示一条带有 100 ml Product size 属性记录的 IBM Cognos Viewer 输出
图 44. 显示一条带有 100 ml Product size 属性记录 IBM Cognos Viewer 输出

如果以 Dynamic Query Mode 执行这个报告,将返回多行产品大小为 100 ml 的记录。收入值是大小为 100 ml 的每个产品的细节值。这个报告输出如下面的屏幕截图所示。

图 45. IBM Cognos Viewer 输出为带有 100 ml Product size 属性的每个成员显示一条记录
图 45. IBM Cognos Viewer 输出为带有 100 ml Product size 属性的每个成员显示一条记录

这两个查询模式的输出出现差异的原因是因为 Compatible Query Mode 没有任何维度函数,它只在报告中应用关系语义。使用这种方法,报告按照 100 ml 产品大小自动汇总。另一方面,Dynamic Query Mode 应用维度语义,就像对 OLAP 源那样。使用这种方法时,就不可能对属性进行分组。这意味着,输出将为 Product size 为 100 ml 的每个 Product detail 成员显示一行数据。

对于这个场景,不能修改报告以在两种查询模式下都生成相同的输出。如果需要对产品大小进行汇总收入,那么可能需要更改模型,用模型中的一个物理维度来替换此属性。

比较表达式中的不同数据类型

文档 ID:DQM-D136-138736
OLAP 和 DMR

使用基于 OLAP 或 DMR 的包时,如果报告包含比较不同数据类型的值的表达式,那么以 Dynamic Query Mode 执行报告将生成以下错误消息:

XQE-EXE-0044 Invalid to compare values with different data types.

在下面的示例中,报告作者创建了一个简单列表报告,报告只包含一个投射数据项 Year,它使用带有如下 caption 函数的 Year 级别:

Caption([Sales (analysis)].[Time].[Time].[Year])

图 46. 使用 caption 函数的查询项目的简单列表报告布局
图 46. 使用 caption 函数的查询项目的简单列表报告布局

然后,作者应用一个细节过滤器,该过滤器使用表达式 [Year]=2004 比较字符串和整数。

以 Compatible Query Mode 执行报告时,将生成下列表报告,其中只包含一个针对 2004 年的行,如下图所示。

图 47. 简单列表报告:显示了指定值 2004 的细节过滤器的 Year 结果
图 47. 简单列表报告:显示了指定值 2004 的细节过滤器的 Year 结果

如果以 Dynamic Query Mode 执行这个报告,则会生成以下错误消息:

XQE-EXE-0044 Invalid to compare values with different data types.

要以 Dynamic Query Mode 正确执行报告,应该更改细节过滤器,以比较相同数据类型的值。对于本示例,细节过滤器需要比较 Year level 和来自 Year 级别的成员,如下所示:

[Sales (analysis)].[Time].[Time].[Year]=[2004]

以 Dynamic Query Mode 和 Compatible Query Mode 同时执行更改后的报告,将生成相同的输出。

DMR 报告中的特定于供应商的关系函数

文档 ID:DQM-D144-140597
DMR

在 Dynamic Query Mode 中使用 DMR 包时,如果报告包含的表达式带有特定于供应商的关系函数,那么执行报告将会生成以下的错误消息:

XQE-PLN-0098 The function 'function_name' is not supported.

所有特定于非 SAP BW 供应商的关系函数都可以在关系查询主题或查询项上运算,这些查询主题和查询项在使用 DMR 包、基于关系数据的 OLAP 式报告中不可用。Dynamic Query Mode 不支持维度对象(比如一个成员)作为特定于供应商的关系函数的参数。因此,这个上下文中不支持特定于供应商的关系函数。

在以下示例中,报告作者创建了一个简单列表报告,该报告包含称为 First name 和 Last name 的属性。并添加一个称为 Full name 的查询计算的第三列。Full name 计算包含以下表达式,使用特定于 IBM DB2 供应商的关系函数 concat 来串联字符串。

concat([First name],concat(' ',[Last name]))

这个报告布局如下面的屏幕截图所示。

图 48. 显示 First name 和 Last name 属性以及 Full name 计算的列表报告布局
图 48. 显示 First name 和 Last name 属性以及 Full name 计算的列表报告布局

以 Compatible Query Mode 执行报告时,将生成一个包含三列的列表报告。前两列显示职员的名和姓,第三列显示职员姓名,中间隔个空格。该输出如下面屏幕截图所示。

图 49. IBM Cognos Viewer 中显示的含有 First name、Last name 和 Full Name 的列表报告
图 49. IBM Cognos Viewer 中显示的含有 First name、Last name 和 Full Name 的列表报告

以 Dynamic Query Mode 执行这个报告将生成以下错误消息:

XQE-PLN-0098 The function 'concat' is not supported.

要以 Dynamic Query Mode 正确执行这个报告,应该更改 Full name 计算,以便它使用 IBM Cognos Report Studio Expression Editor 可用组件部分的 Common Functions 或 Operators 文件夹中的非供应商特定的函数。在这个特殊场景中,这个计算可以更改为表达式:[First name] || ' ' || [Last name]

以 Dynamic Query Mode 和 Compatible Query Mode 同时执行更改后的报告,将生成相同的输出。

列表报告中的非连续相同层次结构嵌套

文档 ID:DQM-D145-144729
OLAP 和 DMR

将 OLAP 或 DMR 包用于列表报告时,来自不同层次结构的已分组级别不能被分散。否则,以 Dynamic Query Mode 执行报告将生成以下错误消息:

XQE-PLN-0187 Some grouped dataItems of hierarchy <hierarchyName> are not consecutive. Check dataItems <dataItemName> and <dataItemName> of query <QueryName>.

看看下列表报告:报告作者投射了级别 Year、Retailer 和 Month,在每个列上进行了分组。Year 和 Month 级别来自相同的层次结构,而它们之间的 Retailer 来自另一个层次结构,如下面的屏幕截图所示。

图 50. 一个列表报告:Year 和 Month 被来自另一个层次结构的 Retailer 分隔
图 50. 一个列表报告:Year 和 Month 被来自另一个层次结构的 Retailer 分隔

以 Compatible Query Mode 执行执行时,报告将 Year、Retailer 和 Month 显示为列,如下面的屏幕截图所示。

图 51. 列表报告将 Year、Retailer 和 Month 显示为列
图 51. 列表报告将 Year、Retailer 和 Month 显示为列

以 Dynamic Query Mode 执行这个报告将生成以下错误消息:

XQE-PLN-0187 Some grouped dataItems of hierarchy 'Time' are not consecutive. Check dataItems 'Month' and 'Year' of query 'Query1'.

为了正确执行这个报告,Dynamic Query Mode 要求从相同层次结构投射的两列出现在连续的组中。必须解除列 Retailer 和 Month 的分组,并按照顺序重新安排,然后再次组合,以便以 Dynamic Query Mode 执行。下图显示重新安排和重新分组后的报告布局。列表列顺序现在为 Year、Month 和 Retailer。

图 52. 列表报告:其中重新安排了列 Retailer 和 Month 以便级别 Year 和 Month 出现在连续的组
图 52. 列表报告:其中重新安排了列 Retailer 和 Month 以便级别 Year 和 Month 出现在连续的组

现在可以通过 Dynamic Query Mode 执行更改后的报告,但会生成不同的输出。下图显示了列表输出中的变化。该列表报告现在显示分组格式的 Year 和 Month 和针对每个 Month 所列出的 Retailers。

图 53. 显示列 Year、Month 和 Retailer 的列表报告
图 53. 显示列 Year、Month 和 Retailer 的列表报告

错误代码索引

XQE-PLN-0035

XQE-EXE-0044

XQE-PLN-0054

XQE-PLN-0093

XQE-PLN-0098

XQE-PLN-0130

XQE-PLN-0159

XQE-PLN-0187

XQE-PLN-0190

XQE-PLN-0212

XQE-PLN-0213

XQE-PLN-0215

参考资料

学习

获得产品和技术

讨论

  • 参与 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=776128
ArticleTitle=IBM Cognos 最佳实践: IBM Cognos 10 Dynamic Query Mode 迁移场景
publish-date=11212011