这一讲接着第 5 讲往下做。默认你已经会读数、清洗、转类型、关联。这一讲用到的数据,是前面几讲处理干净之后的那张明细表。
分组统计只有两个选择
配置面板看着有不少东西,但真正要决定的只有两件:按什么分组,算什么。这两个选对了,剩下的都是细节。
选分组列之前先问自己一句:结果表的每一行代表什么?一个资产分类一行?一个城市一行?还是一个分类在一个城市各一行?答案就是分组列。
演示会自动播放。鼠标移上去暂停,点任意按钮转为手动,点右上角可以全屏投影。
| 聚合方法 | 算什么 | 常用在 |
|---|---|---|
| 求和 | 组内数值相加 | 金额合计、数量合计 |
| 计数 | 组内有几行 | 每次都该加上,用来核对有没有漏数据 |
| 平均 | 组内平均值 | 单价水平、平均使用年限 |
| 最大 / 最小 | 组内极值 | 找最贵的那台、最早的那笔 |
| 去重计数 | 组内有几个不同的值 | 这个分类涉及多少个不同城市 |
养成一个习惯:每次分组都加一个计数列。把各组的条数加起来,应该正好等于输入行数。这是检验有没有漏数据最便宜的办法,三秒钟。
两个不报错的统计错误
分组统计最危险的地方,是它几乎不会报错。数据里有脏东西,它照样给你一张看起来很正常的汇总表 – 而错误已经藏在里面了。
这两个错误都不会亮红灯。唯一能发现它们的办法,是分组之前先看一眼分组列有没有空值,分组之后核一下「求和 ÷ 条数」和平均值对不对得上。
处理办法在前面几讲都教过:分组列的空值,用行过滤器筛掉,或者用规则引擎补成「未分类」;聚合列的空值,看业务决定补 0 还是保留。这里有个判断要你自己做 – 「没登记金额」和「金额是 0」不是一回事,补 0 会让平均值变小,不补会让分母变小。哪个对,取决于这份报表要回答什么问题。
透视:把长表变成交叉表
分组聚合出来的是长表,一个组合一行。机器读很方便,但要交给业务部门的报表通常不长这样 – 他们要的是行是城市、列是分类的那种交叉表。
透视做的事是把一列的值变成多个列名。这就带来它唯一的风险:列名来自数据,数据一变,列就变。下个月多出一个新的资产分类,结果表就会多一列,下游任何按列名取数的节点都会出问题。
把透视放在流程的最后一道工序。它后面不要再接按列名选列的节点,否则下个月重跑就可能失败。
排序取前 N
「按金额排序取前二十条」是最常见的收尾需求。做法是两个节点:先排序,再用行过滤器的「行号范围」模式筛 1 到 20。
顺序不能反。先筛行号再排序,你筛的是原始顺序的前 N 行,跟金额没有任何关系 – 而结果表看起来完全正常。
还有一个更隐蔽的问题:排序结果不对,九成不是排序节点的毛病,是排序列的类型不对。字符串按文本比大小,「860000」会排在「1280000」前面,因为 8 大于 1。看一眼字段名左边的类型标记就知道了,这是第 4 讲讲过的。
最后一步:把表整理成能交的样子
分组聚合会自动生成「原值(求和)」「条数」这类列名。它们对你有意义,对收件人没有。交出去之前用列重命名改成业务语言,再调一下列的顺序,去掉中间过程的辅助列。
这一步经常被跳过,但它决定了对方要不要回来问你。花两分钟,省掉一个来回。
学完自检
- 选分组列之前会先想「结果表每一行代表什么」
- 每次分组都加计数列,并且会把各组条数加起来核对
- 知道分组列的空值会独立成组,聚合时缺失值会被跳过
- 能做透视,并且知道要把它放在流程最后
- 取 TopN 时先排序再筛行号,排序前会先看类型标记

