cognos开发技巧总结文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cognos开发技巧总结文档
1实现目录树展开功能
在列表中实现目录树展开功能
1.插入一个列表,拖入5个字段,并且对运营商所在地分组
2.添加运营商所在地的页眉
3.拆分运营商所在地的单元格
4.解锁,将运营商所在地的汇总拖到运营商处
5.删除运营商所在地
6. 按住CTRL,分别拖动本周新增用户数、今年新增用户总数、期末用户总数到运营商所在地的页眉处
7. 在report page中插入HTML控件,然后拷贝如下代码进去
下面代码主要是定义了两个函数,一个用于目录树的展开与缩进,另一个用于页面初始化时隐藏一些数据,下面代码只支持到2层目录,更详细的含义可参考的在交叉表中实现目录树功能的注释。

代码如下:
<script>
function ExpandCollapse( el )
{
= "/cognos8
{
var trCurrent = ( i );
if(0).firstChild&& ( 0 ).getElementsByTagName( "IMG" ).length )
{
if ( (0). =="" && (0). =="20px" )
{
{
(0).getElementsByTagName("IMG").item(0).src = "/cognos8/images/";
}
}
else {
break;
}
}
else {
}
}
}
function StartHidden(el)
{
{
var trCurrent = (i);
{
}
}
}
</script>
8.拖入一个HTML项目插入到运营商单元格前面,修改成数据项,并修改表达式
运营商中HTML控件代码如下:
'<img onclick=''ExpandCollapse(this)'' src=''/cognos8/images/'' style=''cursor:hand; vertical-align:middle; margin-right:2px''/><span onclick=''ExpandCollapse'' style=''cursor:hand''>'+ [orc82].[D_OPERATIONROLES].[运营商所在地] + '</span>'
9.删除掉运营商所在地
10.设置运营商的填充为左侧20
11.增加图片
增加树形的图片,空白图片到cognos相应的图片目录
12. 增加列表页脚
(注意,这里的HTML控件一定要放入表页脚里面,否则不能实现隐藏数据的功能),并拷贝HTML代码,删除掉列表页脚几个字
代码如下:
<img onload='StartHidden(this)' src='/cognos8/images/'/>
13.选择列表,并设置列表每页行数为9999(这样就不用再翻页了)
14.这样一个树状报表就做好了,运行报表,查看结果
2cognos 报表查询条件导出
以EXCEL2007,EXCEL2003,PDF格式导出报表时,一般输入的查询条件没有一起导出,希望将查询条件一起导出来。

在每个查询条件后面加入一个文本框
文本来源类型选报表表达式
表达式内容输入条件参数的名字
if (ReportOutput() <> 'HTML') then ParamDisplayValue('截止时间')
3 创建模板的方法
1.在COGNOS中新建一个报表文件,其实就是普通的报表文件,然后对需要用到的模板格式进行编辑
例如下图:
2.编辑完后,选中文件菜单中的转换成模板项将普通文件转换为模板文件,最后保存该模板即可
3.应用这个模板
在COGNOS中新建一个报表文件,在弹出的新建对话框中如下图:
选择现有…项,然后选择刚才创建的模板
4 类的应用
在COGNOS系统报表工具中,可以利用类对报表的格式进行统一调整,类似于CSS的功能。

1.下面举例,对下报表的列表进行格式化
如下图:
2.打开类编辑界面
查看-类,新建一个类,并设置了背景颜色和前景颜色,用于格式化列表中的单元格,如下图:
3.创建了类之后,然后在列表中应用该类
如下图:
4.在属性“类”中选择刚才创建的类。

列表中相应的单元格格式即可改变,如下图:
5.创建了一个类之后,还可以多次引用,可以方便地使格式保持统一
5 报表之间对象的互相引用
在一张报表中创建了一个控件后,可以在自身或其它报表中对它进行引用,引用方式有两种,一种是直接的关联引用,即被引用的控件的修改会影响到引用它的控件。

另一种是复制引用,不会产生关联,只是复制副本。

1.在一张报表中选中要被引用的的控件,然后在属性栏中在“名称”项中输入一个唯一的标识名。

2.在要引用它的报表,比如另一张报表中需要用到这个控件,在打开另一张表后,在控件面板中将布局组件引用控件拖到要插入的地方,在弹出对话框中选择“其它报表”项,然后选择刚才建立被引用控件的报表,这时可看到“可引用控件”栏中会显示刚才创建的控件,选中即可。

3.点击控件,可以属性栏中的“嵌入”选项中选择引用的类型,即前面介绍的两种类型。

6 值提示的多项选择
创建一个值提示,选中值提示,这两处选择如图:过滤条件中使用in
7 交叉表表头文字改变
点中要修改文字的节点成员,添加数据项标签
在文本来源那里选择数据项标签
8.解决"列或交叉表的group行号、group子行号"
1、先看如下效果(根据分组,显示group行号,和group的子项行号):
2、在列表里加入【产品系列】【产品名称】【销售目标】,按【产品系列分组】。

