Ssas MDX查询,根据员工的登录ID获取员工ID

Ssas MDX查询,根据员工的登录ID获取员工ID,ssas,mdx,Ssas,Mdx,我试图在一个多维数据集上实现动态安全性,在这个多维数据集上,雇主应该能够看到与他手下的所有员工相关的措施 我首先使用USERNAME()获取登录用户的登录凭据,然后获取该用户的后代 但是,我遇到了一个问题,因为employee维度中的子体是在empID属性上定义的,而USERNAME()提供了login ID属性 我无法对登录ID属性使用子体函数 i、 e {子代(STRTOMEMBER(“[Employee].[Emp ID].&[3]”,SELF\u BEFORE\u AFTER)}有效,但

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

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

但是,我遇到了一个问题,因为employee维度中的子体是在
empID
属性上定义的,而
USERNAME()
提供了login ID属性

我无法对登录ID属性使用子体函数

i、 e

{子代(STRTOMEMBER(“[Employee].[Emp ID].&[3]”,SELF\u BEFORE\u AFTER)}
有效,但

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

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


有什么想法吗?

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

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

这是对这一概念更好的解释之一:


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

有多种解决方案可以实现这一点。解决方案之一是将
LoginID
设置为
[Employee].[Emp ID]
属性的名称列,然后使用以下查询

SELECT  
    {} ON 0,

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

FROM [Your Cube Name]

是的,我正在使用角色,我只是想先在ssms中创建一个查询,然后将其放入允许的角色集中。顺便说一句,我通过使用名称栏实现了我想要实现的目标,就像Akshay提到的那样。我将Login ID设置为name列,而不是使用&operator used。我的查询中的运算符。它起作用了。谢谢