【高级报表制作技巧】Cognos 目录树报表开发技巧整理(下)

正在加载中...

试读已结束

继续阅读请 1 金币购买后下载

立即下载

资料简介:

【报表图形使用及特殊效果的实现】第六讲

——Cognos 目录树报表开发技巧整理(下)


本文结合作者的多年来的复杂报表制作经验,图文结合,为您分步骤详细解读Cognos 目录树报表开发的实现步骤。使得读者可以根据本文全面学习目录树报表的实现方法及高级技巧,并快速上手进行实际制作。相信本文对大家会有所帮助——作者,秦昕旭。



【书接上文】


2.报表开发技巧整理


2.1树形列表


【要点】

首先通过对数据项进行分组实现将各层次的数据项放在同一列中,子层被嵌套在父层中,然后对各层都设置一个标记以区别于其它层的数据,这里通过在数据项前面的缩进距离作为标记,然后利用在页面中嵌入脚本代码控件数据的展开显示和隐藏,其实当报表刚打开时,报表的所有数据包括父级与子级的数据都显示出来,只不过是通过代码将其隐藏而已,当用户单击展开目录按钮时代码通过一个循环语句显示出某一级别的数据,而其中一个终止循环的条件就是判定某一行的前面缩进的距离,而缩进目录的原理也是类似。(具体制作过程可参考上一节内容)



2.2树形交叉表


【要点】

由于在交叉表中不能像LIST表中一样实现分组,所以要通过利用层次各级数据项建立一种数据联接关系,目的是将父级与子级目录的内容通过嵌套显示出来,效果其实与分组一样,所以可以在数据模型定义的时候对数据的格式进行特殊处理,例如不同层次的数据前面可以插入不同长度的空格,以识别其它层次,那么这样在代码处理方面就可以类似在列表中一样操作。其实当报表刚打开时,报表的所有数据包括父级与子级的数据显示出来,只不过是通过代码将其隐藏而已,另外,在各子级目录的开始可通过设置不同空格的长度而让代码识别内容所在的级别。当用户单击展开目录按钮时代码通过一个循环语句显示出某一级别的数据,而其中一个终止循环的条件就是判定某一行的前面缩进的距离,而缩进目录的原理也是类似。(具体制作过程可参考上一节内容)



2.3科目层次选择


特点:科目层次选择
功能:选择科目层次,然后下面自动出现该科目的所有成员列表框供选择



图片1.jpg


分摊表,科目按层次显示
1、下拉框选择显示的层次,保存在参数 p_level 中(使用静态成员,如1、2、3……)
2、在“条件资源管理器”中定义条件变量,读取的是参数 p_level
3、对于多个科目层次,使用多个列表框,每个列表框设置其生成变量(Render Variable),对应条件变量中的具体值(即选择该值则生成该列表框)
4、层次选择下拉框要自动提交;列表框要cascade到 p_level
5、Query中使用科目时,需要通过case来控制显示的层,如:
        CASE ?科目层次?
        WHEN '1' THEN caption([erpfdb].[CCB_COGNOS_FTACCT_DV1].[CCB_COGNOS_FTACCT_DV].[ACCT1_DESC])
        WHEN '2' THEN caption([erpfdb].[CCB_COGNOS_FTACCT_DV1].[CCB_COGNOS_FTACCT_DV].[ACCT2_DESC])
        WHEN '3' THEN caption([erpfdb].[CCB_COGNOS_FTACCT_DV1].[CCB_COGNOS_FTACCT_DV].[ACCT3_DESC])
        END
6、而Query中的条件,则需要给每个供选择的层次的科目都添加条件,条件使用“可选(optional)”即可



2.4多列树状折叠


特点:多列折叠
示例报表:分摊表3

要点:
第一列只在所在行有效,所以从如图中所示,“行政条线”跟“产品合计”在同一行上,所以“行政条线”对象的表示方法为“rows(i).cells(0)”,即属于第0个cell,而“产品合计”则属于第1个cell(“rows(i).cells(1)”);

下来一行,“行政条线”列就不起效了,所以“默认2”就属于第1列了,表示为“rows(i+1).cells(0)”。

