最新消息:

Cognos制作报表常见问题

编程相关 观测者 6617浏览

1. 固定报表制作步骤

1.1. 建模

1).建立物理视图

存储过程传递参数的问题:
右键视图——Edit Definition,在弹出窗口中将Value设置为:#prompt('ORG_CODE')#


按此方法设置后,打开报表URL时将提示输入参数,参数名称即为ORG_CODE。

2)建立业务视图

3)模型包发布

1.2. 制作报表

Web设计登陆URL:

http://10.70.248.91/ibmcognos/cgi-bin/cognos.cgi?b_action=xts.run&m=portal/main.xts

名称空间:BFAuth
登录后启动Report Studio制作相关报表。

2. 固定报表的布局

布局控制使用“块”和“表格”,“块”用于分行,“表格”可以用于分列。

3. 插入图形

“图表”插入时可以选择相应的图形,图表可以直接转换类型,在图表上点击右键转换图表。

4. 隐藏图形右侧图标注解


5. 图形上显示数值


6. 添加下拉框,并绑定参数

1).在工具箱中选择该项,拖到报表相应位置。

2).在弹出的对话框中按如下设置:

3).绑定相应查询及使用值,设置排序方式。

4).设置自动提交。

7. JS实现Cognos报表隐藏工具栏、导出不同格式报表、打印

1).在page页面中加入4个HTLM 项目分别用来实现隐藏工具栏、打印、Excel2002导出、选择导出格式。如下:

2).修改4个HTML属性-》常规-》说明内容分别为:隐藏工具栏、打印、Excel2002导出、选择导出格式。

3).修改完毕。如下所示:

4).隐藏工具栏对应的JS代码:

<style> .mainHeader1{ display: none;}
.mainViewerHeader3{ display: none;}
</style>

5).打印Html对应的JS代码:(打印报表)

<input type="button" value="打印" style="padding-left:10px;padding-right:10px;font-size: 10px" class="toolbarButton"/>

6).Excel2002导出Html对应的JS代码:(Excel2002格式导出报表)

<input type="button" value="Excel2002导出" style="padding-left:0px;padding-right:0px;font-size:10px" onclick="javascript:gCognosViewer.getRV().viewReport('XLWA')" class="toolbarButton"/>

7).选择导出Html对应的JS代码:(下拉框导出不同格式报表)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">

<script language="javascript">
function Export_js(){
   var s;
   var se =document.getElementById("zbsjlx");
   var options=se.getElementsByTagName("option");

   for(var i=0;i<options.length;++i){
       if(options[i].selected){
           s = options[i].value;
       }
   }

   var str=s;

   if(str=='Excel2007'){
       eval(gCognosViewer.getRV().viewReport('spreadsheetML'));
   }
   else if(str=='Excel2003'){
       eval(gCognosViewer.getRV().viewReport('XLWA'));
   }
   else if(str=='Excel2002'){
       eval(gCognosViewer.getRV().viewReport('XLWA'));
   }
   else if(str=='Singlesheet'){
       eval(gCognosViewer.getRV().viewReport('singleXLS'));
   }
   else if(str=='Excel2000'){//Excel2000有可能不支持
       eval(gCognosViewer.getRV().viewReport('XLS'));
   }
   else if(str=='PDF'){
       eval(gCognosViewer.getRV().viewReport('PDF'));
   }
   else{
       alert('请选择导出格式!');
   }

}
</script>
</HEAD>
<BODY>
<table>
<TD nowrap class="Edit_content">
<select id="zbsjlx" name="zbsjlx">
   <option value="Excel2007">Excel2007</option>
   <option value="Excel2003">Excel2003</option>
   <option value="Excel2002">Excel2002</option>
   <option value="Singlesheet">Singlesheet</option>
   <option value="Excel2000">Excel2000</option>
   <option selected value="PDF">PDF</option>
</select>
</TD>

<TD></TD>
<TD></TD>
<TD>
<input type="button" value="导出" class="toolbarButton" onclick="javascript:Export_js()"/>
</TD>

</table>
</BODY>
</HTML>

8).界面实现效果:

9).补充说明:如果从页面上点击链接直接到报表的话,还可以给那一大串链接后面加上【&cv.header=false&cv.toolbar=false】这句话,可以隐藏掉报表最上面那个一指宽的边框。

8. 导出为PDF格式后因分页导致的内容重复问题

文件-PDF页面设置-纸张大小,选择A3。

9. URL调用Cognos报表的方法

1).复制出报表对应的URL

复制出来

http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27HR-BI%27%5d%2fpackage%5b%40name%3d%27HR-BI%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%27%5d%2freport%5b%40name%3d%27%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88%27%5d&ui.name=%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88&run.outputFormat=&run.prompt=true

这是报表原始的URL。

2).修改URL
将run.prompt=true改成false再加&p_MONTH=201501
即:

