superdebug
作者superdebug·2012-10-20 11:32
信息技术经理·可以

中国式报表初级教程(转)

字数 5304阅读 1531评论 1赞 2

随着海量数据时代到来,各种信息呈现爆炸式增长,商业智能在业务分析和决策支持中的作用越来越重要,与此同时越来越的企业决策者和管理人员希望借助于 Cognos BI 工具提升企业运营能力和组织绩效。如今 Cognos BI 已经越来越广泛地应用于各行各业,工具本身已经提供了丰富多彩的展示方法和样例,但在实际应用中,由于中国报表的特殊性:数据量大,格关系非常复杂,分片,多源,布局扩展非常灵活,无任何规律可循,因此大多 BI 工具自带的报表样式无法直接满足中国企业决策者的需要,这众多 Cognos BI 开发人员工作中经常遇到的挑战。本文结合 Cognos 10 通过多个典型案例详细阐述了复杂表头的创建以及通过横向合并,纵向合并实现复杂中国式报表的过程,旨在为 BI 开发人员提供一定的技术支持,从而更好地满足用户需求,支持业务分析和管理决策。

创建复杂中国式表头

中国式报表数据量大,表格关系复杂,而在表头的处理上根据不同的业务需要更是丰富多样:数据分片,单元格不对称,多重嵌套等。在 Cognos 中 List 和 crosstab 提供了常规的列表式、交叉表式的数据展示方式,本节将结合 Cognos sample 实例阐述如何在 list 和 crosstab 中创建较复杂的中国式表头的过程。

创建 Crosstab 复杂表头

假设 BI 项目中客户有这样一个报表需求,如图 1 所示,从图中我们可以看出表头有很多不对称嵌套单元格,以及空白列等,下面将详细阐述如何在 crosstab 中实现这样的需求。



[url=]图 1. crosstab 复杂表头示例[/url]



步骤 1:打开 report studio,选择 GO Data Warehouse (analysis),新建一张 crosstab 报表;

步骤 2:接着就可以向 crosstab 的行和列添加报表需要的数据项。从左边可插入对象窗格中选择 Sales 名字空间中 Employee by region 维度下的层级 Branch region, Country 并嵌套拖入 Row 中,同时将报表用到的维度层级及指标拖入 crosstab 的 column 位置,完成后如图 2 所示。



[url=]图 2. 创建 crosstab 报表[/url]



步骤 3:设置 crosstab 的默认指标为 Revenue,如图 3 所示。



[url=]图 3. 设置默认指标[/url]



步骤 4:嵌套一个交叉表空间到 2005 数据项的上方,并将 2006, Quantity, Revenue 向左嵌套,使交叉表空间位于这四个数据项的上方,再分别拖入 Camping Equipment 和一个交叉表空间到 Camping Equipment 子数据项的上方,详细过程如图 4 所示。



[url=]图 4. 嵌套交叉表空间、数据项[/url]



步骤 5:将 Planned Revenue, Revenue 嵌套拖入 2005,2006 数据项下,完成后如图 5 所示。



[url=]图 5. 嵌套指标[/url]



步骤 6:再将 Camping Equipment 拖入 Retail Type(Department, Equipment Rental, Warehouse Store) 的上方,并将 (Eyewear, Golf, Outdoors, Sports Store; Direct Marketing) 向左嵌套,使 Camping Equipment 位于他们的上方。同样的方法拖入一个交叉表空间,使其位于 Mountaineering Equipment 的下方,再将 Telephone, Web, Fax, Mail, Other 拖入该交叉表空间的下方,并分别拖入 Quantity, Revenue 使其位于 Telephone, Web, Fax 的下方,完成后如图 6 所示。



[url=]图 6. 多层嵌套报表数据项[/url]



步骤 7:按照报表需求编辑交叉表空间的文字,具体做法是:右键单击交叉表空间,选择编辑文本,键入相应的表头文字即可。然后再分别在相应的位置拖入一个交叉表空间,目的是为报表中的空白列准备,完成后如图 7 所示。



