

收到同事发来的销售统计表,点开的瞬间血压直接拉满:
日期横向排列,一眼看过去密密麻麻; 数据结构诡异,每个产品名称后面紧跟着两行数据(一行日期,一行数值); 没有标准表头,根本没法直接做透视表或图表。
要求很明确:“要按‘名称’和‘月份’统计汇总,下午开会要用!”
这种表,手动改不是不行,就是太费时间。几百行数据,复制粘贴加调整格式,一下午就没了。
而且,下个月数据更新了,你还得重做一遍……
今天我们用 Power Query 的“拆解思维”,一劳永逸的解决这种混乱表格。
很多人看到这种表,第一反应是"怎么把它转过来"。
其实不用转。先拆散,再重组。
这表有个规律:每两行是一组(一行产品名+日期,一行数值)。
那就按这个规律拆开,每组单独处理,最后再合起来。
有点像拼乐高——先拆成小块,拼好了再组装。
先导入数据,注意不要勾选“表包含标题”
数据的规律是每两行为一组,所以先用Table.Split将数据拆分开
先单独处理一个表,方便理解整个处理的逻辑
将子表格的数据,按列转为list。这里不进行转置或提升标题的原因是,第1列的名称不是固定的值,考虑到要批量处理其他表格,这里不能简单的转置。

关键一步:将列表的第1个值,也就是名称,与日期数据做笛卡尔积,
同时,提取日期出日期中的月份。结果就是得到的每一个列表,都包括了名称、月份和数据
将得到的列表,再转回表格。这样单个表格的数据就处理完成,先不急着汇总,等其他表格全处理完,再一次性合并汇总就行
上面单个表格的处理步骤,可以转为自定义函数,也可以直接用嵌套的写法
合并表格,并去掉空值
最后,再将月份透视回去,转为二维表样式,并按数值进行求和,就得到了所需要的结果

这样简单的几步,就将一个相对比较混乱的表格整理好了,后面如果数据有增加,刷新下就能自动汇总。
其实遇到这种"不守规矩"的表,别急着动手改。
先花一分钟看看数据结构,找到规律,拆开处理,往往比硬改快得多。 Power Query 这东西,学的时候觉得麻烦,用顺了真能省时间。
let 源 = Excel.CurrentWorkbook(){[Name="表3"]}[Content], 自定义1 = List.Transform(Table.Split( 源,2),(x)=>[ a=Table.ToColumns(x), b=List.TransformMany( {List.First(a){0}},each List.Skip(a,1),(x,y)=>{x} & {DateTime.ToText( y{0},"M月")}&{y{1}}), c=Table.FromRows(b,{"名称","月份","数值"}) ][c]), 自定义2 = Table.SelectRows( Table.Combine( 自定义1),each [月份]<>null), 已透视列 = Table.Pivot(自定义2, List.Distinct(自定义2[月份]), "月份", "数值", List.Sum)in 已透视列完整示例文件 + 可复用代码 已整理好! 后台回复关键词 统计 自取。
觉得有用,转发给那个总发奇怪表格的同事吧。
完
HR/行政必看!3分钟学会powerquery考勤统计,从此告别手工计数
powerquery|后悔没早点知道这个方法,如何按标题分组
不用Python!Power Query累计计算客户每日欠款
PowerQuery案例9:不规则员工表别手动对了!PQ一键规整各省+总计

