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的主要内容,如果未能解决你的问题,请参考以下文章