[url=]图 7. 编辑列名,构造空白列[/url]



步骤 8:根据报表需求在左边属性窗格中设置 row, column 的背景色为白色,并将行名,列名设置成用户希望的字体并调整好相应的位置,如本例中 Bold 8pt Tahoma,居中,再设置各单元格的边框,列的宽度以及指标的数据格式。

步骤 9:设置交叉表角。由于报表需求中交叉表角有两行文字,因此需要重新编辑交叉表角。具体做法是:单击工具栏中的锁按钮:

使其变成解锁状态

从左边可插入对象窗格中拖入两行一列的表到交叉表角,再插入文本到 table cell 中编辑交叉表角的文字,并设置相应格式,完成后如图 8 所示。



[url=]图 8. 设置交叉表角[/url]



步骤 10:点击工具栏中的运行按钮,运行报表,最终就得到图 1 所示的报表了。

本节通过实例阐述了在交叉表中构造复杂表头的详细步骤。在实际的报表开发中,结合不同的报表需求,从上往下逐步进行分析,灵活运用交叉表空间进行单元格嵌套,从而实现较复杂的数据展示,最终完成用户期望的报表样式。

创建 List 复杂表头

在大量数据的展示中,List 也是最常用的数据展示方式之一,如图 9 所示。



[url=]图 9. List 复杂表头示例[/url]



对于这样的需求,List 表头已不再是简单的列标题了,而是融合了单元格的嵌套、合并等。本节将结合 Cognos Sample 说明在 list 中实现此类报表的过程。

步骤 1:打开 report studio,选择 GO Data Warehouse (analysis),新建一张 List 报表;

步骤 2:从左边可插入对象窗格中选择 Sales 名字空间中中报表用到的数据项拖入 List 中,完成后如图 10 所示。



[url=]图 10. 创建 List 报表[/url]



步骤 3:从菜单栏依次选择 Structure, 选择 Headers&Footers, 选择 List headers&Footers, 添加 Overall header,List 自动插入一行 header,也就是报表上新增加的 Overall 行,完成后如图 11 所示。



[url=]图 11. 添加页眉[/url]



步骤 4:选中 Overall 行,从菜单栏依次选择 Structure,选择 Headers&Footers,选择在单元格下方插入行 , 行数中填入 3,这时在 List Column Body 上方多了 3 行,完成后如图 12 所示。



[url=]图 12. 新增行[/url]



步骤 5:编辑表头。依次将报表头的列名拖入或编辑在相应的新插入的单元格,对于需要合并的单元格可留空,完成后如图 13 所示。



[url=]图 13. 编辑列名[/url]



步骤 6:合并单元格。选择 Country- Mountaineering Equipment 之间的五个空白单元格,然后单击工具栏中的 Merge Cells,使其成为一个单元格,同样的方法对其他的空白单元格进行合并,完成后如图 14 所示。



[url=]图 14. 合并单元格[/url]



步骤 7:调整报表头单元格的边框、文本字体以及位置,然后设置 List 的 Column Titles 为 Hide( 默认是 At start of list),再设置 Overall 的 Box Type 为 None,从而隐藏原 List 的列表头以及 Header 行。

步骤 8:设置在 Region 列上分组。单击 Region 列,选择工具栏中的分组按钮,数据就会根据 Region 列进行分组。完成后运行报表就得到图 9 所示的报表格式了。

横向合并 Crosstab

合理地建模是报表开发的重要一步。对于大多数的报表需求,可以将报表所需的数据项全部囊括在一个 Query 中,从而在 List 或者 Crosstab 中展示。但在实际应用中,考虑到具体需求的复杂性,数据粒度不同,主题不同,跨多个不同数据源等,有时很难用一个 Crosstab 实现。同时考虑到报表运行的效率,最好对在一张表中展示的内容进行拆分,通过两个或以上的 Crosstab 分别处理,最后拼接在一起满足用户的需求。根据行头或者列头固定,我们可以采用横向合并或纵向合并的方式实现这类需求。

