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

Posted

技术标签:

【中文标题】MDX 查询以根据其登录 ID 获取员工 ID【英文标题】:MDX Query to get employee ID based on their login ID 【发布时间】:2015-04-25 00:08:23 【问题描述】:

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

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

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

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

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

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

不起作用。

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

有多种解决方案可以实现这一目标。一种解决方案是将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]

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于MDX 查询以根据其登录 ID 获取员工 ID的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询以递归方式获取经理下所有员工的姓名

Laravel - 如何根据员工和登录用户获取公司详细信息

jsp的问题!做用户登录时,怎样获取这个用户的ID ?然后根据用户ID 查询用户详情。

MDX 获取层次结构值

MDX——获取工具提示(或左侧)数据以显示在查询中

SQL 查询以获取每个经理下的员工的递归计数