在js脚本上使用的技巧是将“行政条线”列退格5px,然后进行判断
if(trCurrent1.cells(0).style.paddingLeft=="5px"){                /*如果是“行政条线”列*/
  trCurrent1.cells(1).getElementsByTagName("IMG").item(0).src = "../pat/images/blank.gif";
}        /*取cells(1)对象*/
else{       
if((trCurrent1.cells(0).children(1).innerText.indexOf(" ")==0)        /*否则取cells(0)对象*/
……

其他跟上述折叠报表技巧类似


2.5全部展开、折叠功能


效果如下图:报表上添加了“全部展开”按钮,点击可以将所有折叠的项都展开;

1、修改原来的js代码:




对比该js脚本,与之前脚本不同的地方是添加了allWrap(el)函数,该函数即实现了“全部折叠”、“全部展开”的功能。


2、添加一个HTML ITEM,代码如下:




2.6在交叉表中实现类似列表中页眉的效果


1.效果如下图:


2.在报表中插入一个交叉表,如下图:


3.在“可插入对象”面板中选择“交叉表空间“控件,如下图:


4.将其拖到表的上方,效果如下图:



5.给刚插入的空行插入一个标题,先解锁,将“文本“控件拖入空行中,如下图:


6.当交叉表中的多列时,可以为每一列分别在其上或下面放若干个“交叉表空间“控件,然后可以根据实际格式修改,例如边框等。

7.如果报表中包含javascript代码,要注意涉及到引用表元素的下标问题,因为“交叉表空间“控件也作为一行或一列。


2.7如何通过一列控制另一列数据的展开与缩进


下面以业务报表1为例,通过“部门名称”控制“产品名称”,并且以部门对产品进行分组,为每一个部门中的产品作一个小计。


1.在“部门名称“字段前插入html代码,如下:
''

2.对部门和产品进行分组,并设置部门的页脚和列表的整体页脚,并通过一系格式列调整后,如上图所示。

3.将“产品名称”单元格、“小计”单元格和“小计”左边的单元格的“填充”属性设为左缩进5px。

4.并在页眉和列表下面添加HTML代码,如下图所示:


5.页眉处的javascript代码是关键,代码如下:




6.列表处的HTML代码如下:


7.运行效果如下图所示,当点击部门展开产品时候,将展开该部门的所有产品和小计,当点击部门缩进产品的时候,产品栏中只显示产品的小计:


8.要注意的问题:由于每张报表的结构和要求都不一定相同,所以在应用上面javascrip代码的时候可能要进行相应调整,在代码的开始几行提供了接口参数,可根据需求调整这些参数。

至此,本节内容已经为大家全部讲解完毕,谢谢。

本文档提供下载:

3.jpg

2013-12-26
页数16
浏览17037
下载290

已下载用户的评价8.02分

您还未下载该资料,不能发表评价;
查看我的 待评价资源
jjgwolfjjgwolf   商业智能工程师 , 北京联创智融有限公司2018-02-22
有用
学习了!!!!!!!!
shixwshixw   技术经理 , 北京数途科技有限公司2017-06-20
有用
不错学习了
xuruhongxuruhong   其它 , ccb2017-05-27
有用
学习了!!!!!!!!
li_jintaoli_jintao   交互工程师 , yf2017-05-25
有用
学习了!!!!!!!!
yizhenyizhen   研发工程师 , ntt2017-03-15
有用
学习了!!!!1
asbss1asbss1   软件开发工程师 , 平安银行2016-05-30
没用
谢谢楼主分享,辛苦了!!!
花花花花   商业智能工程师 , 某公司2016-04-14
没用
看一看。谢谢大神
土太土太   数据仓库工程师 , 顺天府2016-03-16
没用
顶顶顶 好东西 可惜币不多了
joannakingjoannaking   IT顾问 , NA2016-03-16
没用
[b]回复 [url=http://www.cognoschina.net/club/redirect.php?goto=findpost&pid=406289&ptid=63039]1#[/url] [i]qinxinxu[/i] [/b] thank you
kaylee0524kaylee0524   软件开发工程师 , 零售行业公司2016-03-03
没用
学习学习

贡献者

qinxinxu软件架构设计师,中软国际(昆明)
cognoser
X社区推广