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

Power BI中用M代码创建返回特定值最早日期的新列

在Power Query中为每个AccountID添加最早ApprovalDate列

针对你的大表场景,推荐用分组后合并的方法,性能更优,避免超时问题,具体实现如下:

方法一:分组聚合+合并(适合大表,性能友好)

先按AccountID分组计算每个ID的最早审批日期,再将结果合并回原表,这种方式仅需扫描表两次,远优于逐行扫描的方法:

let
    源 = 你的原表, // 替换成实际的数据源引用
    // 按AccountID分组,聚合取最小的ApprovalDate
    分组计算最早日期 = Table.Group(源, {"AccountID"}, {{"最早审批日期", each List.Min([ApprovalDate]), type date}}),
    // 将分组结果与原表左连接,匹配AccountID
    合并原表与分组结果 = Table.NestedJoin(源, {"AccountID"}, 分组计算最早日期, {"AccountID"}, "临时分组数据", JoinKind.LeftOuter),
    // 提取最早审批日期列并清理临时列
    提取目标列 = Table.ExpandTableColumn(合并原表与分组结果, "临时分组数据", {"最早审批日期"}, {"最早审批日期"}),
    // 可选:调整新列的位置(这里插入到原表第3列,可按需修改)
    调整列顺序 = Table.ReorderColumns(提取目标列, List.InsertRange(Table.ColumnNames(源), 2, {"最早审批日期"}))
in
    调整列顺序

方法二:添加自定义列(适合小表,写法简洁)

如果数据量不大,也可以直接在自定义列中筛选当前AccountID的所有行并取最小日期,但大表不推荐(逐行扫描会导致超时):

let
    源 = 你的原表,
    添加最早日期列 = Table.AddColumn(源, "最早审批日期", (当前行) => 
        List.Min(Table.SelectRows(源, (行) => 行[AccountID] = 当前行[AccountID])[ApprovalDate]), 
        type date)
in
    添加最早日期列

关于你之前尝试的问题说明

  • List.Generate主要用于生成自定义序列,用来处理分组取最小值属于误用,写法不当会导致不必要的循环,进而引发超时。
  • 单独用List.First无法按AccountID分组筛选,必须结合分组逻辑才能得到每个ID的最早日期,直接使用自然会出现语法或结果错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:57:12