献给所有cognos新手 关于 : 基于维度(cube)建立的报表的过滤条件参数 解决OP-ERR-0217 问题

来源:互联网 发布:云计算的生活实例 编辑:程序博客网 时间:2024/04/27 18:52

献给所有cognos新手 关于 : 基于维度(cube)建立的报表的过滤条件参数 解决OP-ERR-021 问题

 

若您已经建立好过滤条件,只要求解决error,请略过第一部分.

第一部分 :建立维度的过滤条件

首先使用Report Studio 打开要加过滤条件的报表.

 

1点击查询资源管理器,要加过滤条件的查询.

 

 

2 展开要加过滤条件的维度,这里选择的是区划key

 

 

3

将这树状拖入到右边的数据项中,插入层级选择所有层级.

 

 

 

 

4

将数据项拖到明细过滤器中,写表达式定义

 

 

添加参数过滤,验证一下即可.

 

第二部分与前台交互(url方式)

 

若要和前台交互,需以下几个步骤

说明:

访问的url包括以下url最基本的地址,加上特定的参数.

http://<server-name>/cognos8/cgi-bin/cognos.cgi?b_action=xts.run&m=portal/launch.xts

若要查看report运行的html需要加以下参数:

1ui.tool=CognosViewer

ui.tool 打开文件的方式,可选CognosViewer/AnalysisStudio

2 ui.object= /content/package[@name='pk_ds_yjzs__6']/report[@name='yjzs_rs_2']

ui.object 对象的搜索路径 (可以在cognos门户->IBM Cognos内容->报表所在文件夹->报表属性->查看搜索路径 ID URL 中找到)具体步骤如下:

点击cognos内容

 

 

找到报表所在文件夹

 

点击报表操作中的第一个图标查看属性

 

 

 

点击搜索路径 id URL

 

 

 

 

 

 

复制搜索路径

 

 

 

 

 

3 ui.action=run

Ui.action 对文件的操作方式 run 运行报表,还有其他属性这里不再继续赘述 .

4 p_qh=[ds_yjzs__6].[区划key].[区划key].[区划key1]->:[PC].[@MEMBER].[330100]

P_qh 指的是传入的参数,与上面表达式中定义的区划相对应,(*千万记得传入的参数需要以p_开头)可以是一个也可以是多个.记得用&分开.

 

因为是基于维度的过滤条件,所以普通的传值,例如P_qh=330100 cognos不会识别,会报错,意外类型的参数值:

 

 OP-ERR-0217

 

 

它只能识别维度内的member,所以,要加的参数应该是这种格式的:

[ds_yjzs__6].[区划key].[区划key].[区划key1]->:[PC].[@MEMBER].[330100]

它是怎么来的呢? 打开查询,选择加过滤条件的维度数状结构

 

在这里成员中的每一项都是可以加到过滤条件中的,查看的方法,右键点击 [区划key],属性,成员唯一名称复制下来

 

 

 

也可以选择 [区划key]下级的其他成员,例如衢州,

 

5 run.prompt=false

Run.prompt 是否显示提示页面,默认为true显示,这里选为false不显示 .

 

 

完整url实例:(*参数名称区分大小写切记)

 

http://192.168.1.103/cognos10/cgi-bin/cognos.cgi?b_action=xts.run&m=portal/launch.xts&ui.tool=CognosViewer&ui.object=

/content/package[@name='pk_ds_yjzs__6']/report[@name='yjzs_rs_2']&ui.action=run&p_rylx=[ds_yjzs__6].[区划key].[区划key].[区划key1]->:[PC].[@MEMBER].[330100]&run.prompt=false

 

 

 

这里运行报表有一个常见的问题,就是乱码的问题,如果url中有中文字符串,需要进行转码.(记得只对参数值转码即可,千万别把整个url都进行转码了,转换的编码使用utf-8即可)

Java中使用java.net.URLEncode.encode()转码即可,其他的还没有试过,有别的事例希望大家share一下.

 

 

除了url也可以使用表单实现

 

 

 

 

:

当过滤条件可能为多值的时候

 

 

 

 

只需要在url中多传参数即可

&p_qh=[ds_yjzs__6].[区划key].[区划key].[区划key1]->:[PC].[@MEMBER].[330100]

&p_qh=[ds_yjzs__6].[区划key].[区划key].[区划key1]->:[PC].[@MEMBER].[330300]

 

 

上面这个问题困扰了我很长时间,在网上提问,搜索也找不到答案,最后贝克汉姆的一个回答帖子给我了启示.

现在将解决办法记录下来,希望这个问题不要再困扰更多像我一样的新手们.

 

 

 

原创粉丝点击