使用 DAX 的 SSAS RLS 实现
SSAS RLS implementation with DAX
我有一个 SSAS 表格多维数据集,其中包含一个名为 Projects 的 table,其中包含 Project_Managers、Special_Projects 等列以及其他列。
Special_Projects 是一个布尔值列,值为 1 或 0,表示项目是否标记为特殊项目。
我正在这个 SSAS 表格多维数据集中实施基本 RLS,我创建了一个角色 - 'PMs with access to Special projects'。现在,我正在尝试使用 DAX 来 select 仅来自项目 table 的那些行,其中 Special_Projects=1
我尝试了一些 DAX 公式,例如 CALCULATETABLE()
和 EVALUATE()
,但它们没有用。
项目 table 上的行级安全过滤器应该是:
=Projects[Special_Project]
这些过滤器应该 return 一个布尔值,并且表达式为真的行对用户可见。
以上假定该列是您所说的布尔类型。如果是 1 或 0 则尝试:
=Projects[Special_Project]=1
如果您需要检查另一个 table 并过滤当前 table 中的列,请尝试:
=IF(CONTAINS('vwUser',vwUser[Login],USERNAME()) ,Projects[Special_Project]=TRUE() ,Projects[Special_Project]=FALSE())
应该向 vwUser table 中的用户显示特殊项目,向不在 table 中的用户显示其他项目。
我有一个 SSAS 表格多维数据集,其中包含一个名为 Projects 的 table,其中包含 Project_Managers、Special_Projects 等列以及其他列。
Special_Projects 是一个布尔值列,值为 1 或 0,表示项目是否标记为特殊项目。
我正在这个 SSAS 表格多维数据集中实施基本 RLS,我创建了一个角色 - 'PMs with access to Special projects'。现在,我正在尝试使用 DAX 来 select 仅来自项目 table 的那些行,其中 Special_Projects=1
我尝试了一些 DAX 公式,例如 CALCULATETABLE()
和 EVALUATE()
,但它们没有用。
项目 table 上的行级安全过滤器应该是:
=Projects[Special_Project]
这些过滤器应该 return 一个布尔值,并且表达式为真的行对用户可见。
以上假定该列是您所说的布尔类型。如果是 1 或 0 则尝试:
=Projects[Special_Project]=1
如果您需要检查另一个 table 并过滤当前 table 中的列,请尝试:
=IF(CONTAINS('vwUser',vwUser[Login],USERNAME()) ,Projects[Special_Project]=TRUE() ,Projects[Special_Project]=FALSE())
应该向 vwUser table 中的用户显示特殊项目,向不在 table 中的用户显示其他项目。