cognos开发技巧总结文档.docx
- 文档编号:26069312
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:40
- 大小:1.19MB
cognos开发技巧总结文档.docx
《cognos开发技巧总结文档.docx》由会员分享,可在线阅读,更多相关《cognos开发技巧总结文档.docx(40页珍藏版)》请在冰豆网上搜索。
cognos开发技巧总结文档
Cognos开发技巧总结文档
1实现目录树展开功能
1.插入一个列表,拖入5个字段,并且对运营商所在地分组
4.解锁,将运营商所在地的汇总拖到运营商处
6.按住CTRL,分别拖动本周新增用户数、今年新增用户总数、期末用户总数到运营商所在地的页眉处
7.在reportpage中插入HTML控件,然后拷贝如下代码进去
下面代码主要是定义了两个函数,一个用于目录树的展开与缩进,另一个用于页面初始化时隐藏一些数据,下面代码只支持到2层目录,更详细的含义可参考的在交叉表中实现目录树功能的注释。
代码如下:
functionExpandCollapse(el)
{
vartr=el.parentElement.parentElement;
vartbl=tr.parentElement.parentElement;
varsDisplay=(el.src.indexOf("minus")==-1)?
"":
"none";
varsDisplayReverse=(el.src.indexOf("minus")==-1)?
"none":
"";
el.src="/cognos8/images/PropertyGroup_"+(el.src.indexOf("minus")==-1?
"minus":
"plus")+".gif";
for(vari=tr.rowIndex+1;i { vartrCurrent=tbl.rows(i); if(trCurrent.cells(0).firstChild&&trCurrent.cells(0).getElementsByTagName("IMG").length) { if(tr.cells(0).style.paddingLeft==""&&trCurrent.cells(0).style.paddingLeft=="20px") { if(el.src.indexOf("minus")==-1) { trCurrent.cells(0).getElementsByTagName("IMG").item(0).src="/cognos8/images/PropertyGroup_plus.gif"; } } else{ break; } } else{ trCurrent.style.display=sDisplay; } } } functionStartHidden(el) { vartbl=el.parentElement.parentElement.parentElement.parentElement; for(vari=0;i { vartrCurrent=tbl.rows(i); if(trCurrent.cells(0).style.paddingLeft.indexOf("px")>-1) { trCurrent.style.display="none"; } } } 8.拖入一个HTML项目插入到运营商单元格前面,修改成数据项,并修改表达式 运营商中HTML控件代码如下: ' hand;vertical-align: middle;margin-right: 2px''/> hand''>'+[orc82].[D_OPERATIONROLES].[运营商所在地]+'' 11.增加图片 增加树形的图片 ,空白图片到cognos相应的图片目录 12.增加列表页脚 (注意,这里的HTML控件一定要放入表页脚里面,否则不能实现隐藏数据的功能),并拷贝HTML代码,删除掉列表页脚几个字 代码如下: 13.选择列表,并设置列表每页行数为9999(这样就不用再翻页了) 14.这样一个树状报表就做好了,运行报表,查看结果 2cognos报表查询条件导出 以EXCEL2007,EXCEL2003,PDF格式导出报表时,一般输入的查询条件没有一起导出,希望将查询条件一起导出来。 在每个查询条件后面加入一个文本框 文本来源类型选报表表达式 表达式内容输入条件参数的名字 if(ReportOutput()<>'HTML')thenParamDisplayValue('截止时间') 3创建模板的方法 1.在COGNOS中新建一个报表文件,其实就是普通的报表文件,然后对需要用到的模板格式进行编辑 例如下图: 2.编辑完后,选中文件菜单中的转换成模板项将普通文件转换为模板文件,最后保存该模板即可 在COGNOS中新建一个报表文件,在弹出的新建对话框中如下图: 选择现有…项,然后选择刚才创建的模板 4类的应用 在COGNOS系统报表工具中,可以利用类对报表的格式进行统一调整,类似于CSS的功能。 1.下面举例,对下报表的列表进行格式化 如下图: 查看-类,新建一个类,并设置了背景颜色和前景颜色,用于格式化列表中的单元格,如下图: 3.创建了类之后,然后在列表中应用该类 如下图: “类”中选择刚才创建的类。 列表中相应的单元格格式即可改变,如下图: 5.创建了一个类之后,还可以多次引用,可以方便地使格式保持统一 5报表之间对象的互相引用 在一张报表中创建了一个控件后,可以在自身或其它报表中对它进行引用,引用方式有两种,一种是直接的关联引用,即被引用的控件的修改会影响到引用它的控件。 另一种是复制引用,不会产生关联,只是复制副本。 1.在一张报表中选中要被引用的的控件,然后在属性栏中在“名称”项中输入一个唯一的标识名。 2.在要引用它的报表,比如另一张报表中需要用到这个控件,在打开另一张表后,在控件面板中将布局组件引用控件拖到要插入的地方,在弹出对话框中选择“其它报表”项,然后选择刚才建立被引用控件的报表,这时可看到“可引用控件”栏中会显示刚才创建的控件,选中即可。 3.点击控件,可以属性栏中的“嵌入”选项中选择引用的类型,即前面介绍的两种类型。 6值提示的多项选择 创建一个值提示,选中值提示, 这两处选择如图: 过滤条件中使用in 7交叉表表头文字改变 点中要修改文字的节点成员,添加数据项标签 在文本来源那里选择数据项标签 8.解决"列或交叉表的group行号、group子行号" 1、先看如下效果(根据分组,显示group行号,和group的子项行号): 2、在列表里加入【产品系列】【产品名称】【销售目标】,按【产品系列分组】。 向列表加入计算字段groupnumber,表达式为: running-count(distinct[产品系列])-->组范围选择【产品系列】; 向列表加入计算字段sub_count,表达式为: running-count([产品名称]for[产品系列]) 设置如下 : 于是就得到了想要的结果。 //修正一下图中的表达式错误,应该为: running-count([产品类型]for[产品系列]) 按分组计算每一个分组的总记录数: 拖入一个数据项,表达式为count(sub_count),点开锁,拖入列表里的分组项同一列 如: 数据项行号表达式running-count([上网账号]for[运营商名称]) 数据项总数表达式count([行号]) 拖入列表,第二个运营商中拖入总数,选中将第二个运营商名称,可见那里选择否 日期提示默认前一天脚本 functionsubtractDay() { vardtToday=newDate(); vardtYesterday=newDate(dtToday-86400000); varstrYesterday=[dtYesterday.getUTCFullYear(),dtYesterday.getMonth()+1,dtYesterday.getDate()].join("-"); returnstrYesterday; } functioninit() { pickerControlEDate1.setValue(subtractDay()); promptButtonFinish(); } //promptButtonFinish(); //getFormWarpRequest().onload=promptButtonFinish(); //getFormWarpRequest().onload=init(); 开始日期和结束日期提示默认前一天脚本,要将开始日期name改为SDate1,结束日期name改为EDate1,在提示页面添加一个html,代码如下,也可以不加提示页面,直接拖入报表页面 functionsubtractDay() { vardtToday=newDate(); vardtYesterday=newDate(dtToday-86400000); varstrYesterday=[dtYesterday.getUTCFullYear(),dtYesterday.getMonth()+1,dtYesterday.getDate()].join("-"); returnstrYesterday; } functionshowMonthFirstDay() { vardtToday=newDate(); vardtYesterday=newDate(dtToday-86400000); varstrYesterday=[dtYesterday.getUTCFullYear(),dtYesterday.getMonth()+1,dtYesterday.getDate()].join("-"); returnstrYesterday; } functioninit() { pickerControlSDate1.setValue(showMonthFirstDay()); pickerControlEDate1.setValue(subtractDay()); promptButtonFinish(); } //promptButtonFinish(); //getFormWarpRequest().onload=promptButtonFinish(); //getFormWarpRequest().onload=init(); 默认打开报表右上角有可编辑报表的按钮 在查询前拖入一个html代码如下,再打开报表右上角就为空了,看报表的用户无法编辑了 wherecdate>=#prompt('起始时间')# andcdate<=#prompt('截止时间')# 方法一: 1,报表列表中这张报表的“设置属性”-----“报表”---“高级选项”----"HTML报表中每个Web页面的行数: 默认是20,改选值大点 2,打开报表设计页面,在属性栏里选“页面”,找到“常规”,修改“分页”的值,选中“重复每一页”,其它不选,确定,就可以了 选中列表所在表格, 方法二: 1、有时候还会出现分页显示,再设置一下。 设计界面选择“文件”-->“报表属性”-->“对于交互式HTML按数量容器分页”选择是“是”,修改默认值。 2、直到对当前列表、交叉表修改属性设置,数据属性: 每页行数调整为: 99999 方法二中的2点缺一不可,且配合方法一中的1,可以解决cognos10.1中的html页面分页问题。 再点中列表页眉所在行 选择在上方或下方插入行 根据需要进行拆分和合并单元格 将要创建的表头文字拖入相应位置 按住ctrl,选中表头单元格 在左边的类中 选择列表标题单元格,点箭头加到右边,确定 运行报表,查看效果: 这样表头修改成所要的格式 将原来的空的表头行选中,方框类型选择无 14.空值填充 15.Cognos合并列单元格 在使用cognos的过程中,我们难免要制作中国式报表,(是我自己的一个博客)这个上面很好的说明了关于中国式报表表头的制作,图文的,看起来很方便,但是cognos不提供列的合并,而文中最后也没有说明怎么合并列。 下面是我合并列的方法 合并之前: 选中一个单元格,比如上面那个单元格,然后找到它属性的边框属性 然后将样式设为无,并选中预览中的下面那个按钮: 注意两幅图片的差别,如此点击确定,然后选中横线下面那个单元格,按照上面的方法做,这次点击预览中的上横线按钮,这样就可以达到隐藏横线的效果了.... 效果如图: 这样就能够达到我们的目的了... 交叉表角单元格本来只有一格,要设置多列标题时 点中角单元格,方框类型选无 可插入对象里拖入两个交叉表空间 将列内空列处方框类型设为无 解锁 拖入两个文本项目到刚插入的交叉表空间中 选中将类设为交叉表角单元格 设置交叉表多行表头时也可以参照拖入多个交叉表空间,再拖入文本项目至其中进行设置。 17.求有复合表达式项的合计、小计 如下报表,合计定期比前2月主机数量, 对应数量的表达式为: ([本月主机数量]-[前2月主机数量])/[前2月主机数量] 第一层小计: (total([本月主机数量]for[分公司],[归属服务站])-total([前2月主机数量]for[分公司],[归属服务站]))/total([前2月主机数量]for[分公司],[归属服务站]) 第二层小计: (total([本月主机数量]for[分公司])-total([前2月主机数量]for[分公司]))/total([前2月主机数量]for[分公司]) 整表合计: (total([本月主机数量]forreport)-total([前2月主机数量]forreport))/total([前2月主机数量]forreport) 如针对某列值设置,小于0,则用红色字 点中要设置的列,条件样式,点高级条件样式,新建条件 表达式定义里填写要设置满足的条件,确定 后面的样式点笔处,将前景颜色设为红色 这样报表出来的结果就会是刚设的列为负数是,则为红色字 如上图表, 的值有主机、副机, 则主机、副机合计表达式分别为 total([QTYS]withinsetfilter([TERMINALSPECIFICATIONNAME],[TERMINALSPECIFICATIONNAME]='主机')) total([QTYS]withinsetfilter([TERMINALSPECIFICATIONNAME],[TERMINALSPECIFICATIONNAME]='副机')) 我把最后一行中的汇总放到第一行时,第一行的汇总显示不正确(显示的只是最第一条记录的值) 。 如何把列表的汇总从最后一行,放到第一行,且显示正确的汇总数据? 选中表头,创建页眉,选择结构-创建页眉,(不是列表页眉),再然后选择分割列表单元格, 然后选择新创建的页眉,解锁, 解锁后,把下面的汇总条,选中复制到新创建的页眉上,在把锁给锁上。 这是列表如果是交叉表直接拖上去就可以了 图的效果就是这样出来的啊,我问的是结果不一样啊,这个才是问题的关键。 (第二个图) 因为你创建的是‘列表页眉’,不对,这样出来页眉一行显示的是‘列表页眉’如你的一图。 应该是‘创建页眉’,出来页眉一行显示的是‘汇总’,出来的数值结果才是汇总后的数值。 andpanyidin(selectpanylevel1idfromcsportal.TB_COGNOS_PORTAL_ORG_RELtc join(SELECTe1.empee_id,e1.empee_acctfromcsportal.tb_pty_empeee1wheree1.empee_acct! ='admin' wheree.empee_acct=#sq($account.personalInfo.userName)#) 拖入一个文本项目,内容随便写点什么,点中文本项目 将文本项目文件来源改为 表达式里拖入所需的参数 拖入一个数据项为每项相加 添加过滤条件<>0,应用程序处选择自动聚合之后。 如何实现两个值提示框的联动变化 例如: 现在一个维度有两层 两层的值分别为 第一层第二层 Aa1,a2 Bb1,b2 现在拖两个值提示框 当第一个值提示框选择A时,第二个值提示框只出现a1和a2 当选择B时,第二个值提示框只出现b1和b2 选择第二个框的属性,将其属性中层叠来源点开,然后在弹出的框里选择第一个框的参数,然后将第一个框的属性设置为自动提交 前提是A和B必须是在同一张表里面有对应的关系 25.导出成excel和PDF 1、如图新建两个HTML标签 下载(18.51KB) 2009-11-2311: 37 2、分别写入代码 functiongetObjectName() { return"oCV"+document.getElementById("cv.id").value; } functionexpExcel() { varobjName=getObjectName(); eval(objName+".getRV().viewReport(\'XLWA\');"); } functiongetObjectName() { return"oCV"+document.getElementById("cv.id").value; } functionexpExcel() { varobjName=getObjectName(); eval(objName+".getRV().viewReport(\'spreadsheetML\');"); } functiongetObjectName() { return"oCV"+document.getElementById("cv.id").value; } functionexpPDF() { varobjName=getObjectName(); eval(objName+".getRV().viewReport(\'PDF\');"); } 3、这样就OK了,下面提供两个按钮图片 导出成excel2007 functiongetObjectName() { return"oCV"+document.getElementById("cv.id").value; } functionexpExcel() { varobjName=getObjectName(); eval(objName+".getRV().viewReport(\'spreadsheetML\');"); } 报表导出成excel打开的时候会提示“您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致”这是Excel的安全问题, 暂时解决办法如下,取消Excel的安全检测。 1、开始->运行->输入regedit->确定 2、找到注册表子项 HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security 3、在右侧空白处点击鼠标右键,选择“新建->DWORD值(D)”,输入"ExtensionHardening"点击确定。 4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写"0"即可确定。 5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了? 拓展: ExtensionHardening设置的值的数据设置: 0: 不检查文件扩展名和文件类型并绕过该函数的警告消息。 1: 检查文件扩展名和文件类型。 如果它们不匹配会显示警告消息。 2: 检查文件扩展名和文件类型。 如果它们不匹配不要打开该文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cognos 开发 技巧 总结 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)