Report Studio之使用宏函数二、使用CSVIdentityMap宏函数向报表添加数据级安全

浏览: 2532

假定有一张按地区和国家显示雇员名字的报表。我们需要在这张报表应用数据安全,使用户仅能看到自己所在国家的数据。假定我们已经在Cognos服务器上定义和了合适的组,组内已经添加了合适的用户。

此例,我把自己的账户添加到一个名为China的组内。

准备工作…

使用GO Data Warehouse (Query)数据包创建一张列表。

如何实施…

1. 展开HR(query)->Employee Summary (query)->Employee by region拖拽Branch region, Country, 和 Employee name到列表上作为列表的列。

Clipboard Image.png

2. 转至列表对应的查询,从Toolbox窗体中拖拽一个Filter控件到Detail Filters工作区。

3. 定义此filter为:

[Country] in (#CSVIdentityNameList(',')#)

Clipboard Image.png

4. 运行并测试报表。可以验证,用户只可以看到自己所属的国家的数据。

 

工作原理…

 

此例我们使用了名为CSVIdentityNameList的宏函数。此函数返回运行报表用户的用户名以及所属的所有组和角色。因此,当我运行报表时,过滤[Country] in (#CSVIdentityNameList(',')#)返回了我所属的组,也就是China对应的数据。此宏函数接受使用一个字符作为返回值的分隔符。此处,我使用(,)作为返回值的分隔符。

如果用户属于多个组,他将看到每个组对应数据的并集。

 

更多…

 

这个方法有其局限性:所有的用户名不能和国家同名。假定有一个用户Spain,属于组China。显然运行报表时,报表会同时返回China和Spain的数据。因此,如果想使用这个方法进行权限控制,那么必须首先应用一个用户命名规范,确保不会有上述问题发生。


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

0 个评论

要回复文章请先登录注册