Power BI中按用户补全非空公司名的方法咨询
解决方案:Power BI中按用户填充空值Company字段
方法一:Power Query(Transform Data)预处理(推荐)
你尝试的Transform Data本身就是非常合适的方案——属于数据清洗环节,能在数据加载阶段完成处理,对后续计算性能更友好,具体步骤如下:
- 进入Transform Data界面,选中目标数据表
- 点击「转换」选项卡 → 「分组依据」,配置参数:
- 分组依据:选择
User列 - 新列名:输入
NonEmptyCompany(自定义名称即可) - 操作:选择「自定义」,输入公式:
List.First(List.RemoveNulls([Company]))这个公式会提取当前用户所有行中第一个非空的Company值,确保同一用户的非空值能被统一提取
- 分组依据:选择
- 点击确定后,生成仅包含
User和NonEmptyCompany的分组表 - 返回原数据表,点击「合并查询」→ 「合并查询作为新查询」,选择原表和分组表,匹配列选
User,合并类型选「左外部」 - 展开合并后的列,仅保留
NonEmptyCompany字段 - 添加自定义列,输入公式:
if [Company] = null then [NonEmptyCompany] else [Company] - 将这个自定义列重命名为
Company(或保留原列,用新列替代),最后移除多余辅助列,关闭并应用即可
方法二:DAX计算列(临时需求备选)
如果不想修改原始数据结构,也可以用DAX创建计算列实现:
Filled Company = IF( ISBLANK('Table'[Company]), CALCULATE( MAX('Table'[Company]), ALLEXCEPT('Table', 'Table'[User]) ), 'Table'[Company] )
- 原理:
ALLEXCEPT保留当前行的User上下文,筛选出该用户的所有行,用MAX提取非空的Company值(若同一用户的非空值一致,MAX/MIN/FIRSTNONBLANK效果相同) - 注意:如果同一用户存在多个不同的非空Company值,这个方法会取最大值,需先确认数据逻辑合理性,避免歧义
关键注意事项
- 若同一用户的非空Company值存在冲突(比如同一用户有两个不同的Company),需先排查数据正确性,否则填充结果会不符合预期
- Power Query方法适合批量数据清洗,刷新数据时自动同步;DAX计算列适合临时展示或不想改动原始数据的场景
内容的提问来源于stack exchange,提问作者Andy Jensen
相关产品推荐
相关产品推荐

