在Power Query中基于列条件添加注释列,识别发票物料批次连续性
在Power Query中新增发票物料批次连续性判断注释列
现有一张记录发票物料信息的数据表,需新增注释列标记对应行的批次为「连续」或「未追踪」,预期结果如下:
| 发票编号 | 日期 | 发票计数 | 产品编码 | 批次 | 批次序列号 | 所需注释新列 |
|---|---|---|---|---|---|---|
| 9573334429 | 31/07/2023 | 1 | 57663 | TAP3F20026 | 4 | 未追踪 |
| 9573334430 | 31/07/2023 | 1 | 68691 | UIWZ306057 | 1 | 未追踪 |
| 9573334431 | 31/07/2023 | 0 | 57822 | MKL3D20031 | 1 | 未追踪 |
| 9573334431 | 31/07/2023 | 0 | 69422 | MKL3D20028 | 1 | 连续 |
| 9573334431 | 31/07/2023 | 1 | 69422 | MKL3D20032 | 2 | 连续 |
| 9573334431 | 31/07/2023 | 0 | 69469 | MKL3F20039 | 1 | 未追踪 |
| 9573334432 | 31/07/2023 | 1 | 67671 | SPR3B20026 | 5 | 未追踪 |
| 9573334433 | 31/07/2023 | 1 | 59175 | SPR3B20064 | 2 | 未追踪 |
| 9573334434 | 31/07/2023 | 1 | 70963 | MKL3B23039 | 3 | 未追踪 |
| 9573334435 | 31/07/2023 | 1 | 70963 | MKL3B23038 | 2 | 未追踪 |
| 9573334436 | 31/07/2023 | 1 | 68691 | UIWZ306057 | 1 | 未追踪 |
| 9573334437 | 31/07/2023 | 1 | 57663 | TAP3F20026 | 4 | 未追踪 |
| 9573334437 | 31/07/2023 | 0 | 69012 | TAP3F20025 | 4 | 未追踪 |
| 9573334438 | 31/07/2023 | 1 | 55710 | TAP2F20043 | 3 | 未追踪 |
| 9573334438 | 31/07/2023 | 0 | 55714 | TAP3A20011 | 3 | 未追踪 |
| 9573334439 | 31/07/2023 | 1 | 66966 | HAP2F20114 | 2 | 连续 |
| 9573334439 | 31/07/2023 | 0 | 66966 | HAP2F20115 | 3 | 连续 |
判断规则
- 当同一发票编号+同一产品编码的分组下,存在至少2条记录,且其中有至少两个批次序列号为连续整数时,该分组内的所有记录标记为「连续」
- 其余所有情况标记为「未追踪」
Power Query实现步骤
- 将数据源导入Power Query编辑器,确保「批次序列号」为数值类型(若当前是文本,可通过「转换」>「数据类型」>「整数」修改)
- 按「发票编号」和「产品编码」分组,保留分组内所有行:
= Table.Group(源, {"发票编号", "产品编码"}, {{"所有行", each _, type table [发票编号=text, 日期=date, 发票计数=number, 产品编码=text, 批次=text, 批次序列号=number]}}) - 添加自定义列,判断分组内是否存在连续批次序列号:
= Table.AddColumn(上一步结果, "是否连续", each let 排序序列号 = List.Sort([所有行][批次序列号]), 连续检查 = List.AnyTrue(List.Zip({排序序列号, List.Skip(排序序列号)}), (x) => x{1} = x{0} + 1), 记录总数 = Table.RowCount([所有行]) in 记录总数 >= 2 and 连续检查 ) - 展开「所有行」列,恢复原始数据结构
- 新增「所需注释新列」,根据「是否连续」字段赋值:
= Table.AddColumn(展开结果, "所需注释新列", each if [是否连续] then "连续" else "未追踪") - 可选择删除「是否连续」辅助列,完成后关闭并上载数据
内容的提问来源于stack exchange,提问作者Amar Gunjal
相关产品推荐
相关产品推荐

