如何用单个CALCULATETABLE实现现有两个DAX权限查询逻辑?
合并为单个CALCULATETABLE的DAX实现
你可以通过将两类权限记录合并到一个表中,再分别校验匹配逻辑来实现需求。以下是两种可行的写法:
写法一:使用EXISTS函数
VAR upn = USERPRINCIPALNAME() VAR security_tbl = CALCULATETABLE( SELECTCOLUMNS( 'Access', "@Type", 'Access'[Type], "@Name", 'Access'[Name] ), 'Access'[E-mail] = upn && 'Access'[Type] IN {"Country", "State"} ) RETURN EXISTS(security_tbl, security_tbl[@Type] = "Country" && security_tbl[@Name] = 'Facts'[Country]) || EXISTS(security_tbl, security_tbl[@Type] = "State" && security_tbl[@Name] = 'Facts'[State])
写法二:使用COUNTROWS判断匹配
VAR upn = USERPRINCIPALNAME() VAR security_tbl = CALCULATETABLE( 'Access', 'Access'[E-mail] = upn && 'Access'[Type] IN {"Country", "State"} ) RETURN COUNTROWS(FILTER(security_tbl, 'Access'[Type] = "Country" && 'Access'[Name] = 'Facts'[Country])) > 0 || COUNTROWS(FILTER(security_tbl, 'Access'[Type] = "State" && 'Access'[Name] = 'Facts'[State])) > 0
逻辑说明
- 首先通过
CALCULATETABLE一次性筛选出当前用户(匹配USERPRINCIPALNAME())的所有Country和State类型权限记录,无需拆分两个独立表。 - 在返回逻辑中,分别校验当前
Facts行的Country是否存在于权限表的Country类型条目,或State是否存在于权限表的State类型条目,满足任一条件即返回true。
内容的提问来源于stack exchange,提问作者Raj Rao
相关产品推荐
相关产品推荐

