示例说明

通过关系数据库用户和机构关联映射表,实现多维分析数据权限,即不同的用户登录打开同一张多维分析看到的数据不同。

  • 如下图,用户test1打开多维分析,只能看到华北和华南成员。
     
  • 如下图,用户test2打开同一张多维分析,可以看到华北、华南和华东成员。
     

下面以产品示例mondrian多维数据源的Cube【sales】下的商店维度为例,来演示如何实现不同用户登录根据映射机构获取不同成员数据。

实现步骤

  1. 创建映射表。如下图,创建用户和机构的映射表,如test1用户可以访问的机构是华南、华北。在关联中需要书写这些成员对应的ID([商店].[地区].[华北],[商店].[地区].[华南])。

    创建用户属性。在 公共设置 > 用户属性 下新建用户属性,实现根据当前用户获取映射表中的机构,如下图:
  2. 创建多维分析。根据需要创建多维分析,如下图此多维分析包含商店维度地区层次下的所有成员。
  3. 设置数据权限。在数据管理下选中需要设置数据权限的多维数据集,右键选择设置数据权限。会进入数据权限窗口,如下图。

    在数据权限窗口,右键选择对应的机构维度,如本示例中选择商店维度,在右键菜单中选择 设置,会进入数据权限设置窗口。
    在数据权限设置窗口选择数据权限设置方式为【高级设置】,如下图,根据需要设置根节点表达式和合法性表达式。

    根节点表达式

    通过MDX语句设置用户可以访问的层次结构的最顶层成员,返回的是一个成员集。

    合法性表达式

    通过MDX语句来判断哪些成员可以访问,是对该层次结构所有成员的访问合法性校验。


    若想取到权限内的成员和子孙成员,需要在合法性表达式中书写MDX语法类似如下:

    Count(
                Intersect(
                    {
                        [商店].CurrentMember
                    },
                    StripCalculatedMembers(
                        Extract(
                            {
                                [商店].CurrentMember
                            },
                            [商店]
                        )
                    )
                )
            ) = 0 
      OR
            Count(
                Intersect(
                    {
                        Ancestor(
                            [商店].CurrentMember,
                            [商店].[中国].[华东].level
                        )
                    },
                    {
                        [商店].[中国].[华东]
                    }
                )
            ) > 0


  4. 浏览查看效果。分别使用test1用户和test2用户登录系统打开多维分析浏览效果。