MDX查询根据其登录ID获取员工ID

时间:2015-04-25 00:08:23

标签: ssas mdx username

我正在尝试在多维数据集上实现动态安全性,雇主应该能够看到与他下面所有员工相关的措施。

我这样做是首先使用USERNAME()获取登录用户的登录凭据,然后获取该用户的后代。

但是,我遇到了问题,因为员工维度中的后代是在empID属性上定义的,而USERNAME()则是登录ID属性。

我无法在登录ID属性上使用后代功能。

{DESCENDANTS(STRTOMEMBER("[Employee].[Emp ID].&[3]"), , SELF_BEFORE_AFTER)}有效,但

 {DESCENDANTS(STRTOMEMBER("[Employee].[LoginID].&[abc]"), , SELF_BEFORE_AFTER)}

不起作用。

那么,如何根据登录ID获取empID属性?

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

是的,我正在使用角色,我只是尝试在ssms中首先编写一个查询,然后将其置于允许的角色集中。顺便说一句,我设法通过使用名称列来实现我想要的,就像Akshay提到的那样。我将登录ID设置为名称列,而不是使用&运算符使用。我的查询中的运算符。有用。感谢。

答案 1 :(得分:0)

这应该通过动态角色完成,而不是在查询中完成。

使用角色将锁定用户,当查看empID时,他们只会看到映射到其登录名的数字。

这是对此概念的更好解释之一:http://richardlees.blogspot.se/2010/10/ssas-dynamic-security.html?m=1

在多维数据集角色中修复此问题的另一个原因是,如果您只是通过查询执行此操作,则数据不安全。任何人都可以通过excel连接到多维数据集并浏览所有员工数据。

答案 2 :(得分:0)

实现这一目标有多种解决方案。其中一个解决方案是将LoginID设置为[Employee].[Emp ID]属性的NameColumn,然后使用以下查询。

SELECT  
    {} ON 0,

    DESCENDANTS(
                FILTER
                (                    
                    [Employee].[Emp ID].MEMBERS,                     
                    [Employee].[Emp ID].CURRENTMEMBER.NAME = USERNAME()
                )                   
                ,                   
                ,SELF_BEFORE_AFTER                  
                )              
           ON 1

FROM [Your Cube Name]