向列表加入计算字段groupnumber,表达式为:running-count(distinct [产品系列])-->组范围选择【产品系列】;
向列表加入计算字段sub_count,表达式为:running-count([产品名称] for [产品系列])
设置如下

于是就得到了想要的结果。

期提示默认值设置
日期提示默认前一天脚本
<script language="javascript">
function subtractDay ()
{
var dtToday = new Date();
var strYesterday = [(), ()+1, ()].join("-");
return strYesterday;
}
function init ()
{
( subtractDay());
promptButtonFinish();
}
nload=promptButtonFinish();
nload=init();
</script>
<body onload=init()>
开始日期和结束日期提示默认前一天脚本,要将开始日期name改为SDate1,结束日期name 改为EDate1,在提示页面添加一个html,代码如下,也可以不加提示页面,直接拖入报表页面<script language="javascript">
function subtractDay ()
{
var dtToday = new Date();
var strYesterday = [(), ()+1, ()].join("-");
return strYesterday;
}
function showMonthFirstDay()
{
var dtToday = new Date();
var strYesterday = [(), ()+1, ()].join("-");
return strYesterday;
}
function init ()
{
( showMonthFirstDay());
( subtractDay());
promptButtonFinish();
}
nload=promptButtonFinish();
nload=init();
</script>
<body onload=init()>
10.让用户打开报表不能编辑
默认打开报表右上角有可编辑报表的按钮
在查询前拖入一个html代码如下,再打开报表右上角就为空了,看报表的用户无法编辑了<style> .mainHeader1{ display: none; } .mainViewerHeader3{ display: none; } </style>
11.将条件中的参数直接带入查询语句中
where cdate >=#prompt('起始时间')#
and cdate <=#prompt('截止时间')#
12.实现报表不分页
方法一:
1,报表列表中这张报表的“设置属性”-----“报表”---“高级选项”----"HTML 报表中每个Web 页面的行数: 默认是20,改选值大点
2,打开报表设计页面,在属性栏里选“页面”,找到“常规”,修改“分页”的值,选中“重复每一页”,其它不选,确定,就可以了
此方法一中1,在中测试可用,但在中不起作用
选中列表所在表格,
方法二:
1、有时候还会出现分页显示,再设置一下。

设计界面选择“文件”--> “报表属性”--> “对于交互式HTML按数量容器分页”选择是“是”,修改默认值。

2、直到对当前列表、交叉表修改属性设置,数据属性:每页行数调整为:99999
方法二中的2点缺一不可,且配合方法一中的1,可以解决中的html页面分页问题。

13.列表创建多行表头
再点中列表页眉所在行
选择在上方或下方插入行
根据需要进行拆分和合并单元格
将要创建的表头文字拖入相应位置
按住ctrl,选中表头单元格
在左边的类中
选择列表标题单元格,点箭头加到右边,确定
运行报表,查看效果:这样表头修改成所要的格式
将原来的空的表头行选中,方框类型选择无
14.空值填充
合并列单元格
在使用cognos的过程中,我们难免要制作中国式报表,(是我自己的一个博客)这个上面很好的说明了关于中国式报表表头的制作,图文的,看起来很方便,但是cognos不提供列的合并,而文中最后也没有说明怎么合并列。

下面是我合并列的方法
合并之前:
选中一个单元格,比如上面那个单元格,然后找到它属性的边框属性
然后将样式设为无,并选中预览中的下面那个按钮:
注意两幅图片的差别,如此点击确定,然后选中横线下面那个单元格,按照上面的方法做,这次点击预览中的上横线按钮,这样就可以达到隐藏横线的效果了....
效果如图:
这样就能够达到我们的目的了...
16.设置交叉表角单元格
交叉表角单元格本来只有一格,要设置多列标题时
点中角单元格,方框类型选无
可插入对象里拖入两个交叉表空间
将列内空列处方框类型设为无
解锁
拖入两个文本项目到刚插入的交叉表空间中
选中将类设为交叉表角单元格
设置交叉表多行表头时也可以参照拖入多个交叉表空间,再拖入文本项目至其中进行设置。

