Cognos workspace中filter的研究

浏览: 2240

如何使用Workspace

workspace是一个非常实用的组件,能够快速地进行报表浏览,添加控制组件,并且可以将多张报表作为组件共同加以操作,结果非常直观。使用workspace仅仅需要打开Cognos Workspace,并选择“新建”


可以看到产品在右下角还同时提供了一些视频教程,方便快速上手这个组件


新建一张新的workspace会看到有三块工作空间:

  1. 针对全局的控件,具体来说就是在这个区域里面放置的过滤器、按钮、提示值等等都将作用在2所有的“选项卡”中
  2. 主要工作目录,按照“选项卡”来区分,可以想象成为一个excel的worksheet,在每一个“选项卡”中可以保存自己的过滤器、按钮、提示值
  3. 内容与工具,比如浏览报表位置,或者可插入组件等等


由于都是托拉拽的操作,我在这里也就不再多说。只是想强调一点,在2中可以放置多张报表,并且使用“全局”控件(1中)或“局部”控件(2中)来同时控制这些报表。当加入新的控件时也会看到询问到底要将该控件作用于哪个报表中,默认是只要合适就会全选。

关于filter的一些思考

好了,刚刚的简单铺垫,现在开始进入正题,在这里将会利用Filter组件来详细说明到底workspace是怎样存在内容库中,由于这个地方基本上没见过别人研究过,所以在这篇文章中需要引入一个工具——cmtools。

首先,我们建立一个最简单的报表,将其插入一个新的workspace中,然后针对其中一列建立一个过滤器


可以看到当拖入并且应用过滤器的时候,会在报表组件上增加已有的过滤选项。但是,需要注意的一点是这个过滤器是写在资料库中的,并且在拖入过滤器的同时就已经写死,也就是说这个过滤器在资料库使用一个绝对路径进行存储。我们继续来看这个例子:

我们可以通过报表组件的“属性”来查看这张报表的位置,在这个例子中 Public Folders > workspace_move_test > original > original_report,请略微记一下这个位置,后面还会用到。


但是这张workspace使用的过滤器就没法知道到底来自哪里,在过滤器的属性中依旧没有提及


这里我们需要借助工具cmtools来查看,这个工具是查看保存在资料库中object的一个小应用,在Cognos BI 10.2.*直接就随机安装了,路径:cognos_location/bin/utilities/cm/CMTools/CMTools.exe。打开后会连接到dispatcher,然后直接阅读资料库中的内容。


可以看到按照树一样的“content tree”,按照刚才我们存放的地点可以找到这一张workspace在内容库中的保存情况,请看在“选项卡1"中保存了刚刚那个Tab中的两个组件。这里我们要关注的是第二个(按照创建时间)。在左侧“属性”中点击最右“Toggle”切换到详细模式,在这里能看到一个context,这里就是整个filter保存的上下文。将PropertyXML保存出来,在这里我们能找到针对每一个filter的值的表述,例如引用位置。


例如我用这个workspace举例,发现过滤器的值“Golf Equipment”来自于/content/folder[@name='workspace_move_test']/folder[@name='original']/package[@name='GO Data Warehouse (query)']/model[@name='model']。到这里我们才可以看到这个值真正的完整路径。

下来我们来做一个大胆的测试。我将Public Folders > workspace_move_test > original文件夹全部拷贝(包括一个workspace,一个report,以及一个report依赖的package)


将original当作一个整体拷贝到新的目录,例如Public Folders > target文件夹,这时我们打开workspace,功能上一点也没有受影响。但是请读者按照上文的方式:

  1. 检查report widget(应该是target/origianl_report)的引用包
  2. 查看filter的引用位置

如果使用cmtools做了这个实验的话就会看到一个非常有趣的现象,1中的引用已经是target下的包资源了,但是2种依旧在引用之前的包(也就是刚刚workspace_wove_test下的位置)。

这一点告诉我们:当workspace创建之后组件上的属性信息会统统写入资料库,而且与其原始路径已经没有关联了。于是我们碰见了一个费解的workspace:其中的报表widget引用的是当前目录的包,但filter却引用了之前的目录包。这点需要读者心中有数。

当然如果需要“同步”报表与过滤器也不是没有办法,请右键该过滤器,属性中看到一个可选项“ 值更改时自动更新过滤器”,如果选择了这个选项,workspace将会在每次更新之后(例如刚刚做得拷贝就是使得报表的值从一个位置到另一个位置)都会检查并且更细这个过滤器的值。


请大家勾选该选项,并且保存重新打开这张workspace,重新用cmtools查看,看看现在的context上下文是否改变成了当前目录了呢?


欢迎互相学习

推荐 2
本文由 左右 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册