分组统计:汇总、透视、排序取数

前五讲都在把数据弄干净,这一讲开始出结果。分组统计的产出,就是你要交出去的那张表。

20 分钟预计用时
2 个选择决定一切
2 个不报错的统计错误
开始之前

这一讲接着第 5 讲往下做。默认你已经会读数、清洗、转类型、关联。这一讲用到的数据,是前面几讲处理干净之后的那张明细表。

分组统计只有两个选择

配置面板看着有不少东西,但真正要决定的只有两件:按什么分组算什么。这两个选对了,剩下的都是细节。

选分组列之前先问自己一句:结果表的每一行代表什么?一个资产分类一行?一个城市一行?还是一个分类在一个城市各一行?答案就是分组列。

演示会自动播放。鼠标移上去暂停,点任意按钮转为手动,点右上角可以全屏投影。

聚合方法算什么常用在
求和组内数值相加金额合计、数量合计
计数组内有几行每次都该加上,用来核对有没有漏数据
平均组内平均值单价水平、平均使用年限
最大 / 最小组内极值找最贵的那台、最早的那笔
去重计数组内有几个不同的值这个分类涉及多少个不同城市

养成一个习惯:每次分组都加一个计数列。把各组的条数加起来,应该正好等于输入行数。这是检验有没有漏数据最便宜的办法,三秒钟。

两个不报错的统计错误

分组统计最危险的地方,是它几乎不会报错。数据里有脏东西,它照样给你一张看起来很正常的汇总表 – 而错误已经藏在里面了。

分组列有空值空值不会被丢掉,而是独立成一个叫「?」的组。报表里会凭空多出一个不存在的类别,一路带到最终交付物里。
聚合列有空值求和、平均都会跳过缺失值。于是「求和 ÷ 条数」对不上「平均值」 – 因为平均的分母不是你以为的那个数。

这两个错误都不会亮红灯。唯一能发现它们的办法,是分组之前先看一眼分组列有没有空值,分组之后核一下「求和 ÷ 条数」和平均值对不对得上。

处理办法在前面几讲都教过:分组列的空值,用行过滤器筛掉,或者用规则引擎补成「未分类」;聚合列的空值,看业务决定补 0 还是保留。这里有个判断要你自己做 – 「没登记金额」和「金额是 0」不是一回事,补 0 会让平均值变小,不补会让分母变小。哪个对,取决于这份报表要回答什么问题。

透视:把长表变成交叉表

分组聚合出来的是长表,一个组合一行。机器读很方便,但要交给业务部门的报表通常不长这样 – 他们要的是行是城市、列是分类的那种交叉表。

透视做的事是把一列的变成多个列名。这就带来它唯一的风险:列名来自数据,数据一变,列就变。下个月多出一个新的资产分类,结果表就会多一列,下游任何按列名取数的节点都会出问题。

把透视放在流程的最后一道工序。它后面不要再接按列名选列的节点,否则下个月重跑就可能失败。

排序取前 N

「按金额排序取前二十条」是最常见的收尾需求。做法是两个节点:先排序,再用行过滤器的「行号范围」模式筛 1 到 20。

顺序不能反。先筛行号再排序,你筛的是原始顺序的前 N 行,跟金额没有任何关系 – 而结果表看起来完全正常。

还有一个更隐蔽的问题:排序结果不对,九成不是排序节点的毛病,是排序列的类型不对。字符串按文本比大小,「860000」会排在「1280000」前面,因为 8 大于 1。看一眼字段名左边的类型标记就知道了,这是第 4 讲讲过的。

最后一步:把表整理成能交的样子

分组聚合会自动生成「原值(求和)」「条数」这类列名。它们对你有意义,对收件人没有。交出去之前用列重命名改成业务语言,再调一下列的顺序,去掉中间过程的辅助列。

这一步经常被跳过,但它决定了对方要不要回来问你。花两分钟,省掉一个来回。

学完自检

  • 选分组列之前会先想「结果表每一行代表什么」
  • 每次分组都加计数列,并且会把各组条数加起来核对
  • 知道分组列的空值会独立成组,聚合时缺失值会被跳过
  • 能做透视,并且知道要把它放在流程最后
  • 取 TopN 时先排序再筛行号,排序前会先看类型标记

把你那张月度汇总表重做一遍

分组加计数、核对条数、最后改列名。这套流程走一遍,以后每个月只是重跑。

iModel 专属客服
网页直接对话,无需微信
4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码