...
- 如下图,用户test1打开多维分析,只能看到华北和华南成员。
- 如下图,用户test2打开同一张多维分析,可以看到华北、华南和华东成员。
下面以产品示例mondrian多维数据源的Cube【sales】下的商店维度为例,来演示如何实现不同用户登录根据映射机构获取不同成员数据。
实现步骤:
- 创建映射表。如下图,创建用户和机构的映射表,如test1用户可以访问的机构是华南、华北。在关联中需要书写这些成员对应的ID([商店].[地区].[华北],[商店].[地区].[华南])。
创建用户属性。在 公共设置>用户属性 下新建用户属性,实现根据当前用户获取映射表中的机构,如下图:
- 创建多维分析。根据需要创建多维分析,如下图此多维分析包含商店维度地区层次下的所有成员。
设置数据权限。在数据管理下选中需要设置数据权限的多维数据集,右键选择设置数据权限。会进入数据权限窗口,如下图。
在数据权限窗口,右键选择对应的机构维度,如本示例中选择商店维度,在右键菜单中选择 设置,会进入数据权限设置窗口。
在数据权限设置窗口选择数据权限设置方式为【高级设置】,如下图,根据需要设置根节点表达式和合法性表达式。根节点表达式
通过MDX语句设置用户可以访问的层次结构的最顶层成员,返回的是一个成员集。
合法性表达式
通过MDX语句来判断哪些成员可以访问,是对该层次结构所有成员的访问合法性校验
若想取到权限内的成员和子孙成员,需要在合法性表达式中书写MDX语法类似如下:代码块 Count( Intersect( { [商店].CurrentMember }, StripCalculatedMembers( Extract( { [商店].CurrentMember }, [商店] ) ) ) ) = 0 OR Count( Intersect( { Ancestor( [商店].CurrentMember, [商店].[中国].[华东].level ) }, { [商店].[中国].[华东] } ) ) > 0
- 浏览查看效果。分别使用test1用户和test2用户登录系统打开多维分析浏览效果。