Power BI中如何提取值为'X'的单元格对应列名?
Power BI 逐行提取指定范围内值为'X'的对应列名实现方案
你可以根据自身使用场景选择以下两种方案,均可稳定实现需求:
方案1:Power Query 实现(数据清洗阶段使用,数据刷新后自动同步结果)
操作步骤:
- 将数据源导入Power Query编辑器,先选中需要保留的非判断列(比如A列的主键/名称类字段),再选中B到J列的判断范围
- 点击顶部菜单栏「添加列」>「自定义列」,在公式输入框填入以下M代码:
= Text.Combine(List.Select(Record.FieldNames(_), (k) => Record.Field(_,k) = "X"), "、")
- 如果你选中的列超出B-J范围,把公式里的
Record.FieldNames(_)替换为固定列名列表即可,格式为{"列B的真实名称","列C的真实名称","列D的真实名称","列E的真实名称","列F的真实名称","列G的真实名称","列H的真实名称","列I的真实名称","列J的真实名称"} - 确认后新列会自动生成每行所有值为X的列名拼接结果,修改自定义列的列名后即可上载到数据模型
方案2:DAX 计算列实现(模型层快速出结果,无需修改Power Query逻辑)
直接在Power BI Desktop的数据视图选中对应表,新建计算列,输入以下DAX代码:
匹配X列名 = CONCATENATEX( FILTER( { ("列B的真实名称", [列B的真实名称]), ("列C的真实名称", [列C的真实名称]), ("列D的真实名称", [列D的真实名称]), ("列E的真实名称", [列E的真实名称]), ("列F的真实名称", [列F的真实名称]), ("列G的真实名称", [列G的真实名称]), ("列H的真实名称", [列H的真实名称]), ("列I的真实名称", [列I的真实名称]), ("列J的真实名称", [列J的真实名称]) }, [Value2] = "X" ), [Value1], "、" )
- 把代码里所有列名占位符替换成你表中B到J列的实际名称即可,拼接用的分隔符「、」也可以根据需求换成逗号、分号等其他符号
补充说明:如果某行B-J列范围内没有值为X的单元格,两种方案默认返回空值;如果需要标记这类无匹配的行,可以在公式外层加空值判断,返回自定义提示文本即可。
内容的提问来源于stack exchange,提问作者Azhar Khan
相关产品推荐
相关产品推荐

