BI数据级权限解决方案
很久没有在博客堂上发文了,先表示歉意。希望这次的文章能够带给你价值。
关键词:BI、数据权限、Sharepoint、ajax
BI数据分析是目前企业的热门应用,而对企业来说,权限控制是非常重要的,尤其是作为决策用的企业报表。目前基于微软SQL Server体系的BI架构为Integration Services + Analysis Service + Reporting Services,Integration Services和Analysis都属于应用后台的服务,不会在用户前端展现,其权限控制体系不在我们这篇文章的讨论范围内(但是实现数据级权限控制,需要Analysis Services的参与)。而对于前端展示用的企业报表,权限控制体系分为2种:报表级权限和数据级权限。报表级权限较为简单,主要用于控制谁能够看这个报表;数据级权限则比较复杂了,任何人看同一张报表,报表上的数据只能是他有权限查看的数据。简单说,就是总经理看到的数据和经理看到的数据是不一样的,虽然他们在看同一张报表。比较报表级权限和数据级权限,会发现如果实现了数据级权限的控制,那么企业报表是否需要进行权限控制已经不再重要(当然,为了界面友好性,还是应该控制下的)。
这篇文章主要就是讲述基于SQL Server架构的BI数据级权限的解决方案,这也是我给一个德国大型跨国企业客户实施其BI项目中,对方非常重视的一个功能。这里先简单介绍下这个客户和项目,出于保密要求,我把该客户叫做Customer S(简称CS,呵呵,不是那个游戏哦)。
CS项目前端采用Sharepoint,后台采用SQL Server,主要分析客户S的销售数据。CS的组织结构分为部门、区域;部门和区域是相互交叉的;某个部门的总部人员能够看到全国所有区域的数据;而区域员工则只能看到该区域的数据了。用户能够查看的数据权限,需要在网页上可以进行配置。这就是客户对数据级权限的要求。
针对这些需求,数据级权限解决方案采用如下架构:

报表查看流程说明:
- 用户查看报表
- 报表从Cube中获取数据
- Cube从数据库中(记录用户的数据权限配置)获得访问用户的权限配置,根据配置返回相应的数据
- 报表显示结果数据
- 用户访问数据权限配置页面(由于基于Sharepoint,因此是内嵌数据权限Webpart的Sharepoint页面)
- 页面获取Cube结构(由于Cube的结构内容很庞大,为了避免网页响应慢,一般通过ajax树状来展示其结构)
- 用户修改数据权限设置,并且保存到数据库中
- Cube中如何进行权限控制
- 设置数据权限时,如何读取Cube结构

- 程序集:这是一个DLL类库,通过Visual Studio中新建一个Class Library(类库)来实现。主要作用是返回用户能够访问的Cube数据。
- 角色:这是访问用户的角色。在这里面可以设置角色的用户,更重要的是设置Cube调用哪个程序集来获取用户能够访问的数据。

- 所有的设置界面都是Sharepoint Webpart(请参见相关内容)
- Webpart中的ajax(这个要单独拿出来说,是因为这个部分比较麻烦),需要用到ajax的原因就是Cube的结构是很大的,如果一次性读出来,肯定是等到花儿也谢了,相信没有人会用他。
- 后台可以控制哪些维度需要设置数据权限(有些维度不需要设置数据权限,那么就不让他在ajax树中展示出来了)
- 有自定义的角色,这个角色不同于刚才讲的Cube中的角色。这是用户自己定义的数据权限角色,刚才的角色只需要那一个就足够了。
- 有了角色自然有搜索、设置用户、设置角色的数据权限、编辑、删除
- Cube:CubeDef cube = adomdConnection.Cubes[“MyCubeName”];
- Dimension:cube.Dimensions,这里面是所有的Dimension。
- Hierarchy:dimension.Hierarchies,所有的层次
- Member:hierarchy.Levels[0].GetMembers(),所有成员
posted on 2008-08-17 18:39:07 by jasper 评论(3) 阅读(4037)