【高手区第三期报表作品】带权限控制的ReportStudio报表
正在加载中...
资料简介:
带权限控制的ReportStudio报表
/**************************
**预告:
**【高手区第四期】带权限控制的External方式的Analysis Studio应用
**http://www.cognoschina.net/club/thread-7491-1-1.html
**已经新鲜出炉,欢迎阅读投票,谢谢!
**以下是本主题正文
***************************/
CognosZhang @ www.cognoschina.net
一、 行业背景
银行业。
二、 应用方向
以统一的用户管理为基础,提供全行集中的报表服务。
三、 ETL工具
自己开发的ETL工具,配合手工脚本。
四、 数据库
Sybase ASE 15 & Sybase IQ 15。
五、 需求分析
1、 使用当前存在的用户信息,包含用户名、密码、授权机构等,进行统一的权限验证。
2、 集中对全机构提供报表服务。
3、 不同的机构具有不同的数据权限,具体需求按照业务人员的具体要求。
4、 某一张报表的表样以及要求如下:
(1).机构层级共分为6级(0到5级)。
(2).机构报表视图如图1所示。
(3).若为0-3级机构,视图如图1,即仅显示2-4级机构。
(4).若为4-5级机构,仅显示4-5级机构。
(5).数据权限限定到本级以及本级以下机构。
(6).0级机构是总机构,1级是境内,2是省机构,3是市机构,4是县机构,5是网点机构。
5、 由于Cognos集成到已有系统中,因此,需要进行对用户透明的登陆,且提供时间等参数信息进行报表的检索。
图1:样表【Excel】
六、 设计思路
1、 单点登录通过IBM SDK提供的单点登录的改造程序来实现。具体思路为采用已经维护好的用户名、密码等,并以用户所在机构名为组。(本文仅用到此登录系统提供或者需要检验的三个字段,其他细节请参阅相关文章)。单点登录是权限控制的基础。
2、 机构具有开始时间和结束时间,因此,在机构维度上具有时间属性,且具有历史信息。不同时间点的机构视图将不再相同,因为,机构具有时间属性,于是需要对每一层机构进行筛选,形式如下:
图2:筛选历史机构(对每一层机构都需要筛选)【ReportStudio】
3、 由于2的原因,事实表与维表建立雪花模型。(是否可以引入动态的机构视图?例如,时间点作为参数,产生当前机构视图来简化模型,毕竟星型模型具有较好的性能,因为减少了连接操作)需要说明的是,按照需求,为了加速汇总,在同一fact table中增加了两级机构的汇总数据,即4级机构数据是直接取得,而不是汇总数据。(类似于Transformer的External,但是只在此维度的此level增加了汇总数据)
图3:前0-4级机构雪花模型(我对此模型在海量数据时的效率存在一定的担忧,但是要用历史机构,不得已)【FrameworkManager】
图4:后4-5级机构雪花模型【FrameworkManager】
4、 为了防止具有Cognos技能的用户透过Report Studio模型,越权访问数据,Framework Manager中对数据权限进行了过滤,即Report Studio的报表开发者和使用者也仅能看到自己机构以及以下机构的数据。
图5:对数据源数据进行过滤,以便每个登入的用户看见自己机构以及以下机构的数据,具体做法是在雪花维的不同层级上进行过滤【FrameworkManager】
5、 为了支持4中的操作,$account.defaultName获得当前用户的用户名,并通过查询查到该用户的所属机构和机构层级,并映射为Parameters Maps,随后进行使用,即#sq($levelmaps{$account.defaultName})#和#sq($orgmaps{$account.defaultName})#
图6:Parameter Map的定义示意【FrameworkManager】
6、 2中提到的?date?参数是需要传入ReportStudio报表的时间参数,例如“20100131”,并对事实表进行筛选。
图7:按照时间过滤事实表【ReportStudio】
7、 由于不同机构,按照级别不同,报表视图不一致,因此,通过两个页面,分别建立报表模型:
图8:不同机构对应不同的报表【ReportStudio】
8、 由于7中所述,因此需要让不同机构跳转到自己应该看到的报表页面,于是定义了每个页面的生成变量:
图9:每个页面的条件生成变量【ReportStudio】
对县级以上机构登入应该看到页面的生成,其变量定义如下:
图10:判断登入用户的授权机构层级是否比4小,即县以上机构【ReportStudio】
县级以下机构的变量定义类似,并与页面的生产变量相关联。
9、 报表的制作。
图11:县级以上机构的报表定义【ReportStudio】
图12:县级以下机构的报表定义【ReportStudio】
10、 与系统的集成采用URL方式(www.cognoschina.net上有许多讲URL拼接的帖子),为确保安全性,验证信息不使用明码的用户名和密码,而是CRNCONNECT(参见SDK)生成的passport,日期参数(即要看哪天的报表)明码传递,FrameworkManager负责数据权限的筛选。
使用passport的url:
http://localhost:80/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e8%a7%86%e5%9b%be%27%5d%2freportView%5b%40name%3d%27%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e7%bb%bc%e5%90%88%e6%9c%8d%e5%8a%a1%e5%b9%b3%e5%8f%b0%e5%8e%bf%e5%9f%9f%e8%b4%a2%e6%94%bf%e4%b8%9a%e5%8a%a1%e4%bb%a3%e7%90%86%e6%94%b6%e5%85%a5%e7%bb%9f%e8%ae%a1%e8%a1%a8%ef%bc%88%e6%9c%88%ef%bc%89%20%e7%9a%84%e6%8a%a5%e8%a1%a8%e8%a7%86%e5%9b%be%27%5d&ui.name=%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e7%bb%bc%e5%90%88%e6%9c%8d%e5%8a%a1%e5%b9%b3%e5%8f%b0%e5%8e%bf%e5%9f%9f%e8%b4%a2%e6%94%bf%e4%b8%9a%e5%8a%a1%e4%bb%a3%e7%90%86%e6%94%b6%e5%85%a5%e7%bb%9f%e8%ae%a1%e8%a1%a8%ef%bc%88%e6%9c%88%ef%bc%89%20%e7%9a%84%e6%8a%a5%e8%a1%a8%e8%a7%86%e5%9b%be&run.outputFormat=&run.prompt=false&p_a=2&p_date=20100131&m_passportID=101:019469e6-ff22-9e9f-4b72-761eafcf1666:2215973931
其中p_date参数传递?date?使用的日期,m_passportID拼接的是CRNConnect获得的passport。
七、 报表访问流程
1、 用户登录Portal(Cognos的宿主),Portal在对用户透明的情况下登录Cognos,并获得passport。
2、 用户选择某张报表,Portal经过拼接url,调用Cognos服务进行展示。
3、 Cognos会根据Framework Manager的定义来筛选机构数据,并按照url提供的级别参数来选择展示那张报表,并根据日期参数来筛选事实表数据。
4、 用户获得其报表视图。
八、 结束语
很高兴有机会与CognosChina的众位高手交流,若有不当和疏漏之处,敬请赐教,以便在今后的工作和学习中,共同进步与提高!
/**************************
**预告:
**【高手区第四期】带权限控制的External方式的Analysis Studio应用
**http://www.cognoschina.net/club/thread-7491-1-1.html
**已经新鲜出炉,欢迎阅读投票,谢谢!
**以下是本主题正文
***************************/
CognosZhang @ www.cognoschina.net
一、 行业背景
银行业。
二、 应用方向
以统一的用户管理为基础,提供全行集中的报表服务。
三、 ETL工具
自己开发的ETL工具,配合手工脚本。
四、 数据库
Sybase ASE 15 & Sybase IQ 15。
五、 需求分析
1、 使用当前存在的用户信息,包含用户名、密码、授权机构等,进行统一的权限验证。
2、 集中对全机构提供报表服务。
3、 不同的机构具有不同的数据权限,具体需求按照业务人员的具体要求。
4、 某一张报表的表样以及要求如下:
(1).机构层级共分为6级(0到5级)。
(2).机构报表视图如图1所示。
(3).若为0-3级机构,视图如图1,即仅显示2-4级机构。
(4).若为4-5级机构,仅显示4-5级机构。
(5).数据权限限定到本级以及本级以下机构。
(6).0级机构是总机构,1级是境内,2是省机构,3是市机构,4是县机构,5是网点机构。
5、 由于Cognos集成到已有系统中,因此,需要进行对用户透明的登陆,且提供时间等参数信息进行报表的检索。
图1:样表【Excel】
六、 设计思路
1、 单点登录通过IBM SDK提供的单点登录的改造程序来实现。具体思路为采用已经维护好的用户名、密码等,并以用户所在机构名为组。(本文仅用到此登录系统提供或者需要检验的三个字段,其他细节请参阅相关文章)。单点登录是权限控制的基础。
2、 机构具有开始时间和结束时间,因此,在机构维度上具有时间属性,且具有历史信息。不同时间点的机构视图将不再相同,因为,机构具有时间属性,于是需要对每一层机构进行筛选,形式如下:
图2:筛选历史机构(对每一层机构都需要筛选)【ReportStudio】
3、 由于2的原因,事实表与维表建立雪花模型。(是否可以引入动态的机构视图?例如,时间点作为参数,产生当前机构视图来简化模型,毕竟星型模型具有较好的性能,因为减少了连接操作)需要说明的是,按照需求,为了加速汇总,在同一fact table中增加了两级机构的汇总数据,即4级机构数据是直接取得,而不是汇总数据。(类似于Transformer的External,但是只在此维度的此level增加了汇总数据)
图3:前0-4级机构雪花模型(我对此模型在海量数据时的效率存在一定的担忧,但是要用历史机构,不得已)【FrameworkManager】
图4:后4-5级机构雪花模型【FrameworkManager】
4、 为了防止具有Cognos技能的用户透过Report Studio模型,越权访问数据,Framework Manager中对数据权限进行了过滤,即Report Studio的报表开发者和使用者也仅能看到自己机构以及以下机构的数据。
图5:对数据源数据进行过滤,以便每个登入的用户看见自己机构以及以下机构的数据,具体做法是在雪花维的不同层级上进行过滤【FrameworkManager】
5、 为了支持4中的操作,$account.defaultName获得当前用户的用户名,并通过查询查到该用户的所属机构和机构层级,并映射为Parameters Maps,随后进行使用,即#sq($levelmaps{$account.defaultName})#和#sq($orgmaps{$account.defaultName})#
图6:Parameter Map的定义示意【FrameworkManager】
6、 2中提到的?date?参数是需要传入ReportStudio报表的时间参数,例如“20100131”,并对事实表进行筛选。
图7:按照时间过滤事实表【ReportStudio】
7、 由于不同机构,按照级别不同,报表视图不一致,因此,通过两个页面,分别建立报表模型:
图8:不同机构对应不同的报表【ReportStudio】
8、 由于7中所述,因此需要让不同机构跳转到自己应该看到的报表页面,于是定义了每个页面的生成变量:
图9:每个页面的条件生成变量【ReportStudio】
对县级以上机构登入应该看到页面的生成,其变量定义如下:
图10:判断登入用户的授权机构层级是否比4小,即县以上机构【ReportStudio】
县级以下机构的变量定义类似,并与页面的生产变量相关联。
9、 报表的制作。
图11:县级以上机构的报表定义【ReportStudio】
图12:县级以下机构的报表定义【ReportStudio】
10、 与系统的集成采用URL方式(www.cognoschina.net上有许多讲URL拼接的帖子),为确保安全性,验证信息不使用明码的用户名和密码,而是CRNCONNECT(参见SDK)生成的passport,日期参数(即要看哪天的报表)明码传递,FrameworkManager负责数据权限的筛选。
使用passport的url:
http://localhost:80/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e8%a7%86%e5%9b%be%27%5d%2freportView%5b%40name%3d%27%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e7%bb%bc%e5%90%88%e6%9c%8d%e5%8a%a1%e5%b9%b3%e5%8f%b0%e5%8e%bf%e5%9f%9f%e8%b4%a2%e6%94%bf%e4%b8%9a%e5%8a%a1%e4%bb%a3%e7%90%86%e6%94%b6%e5%85%a5%e7%bb%9f%e8%ae%a1%e8%a1%a8%ef%bc%88%e6%9c%88%ef%bc%89%20%e7%9a%84%e6%8a%a5%e8%a1%a8%e8%a7%86%e5%9b%be%27%5d&ui.name=%e4%bb%a3%e7%90%86%e8%b4%a2%e6%94%bf%e7%bb%bc%e5%90%88%e6%9c%8d%e5%8a%a1%e5%b9%b3%e5%8f%b0%e5%8e%bf%e5%9f%9f%e8%b4%a2%e6%94%bf%e4%b8%9a%e5%8a%a1%e4%bb%a3%e7%90%86%e6%94%b6%e5%85%a5%e7%bb%9f%e8%ae%a1%e8%a1%a8%ef%bc%88%e6%9c%88%ef%bc%89%20%e7%9a%84%e6%8a%a5%e8%a1%a8%e8%a7%86%e5%9b%be&run.outputFormat=&run.prompt=false&p_a=2&p_date=20100131&m_passportID=101:019469e6-ff22-9e9f-4b72-761eafcf1666:2215973931
其中p_date参数传递?date?使用的日期,m_passportID拼接的是CRNConnect获得的passport。
七、 报表访问流程
1、 用户登录Portal(Cognos的宿主),Portal在对用户透明的情况下登录Cognos,并获得passport。
2、 用户选择某张报表,Portal经过拼接url,调用Cognos服务进行展示。
3、 Cognos会根据Framework Manager的定义来筛选机构数据,并按照url提供的级别参数来选择展示那张报表,并根据日期参数来筛选事实表数据。
4、 用户获得其报表视图。
八、 结束语
很高兴有机会与CognosChina的众位高手交流,若有不当和疏漏之处,敬请赐教,以便在今后的工作和学习中,共同进步与提高!
2010-06-11
页数7
浏览32141
下载411