http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27HR-BI%27%5d%2fpackage%5b%40name%3d%27HR-BI%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%27%5d%2freport%5b%40name%3d%27%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88%27%5d&ui.name=%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88&run.outputFormat=&run.prompt=false&p_MONTH=201501

注意:参数名称前面要加上p_

10. JSP页面中设置Cognos报表自动登录

1).在Cognos中新建一张空白报表,添加HTML项目,在属性中将“源类型”设置为“报表表达式”。在表达式定义中写一条JS语句,跳转到系统的真实首页。

'<script language=javascript>window.location.href="'+ ParamDisplayValue('iplatip')+"DispatchAction.do?efFormEname=HF0101"+'"</script>'

2).查看空白报表的搜索路径,记下该路径,用它替换index.jsp页面中的/content/folder[@name='HR-BI']/package[@name='HR-BI管理报表']/report[@name='PageJumpHRBI']部分。

3).在项目中新建index.jsp页面,在index.jsp页面中设置Cognos报表的登录信息,实现自动登录到步骤1)所创建的空白报表。

4).登录系统时先跳转到index.jsp页面,然后自动登录到Cognos的空白报表,再跳转到系统的真实首页。
参考代码:
dispatchAddr.jsp

<%
String dispatchAddr = "http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi";
%>

index.jsp

<!DOCTYPE html>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="EF" uri="/WEB-INF/framework/tlds/EF.tld"%>
<%@ page
   import="com.baosight.iplat4j.ec.tm.utils.TemplateInitInfo,com.baosight.iplat4j.util.DateUtils,com.baosight.iplat4j.ec.tm.utils.TemplateInitInfo.*"%>
<%@page import="com.baosight.platform.core.security.user.IUserManager"%>
<%@page import="com.baosight.platform.core.security.user.User"%>
<%@page import="com.baosight.platform.core.security.base.SecurityFactory"%>
<%@ include file="/dispatchAddr.jsp"%>
<%
   request.getSession().setMaxInactiveInterval( 2*60*60 );
   if (TemplateInitInfo.getContextPath() == null) {
       TemplateInitInfo.setContextPath(request.getContextPath());//存上下文
       TemplateInitInfo.setIp(request.getServerName());//存ip
       TemplateInitInfo.setPort(request.getServerPort());//存port
   }
   //获取用户名、密码
   IUserManager um = SecurityFactory.getInstance().getUserManager();
   String username = (String) request.getSession().getAttribute("loginname");
   User user = um.getUser(username);
   String codepassword = user.getCodedPassword();
   
   //获取IP及端口号
   StringBuffer url = request.getRequestURL();
   String ip = url.delete(url.length() - request.getRequestURI().length(), url.length()).append("/").toString();
   int port=request.getLocalPort();
%>

<HTML>
<HEAD>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<body>
<iframe src="<%=dispatchAddr%>?b_action=xts.run&m=portal/logoff.xts&h_CAM_action=logoff" width='1px' height='1px' style='display:none'></iframe>
<form action="<%=dispatchAddr%>" method="POST"><!-- cognos登陆信息 -->
   <input type="hidden"id="h_CAM_action" name="h_CAM_action" value="logonAs">
   <input type="hidden" id="ui.action" name="ui.action" value="run">
   <input type="hidden" id="b_action" name="b_action" value="cognosViewer">
   <input type="hidden" id="ui.object" name="ui.object" value="/content/folder[@name='HR-BI']/package[@name='HR-BI管理报表']/report[@name='PageJumpHRBI']">
   <input type="hidden" id="ui.name" name="ui.name" value="PageJumpHRBI">
   <input type="hidden" id="run.prompt" name="run.prompt" value="false">
   <input type="hidden" id="CAMUsername" name="CAMUsername" value="<%=username%>">
   <input type="hidden" id="CAMPassword" name="CAMPassword" value="<%=codepassword%>">
   <input type="hidden" id="CAMNamespace" name="CAMNamespace" value="BFAuth">
   <input type="hidden" id="p_iplatip" name="p_iplatip" value="<%=ip%>">
   <input type="hidden" id="p_iplatport" name="p_iplatport" value="<%=port%>">
</form>
</body>

<script type="text/javascript">
   document.forms[0].submit();
</script>

</HTML>

11.常见报错1).RQP-DEF-0177 执行操作“sqlPrepareWithOptions”(状态为“-120”)时出错

错误明细:UDA-SQL-0458 PREPARE 失败,因为此查询要求在本地处理数据。尚未启用允许本地处理的选项。UDA-SQL-0580 数据库不支持调用语句作为派生表,并且该用法需要在本地处理数据。
解决方法:选择对应的查询,在“属性”中将“处理”设置为“仅限本地”。

转载请注明:观测者 » Cognos制作报表常见问题