对于有固定行头的报表,可以通过将两个或多个 Crosstab 合并的方式实现。为便于说明,本节将利用 Cognos Sample 创建两个 Crosstab 阐述其横向合并的过程 ( 例子仅供说明步骤使用,不具备实际意义 )。

步骤 1:新建一张空白报表,从左边可插入对象窗格中拖入两个 Crosstab,然后拖入报表中用到的数据项。

步骤 2:再从左边窗格中拖入一个 1 行 2 列的 table,并将 Crosstab 分别置于一个 table Cell 中,完成后如图 15 所示。



[url=]图 15. 添加 crosstab 到横向 table cell 中[/url]



步骤 3:设置两个 table Cell 的边框 ( 左边单元格右边框为空,右边单元格左边框为空 ),水平位置,垂直位置和页边距,如下图 16 所示。



[url=]图 16. table cell 属性设置[/url]



步骤 4:设置行、列上的数据项属性“空白”为不换行,如图 17 所示,防止有新的数据时因宽度不满足而自动换行,设置行的高度为固定值,这样保持行的高度都一致。



[url=]图 17. 空白及大小属性设置[/url]



步骤 5:为保持报表更加整齐美观,可以将列的宽度也设定为固定值。设置 Crosstab 的表格属性为固定大小。

步骤 6:设置第二个 Crosstab 的行头以及交叉表角的 Box Type 的属性为 None,从而隐藏第二个交叉表的行头,实现两个 crosstab 共用行头的目的;并设置指标的数据格式为用户希望的数据格式。

步骤 7:拖入交叉表空间设置列头,调整边框,完成后运行报表。至此两个 crosstab 就完美地拼接成一个报表了。倘若再遇到这类需要分片处理的报表需求,我们也轻而易举得做到了。

纵向合并 Crosstab

横向合并可以解决某些场景下列上数据分片的报表展示问题,但并不能解决所有的问题,比如行上数据分片,这时就需要用到纵向合并的方法,才能满足用户需求。本节将结合 Cognos Sample 说明纵向合并 Crosstab 报表的思路和方法 ( 例子仅供说明步骤使用,不具备实际意义 )。

步骤 1:新建一张空白报表,从左边可插入对象窗格中拖入两个 Crosstab,然后拖入报表中用到的数据项。

步骤 2:再从左边窗格中拖入一个 2 行 1 列的 table,并将 Crosstab 分别至于一个 table Cell 中,完成后如图 18 所示。



[url=]图 18. 创建 crosstab 报表并添加到纵向 table cell 中[/url]



步骤 3:设置两个 table Cell 的边框 ( 上边单元格下边框为空,下边单元格上边框为空 ),水平位置,垂直位置以及页边距,如图 19 所示。



[url=]图 19. 调整 table cell 属性[/url]



步骤 4:设置 Crosstab 各列的宽度为固定值,并调整列名不换行,从而保持上下两个 crosstab 的各列能够对齐,完成后如图 20 所示。



[url=]图 20. 设置 crosstab 属性[/url]



步骤 5:拖入交叉表空间添加到各 Crosstab 行头,并编辑相应标题,设置第一个交叉表角为空单元格,调整第二个 crosstab 中数据项的上边框为空,并设置交叉表角以及列头的 Box Type 为 None,从而隐藏第二个交叉表的列头,完成后如图 21 所示。



[url=]图 21. 编辑 crosstab 行头[/url]



步骤 6:调整 report 的字体,位置,背景颜色,以及边框,完成后运行报表,从而两个 crosstab 就完美的纵向拼在一起了。总而言之,在实际开发过程中,要结合报表需求,合理选用报表类型,固定高宽,调整边框,实现行头 / 列头的共用。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论1 条评论

ypp130980ypp130980研发工程师北京华明永顺科技有限公司
2017-06-24 15:49
写的不错,学习了!
Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广