文 / 老汪(汽车零部件财务与商业智能实战派)
大家好,我是老汪。
在咱们汽车零部件制造企业(Tier 1 一级供应商),月末成本会计和产线财务 BP 最头疼的一件事,就是核算各车间的辅料、刀具和特种化学品消耗。
比如我们工厂生产铝合金底盘控制臂和制动总成,整个生产流程要跨越精密压铸、CNC粗加、CNC精加、荧光探伤、总成装配五大工段。各工段在领用物料时,由于工序特点截然不同,各工段交上来的报表是一张参差不齐的“五列宽表”:
- 压铸车间领用脱模剂、冲头颗粒、除渣剂,列长有 7 行;
- CNC 粗加主要领用粗铣刀片、切削液、拉钉,列长有 5 行;
- 荧光探伤只领用磁粉探伤剂、水基清洗剂和滤色片,列长只有 3 行,底下全是一大堆空的
null! - 而且,像
水溶性切削液、水基清洗剂、定位插销这种通用耗材,在粗加、精加、装配车间被重复领用。
月末关账前夕,工厂财务经理和供应链采购主管突然火急火燎找到你:
“老汪,采购部要跟供应商核对本月所有特种刀辅料的寄售结算单价,你能不能在 10 分钟内,把这 5 个工段实际消耗的物料合并出来?要求必须是一维清单、绝对不能有空项(null)、绝对不能有重复物料,我们要核定总唯一品类数!”
很多刚入行的财务新手是怎么干的?
打开 Excel,把第二列复制粘贴到第一列底下,再把第三列粘贴到底下,接着手动点筛选、勾掉空白项,最后点【数据】➔【删除重复值】。
平时 5 列还能折腾,一旦遇上 20 个工位、12 个月份的宽表,复制粘贴到眼花手抽筋,还不小心漏掉了关键工段的特种刀具!下个月数据一更新,又得全部重来一遍!
今天老汪就教大家用 Power Query 的 M 函数,打出一套“列转列表 ➔ 打平合并 ➔ 瞬间去空 ➔ 极速去重”的组合拳,核心主角就是咱们今天重点拆解的高频函数:List.RemoveNulls!
一、 为什么老汪说“去空”是数据建模的试金石?
很多人觉得“去空”还不简单吗?在界面上点筛选不就完了?
但在纯正的 Power Query M 语言世界里,表格(Table)是由列构成的,而每一列的底层本质就是一个列表(List)。
在清洗参差不齐的多列宽表时,如果我们直接合并表格,那些短列留下的 null(空值)会像牛皮癣一样四处蔓延。一旦后面要计算工装品类总数、做单价匹配(VLOOKUP / Table.Join),空值就会导致关联报错、计数虚高。
1. 函数语法拆解:List.RemoveNulls
List.RemoveNulls(list as list) as list
- 参数:接收一个任意类型的列表
list; - 返回值:返回一个剔除了所有
null元素的新列表; - 底层特性:
1. 它只剔除真正的空值null,对于空字符串""、空格" "或数字0是不作剔除的(这非常符合财务严谨逻辑,领用量为 0 是事实,而未领用的空白单元格在系统里是 null);
2. 它是惰性求值的,执行效率极高,处理几十万行的列表也是毫秒级完成。
二、 业务实操:从五工段参差宽表到唯一清单
老汪在随堂配套课件的 原始业务数据表.xlsx 中,给大家还原了汽车零部件车间的真实领用明细:
| 压铸工段领用物料 | CNC粗加工段领用物料 | CNC精加工段领用物料 | 荧光探伤工段领用物料 | 总成装配工段领用物料 |
|---|---|---|---|---|
| M-CAST-01 高温压铸脱模剂 | M-CNC-01 硬质合金飞面铣刀片 | M-CNC-04 CBN超硬精镗刀片 | M-NDT-01 荧光磁粉探伤剂 | M-ASM-01 气动定扭套筒头 |
| M-CAST-02 氮化硅热电偶保护管 | M-CNC-02 水溶性极压切削液 | M-CNC-05 陶瓷微调精镗刀头 | M-NDT-02 环保水基清洗剂 | M-ASM-02 厌氧螺纹紧固防松胶 |
| M-CAST-03 铝合金熔炼除渣剂 | M-CNC-03 BT40主轴拉钉 | M-CNC-02 水溶性极压切削液 | M-NDT-03 高感光黑光灯滤色片 | M-ASM-03 VCI气相防锈包装袋 |
| M-CAST-04 压射冲头颗粒润滑剂 | M-CNC-06 碳钢粗加工刀垫 | M-CNC-07 主轴高压气隙防护油 | (null) | M-NDT-02 环保水基清洗剂 |
| M-CAST-05 石墨坩埚高温涂料 | M-CNC-08 工件重型定位插销 | M-CNC-08 工件重型定位插销 | (null) | M-ASM-04 矿物集装箱干燥剂 |
| M-CAST-06 模具冷却铜水嘴 | (null) | M-CNC-09 雷尼绍高精度测针 | (null) | (null) |
| M-CAST-07 压铸冲头耐磨套 | (null) | (null) | (null) | (null) |
大家看,这张表有两大典型痛点:
1. 空值 null 很多:探伤工段和装配工段耗材少,下半截全是空白;
2. 重复领用多:切削液在粗加和精加都领了,清洗剂在探伤和装配都领了,定位销也在两个车间出现。
我们要将其变成一列纯净、唯一、可直接对账的《全车间物料唯一清单》。
三、 手把手高级编辑器实操
进入 Power Query,打开【高级编辑器】,输入老汪精心调校的高性能清洗流水线:
let
// 1. 动态自适应定位当前目录(Q001规范,开箱即用永不报红字)
当前目录 = try
let
rawPath = Text.From(Excel.CurrentWorkbook(){[Name="当前路径"]}[Content]{0}[Column1]),
cleanPath = Text.Trim(rawPath),
fixedPath = if Text.EndsWith(cleanPath, "\") then cleanPath else cleanPath & "\"
in
fixedPath
otherwise
"./",
// 2. 读取原始宽表
文件路径 = 当前目录 & "原始业务数据表.xlsx",
源 = Excel.Workbook(File.Contents(文件路径), null, true),
各工段表_Sheet = 源{[Item="各工段领用物料宽表", Kind="Sheet"]}[Data],
提升的标题 = Table.PromoteHeaders(各工段表_Sheet, [PromoteAllScalars=true]),
// 3. 【核心技巧一】:二维宽表化为“列列表”(List of Lists)
// Table.ToColumns 会把 5 个工段列提取为 5 个独立的 List
工段列列表集合 = Table.ToColumns(提升的标题),
// 4. 【核心技巧二】:将 5 个工段 List 打平合并为单一长列表
合并所有工段物料 = List.Combine(工段列列表集合),
// 5. 【核心步骤三·本节主角】:瞬间剔除列表中所有的 null 空项
剔除空值列表 = List.RemoveNulls(合并所有工段物料),
// 6. 【核心步骤四】:跨车间物料去重,得到唯一清单
唯一物料清单 = List.Distinct(剔除空值列表),
// 7. 还原为整洁的标准财务报表
转换为表 = Table.FromList(唯一物料清单, Splitter.SplitByNothing(), {"物料唯一编码与品名"}, null, ExtraValues.Error),
添加索引 = Table.AddIndexColumn(转换为表, "序号", 1, 1, Int64.Type),
最终报表 = Table.ReorderColumns(添加索引, {"序号", "物料唯一编码与品名"})
in
最终报表
四、 老汪敲黑板:关键逻辑复盘与避坑指南
平时很多财务同学写代码容易在这几个坑里翻车,老汪给大家敲黑板提个醒:
1. 💡 免改路径直接刷新秘籍
平时大家做财务分析最怕换台电脑一刷新就报错“找不到文件路径”。老汪已经在课件的【配置】表写好自适应公式并定义了名称。大家解压压缩包后,无论拷到公司电脑的 D 盘还是家用笔记本的桌面,直接点击【全部刷新】即可秒出结果,绝不报红字!大家可以把这套规范直接抄到自己日常的财务模板里。
2. 为什么不用界面的“逆透视列(Unpivot)”?
有的同学会问:“老汪,这题我用逆透视列也能把多列打平,为什么一定要用 M 函数?”
老汪告诉你一线实战的大实话:
– 逆透视在列数固定时很方便,但如果车间下个月新增了【工段6_热处理】、【工段7_喷涂】,或者某个月某工段停产被删了一列,界面的逆透视步骤就会因为“找不到固定列名”而直接崩溃;
– 而老汪教你的 Table.ToColumns 是全动态提取!管你是 5 列还是 50 列,它自动把所有列抓取为列表集合,不管表头怎么变、工位怎么增减,刷新永远稳如泰山!
3. 先去空还是先去重?
必须是先 List.RemoveNulls 去空,再去 List.Distinct 去重!
如果先去重,列表中依然会保留一个孤零零的 null,你最后还得再洗一次;先去空把所有杂质彻底拿掉,去重后的列表就纯净无比。
五、 随堂课件下载与动手实操
光看不练假把式。老汪已经把本节课涉及的完整练习题做成了一个标准课件包,内含:
– 📂 原始业务数据表.xlsx(五工段参差领用宽表,供你亲自动手演练)
– 📂 最终完成版_带PQ查询.xlsx(内嵌完整 M 语言清洗管道与自适应配置表)
– 📂 M_动态自适应脚本.m(可直接用记事本打开复制的纯净代码)
大家下载后解压,亲自把老汪这套流水线跑一遍,体验一下 3 秒钟搞定多车间物料对账的爽快感!
本节实操随堂 Excel 课件包免费下载
包含配套的《原始业务数据表.xlsx》(练手用)与《最终完成版_带PQ查询.xlsx》(预置当前路径自适应公式,下载解压即可直接刷新),以及纯文本 M 语言代码文件。














暂无评论内容