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

如何在Power Query(M语言)中实现连续发票号的分组区间统计?

Power Query(M语言)解决连续发票号分组(间隙与孤岛问题)

针对你要处理的连续发票号按客户分组的需求,直接用M语言按以下步骤实现:

步骤说明

  1. 转换数据类型:确保发票号列是数值类型,避免排序出错
  2. 分组并排序:按客户编号分组,在每个客户组内对发票号升序排序
  3. 添加组内索引:给每个客户组内的行添加从0开始的索引列
  4. 计算分组标识:用发票号减去索引值,相同的结果代表属于同一连续发票段
  5. 最终分组聚合:按客户编号和分组标识分组,取每组的最小/最大发票号作为起始/结束号

完整M代码

假设你的源数据查询名为源,替换成你实际的查询名即可:

let
    // 1. 确保发票号为数值类型
    转换类型 = Table.TransformColumnTypes(源, {{"发票号", Int64.Type}}),
    // 2. 按客户编号分组,组内对发票号排序
    分组客户 = Table.Group(转换类型, {"客户编号"}, {{"组内数据", each Table.Sort(_, {{"发票号", Order.Ascending}})}}),
    // 3. 给每个组内的行添加索引(从0开始)
    添加组内索引 = Table.TransformColumns(分组客户, {{"组内数据", each Table.AddIndexColumn(_, "组内索引", 0, 1)}}),
    // 4. 展开组内数据,计算分组标识(发票号 - 组内索引)
    展开数据 = Table.ExpandTableColumn(添加组内索引, "组内数据", {"发票号", "组内索引"}, {"发票号", "组内索引"}),
    计算分组标识 = Table.AddColumn(展开数据, "分组标识", each [发票号] - [组内索引]),
    // 5. 按客户编号和分组标识分组,聚合起始/结束发票号
    最终分组 = Table.Group(计算分组标识, {"客户编号", "分组标识"}, {
        {"起始发票号", each List.Min([发票号])},
        {"结束发票号", each List.Max([发票号])}
    }),
    // 移除不需要的分组标识列,调整列顺序
    整理结果 = Table.ReorderColumns(Table.RemoveColumns(最终分组, {"分组标识"}), {"起始发票号", "结束发票号", "客户编号"})
in
    整理结果

验证结果

运行上述代码后,会得到你需要的输出格式:

起始发票号结束发票号客户编号
12A
33B
45A
67B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:30:56