Power BI Embedded RLS中拆分username()并实现数值比对的DAX方法
DAX实现逗号分隔字符串拆分并转数值比对
当前USERNAME()的返回值为'1,2,3',需求是拆分该字符串,将每个值转换为数值后进行比对。以下是具体的DAX实现方案:
核心思路
DAX中没有直接的字符串拆分函数,可借助PATH系列函数处理逗号分隔的字符串:先将逗号替换为PATH函数识别的竖线分隔符,再逐个提取项目并转换为数值,最后完成比对。
实现示例
1. 检查数值是否在拆分后的列表中(计算列/度量值)
IsInUsernameList = VAR UsernameStr = USERNAME() VAR PathFormattedStr = SUBSTITUTE(UsernameStr, ",", "|") VAR ItemTotal = PATHLENGTH(PathFormattedStr) VAR NumericList = GENERATE( GENERATESERIES(1, ItemTotal), VAR CurrentNum = PATHITEM(PathFormattedStr, [Value], INTEGER) RETURN ROW("TargetNumber", CurrentNum) ) RETURN COUNTROWS(FILTER(NumericList, [TargetNumber] = '你的表名'[需要比对的数值列])) > 0
2. 直接生成拆分后的数值列表
SplitUsernameToNumbers = VAR UsernameStr = USERNAME() VAR PathFormattedStr = SUBSTITUTE(UsernameStr, ",", "|") RETURN SELECTCOLUMNS( GENERATESERIES(1, PATHLENGTH(PathFormattedStr)), "Number", PATHITEM(PathFormattedStr, [Value], INTEGER) )
代码说明
SUBSTITUTE(UsernameStr, ",", "|"):将原始逗号分隔的字符串转换为PATH函数兼容的格式PATHLENGTH(PathFormattedStr):获取拆分后的项目总数PATHITEM(..., INTEGER):提取指定位置的项目并直接转换为整数类型- 通过
GENERATESERIES配合循环提取所有项目,最终生成数值列表用于比对
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

