You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速为相同ID批量填充对应的Group值

解决方案:填充同ID的空Group值

以下是三种不同工具的实现方案,均满足你的需求:

DAX 计算列

如果之前用EARLIER没成功,试试结合CALCULATE和ALLEXCEPT的写法,能精准锁定当前行ID对应的非空Group值:

Filled Group = 
CALCULATE(
    MAX('你的表名'[group]),
    ALLEXCEPT('你的表名', '你的表名'[id])
)
  • 原理:ALLEXCEPT保留当前行的id上下文,排除其他筛选条件;MAX提取该ID下所有非空的Group值(假设每个ID对应唯一非空Group),直接填充到当前行的计算列中,不管原group列是否为空。

PowerQuery(无需自合并)

通过创建ID到非空Group的映射字典实现,全程避免自合并操作:

let
    Source = 你的数据源,
    // 生成仅包含非空Group的ID映射表
    IDGroupMap = Table.Distinct(Table.SelectRows(Source, each [group] <> null)),
    // 转换为可快速查找的字典结构
    GroupLookup = Record.FromList(IDGroupMap[group], IDGroupMap[id]),
    // 添加新列,根据ID自动填充Group值(原非空值保留)
    AddFilledGroup = Table.AddColumn(Source, "FilledGroup", each Record.FieldOrDefault(GroupLookup, [id], [group])),
    // 替换原Group列(可选,若不需要保留原列)
    ReplaceOriginal = Table.ReplaceValue(AddFilledGroup, each [group], each [FilledGroup], Replacer.ReplaceValue, {"group"}),
    // 移除临时列
    CleanUp = Table.RemoveColumns(ReplaceOriginal, {"FilledGroup"})
in
    CleanUp
  • 原理:先提取所有ID对应的有效Group值生成字典,再通过ID直接查找填充,无需合并表,效率更高。

SQL 语句

用窗口函数快速实现,语法简洁高效:

SELECT
    id,
    COALESCE(group, MAX(group) OVER (PARTITION BY id)) AS group
FROM 你的表名;
  • 原理:MAX(group) OVER (PARTITION BY id)为每个ID分组计算出非空Group值,COALESCE将原空值替换为该分组值,原非空值保持不变。
  • 若数据库不支持窗口函数,可改用子查询关联:
SELECT
    t1.id,
    COALESCE(t1.group, t2.group) AS group
FROM 你的表名 t1
INNER JOIN (
    SELECT id, group
    FROM 你的表名
    WHERE group IS NOT NULL
    GROUP BY id, group
) t2 ON t1.id = t2.id;

内容的提问来源于stack exchange,提问作者lifeofthenoobie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:05:13