17.求有复合表达式项的合计、小计
如下报表,合计定期比前2月主机数量,
对应数量的表达式为:([本月主机数量]-[前2月主机数量])/[前2月主机数量]
第一层小计:
(total([本月主机数量] for [分公司],[归属服务站])-total([前2月主机数量] for [分公司],[归属服务站]))/total([前2月主机数量] for [分公司],[归属服务站])
第二层小计:
(total([本月主机数量] for [分公司])-total([前2月主机数量] for [分公司]))/total([前2月主机数量] for [分公司])
整表合计:
(total([本月主机数量] for report)-total([前2月主机数量] for report))/total([前2月主机数量] for report)
18.设置条件样式
如针对某列值设置,小于0,则用红色字
点中要设置的列,条件样式,点高级条件样式,新建条件
表达式定义里填写要设置满足的条件,确定
后面的样式点笔处,将前景颜色设为红色
这样报表出来的结果就会是刚设的列为负数是,则为红色字
19.自定义交叉表中某维度分别合计
如上图表,的值有主机、副机,
则主机、副机合计表达式分别为
total([QTYS] within set filter ([TERMINALSPECIFICATIONNAME],[TERMINALSPECIFICATIONNAME]='主机'))
total([QTYS] within set filter ([TERMINALSPECIFICATIONNAME],[TERMINALSPECIFICATIONNAME]='副机'))
20.把列表汇总从最后放到第一行
我把最后一行中的汇总放到第一行时,第一行的汇总显示不正确(显示的只是最第一条记录的值)。

如何把列表的汇总从最后一行,放到第一行,且显示正确的汇总数据
选中表头,创建页眉,选择结构-创建页眉,(不是列表页眉),再然后选择分割列表单元格,
然后选择新创建的页眉,解锁,
解锁后,把下面的汇总条,选中复制到新创建的页眉上,在把锁给锁上。

这是列表如果是交叉表直接拖上去就可以了
图的效果就是这样出来的啊,我问的是结果不一样啊,这个才是问题的关键。

(第二个图)因为你创建的是‘列表页眉’,不对,这样出来页眉一行显示的是‘列表页眉’如你的一图。

应该是‘创建页眉’,出来页眉一行显示的是‘汇总’,出来的数值结果才是汇总后的数值。

21.将登陆的用户名直接传到报表中
and in(select from tc
join eo on =
join (SELECT , from e1 where !='admin'
join co on =
where = )
22.在报表中再引用值提示内容
拖入一个文本项目,内容随便写点什么,点中文本项目
将文本项目文件来源改为
表达式里拖入所需的参数
23.过滤一行中所有值都为0的
拖入一个数据项为每项相加
添加过滤条件<>0,应用程序处选择自动聚合之后。

24.查询条件的联动变化
如何实现两个值提示框的联动变化
例如:
现在一个维度有两层
两层的值分别为
第一层第二层
A a1,a2
B b1,b2
现在拖两个值提示框
当第一个值提示框选择A时,第二个值提示框只出现a1和a2
当选择B时,第二个值提示框只出现b1和b2
选择第二个框的属性,将其属性中层叠来源点开,然后在弹出的框里选择第一个框的参数,然后将第一个框的属性设置为自动提交
前提是A和B必须是在同一张表里面有对应的关系
25.导出成excel和PDF
1、如图新建两个HTML标签
2、分别写入代码
<script language="javascript">
function getObjectName()
{
return "oCV" + document. getElementById("").value;
}
function expExcel()
{
var objName = getObjectName();
eval(objName + ".getRV().viewReport(\'XLWA\');");
}
</script>
<img src="/cognos8/samples/images/导出">
<script language="javascript">
function getObjectName()
{
return "oCV" + document. getElementById("").value;
}
function expExcel()
{
var objName = getObjectName();
eval(objName + ".getRV().viewReport(\'spreadsheetML\');");
}
</script>
<img src="/cognos8/images/导出" onclick="expExcel();"/>
<script language="javascript">
function getObjectName()
{
return "oCV" + document. getElementById("").value;
}
function expPDF()
{
var objName = getObjectName();
eval(objName + ".getRV().viewReport(\'PDF\');");
}
</script>
<img src="/cognos8/samples/images/导出">
3、这样就OK了,下面提供两个按钮图片
导出成excel2007
<script language="javascript">
function getObjectName()
{
return "oCV" + document. getElementById("").value;
}
function expExcel()
{
var objName = getObjectName();
eval(objName + ".getRV().viewReport(\'spreadsheetML\');");
}
</script>
<img src="/cognos8/images/导出" onclick="expExcel();"/>
26.导出的excel打开总有格式不一致提示
报表导出成excel打开的时候会提示“您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致”这是Excel的安全问题,
暂时解决办法如下,取消Excel的安全检测。

1、开始-> 运行-> 输入regedit -> 确定
2、找到注册表子项
HKEY_CURRENT_USER\Software\Microsoft\Office\\Excel\Security
3、在右侧空白处点击鼠标右键,选择“新建-> DWORD值(D)”,输入"ExtensionHardening"点击确定。

4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写"0"即可确定。

5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了
拓展:ExtensionHardening设置的值的数据设置:
0:不检查文件扩展名和文件类型并绕过该函数的警告消息。

1:检查文件扩展名和文件类型。

如果它们不匹配会显示警告消息。

2:检查文件扩展名和文件类型。

如果它们不匹配不要打开该文件。

相关文档
最新文档