它解决什么问题
一张几万行的资产明细,要出一张「每个部门有多少台、原值合计多少」的汇总表 – 这就是 GroupBy。输入是明细,输出是每组一行。
输出的行数等于分组的数量,不是原来的行数。这是它和 Math Formula 那类节点的根本区别 – 后者是逐行算、行数不变,GroupBy 是把多行压成一行。
基本信息
| 英文原名 | GroupBy |
|---|---|
| 中文名称 | 分组聚合 / 分组汇总(iModel 中文界面) |
| 输入端口 | 1 个数据表 |
| 输出端口 | 1 个,每个分组一行 |
| 是否改变表结构 | 会。列名会被改写成带聚合方法的形式 |
配置项逐条
-
Groups分组列
按哪几列分。选「部门」就是每个部门一行,同时选「部门」和「年份」就是每个部门每年一行。一列都不选也是合法的 – 那是把整张表当成一组,输出一行全表合计。
-
Manual Aggregation聚合设置
把要汇总的列加进来,每列各选一种方法:求和、平均、最大、最小、计数、去重计数、取第一个、取最后一个、拼接成字符串等。同一列可以加两次用不同方法,比如原值既要合计又要平均。
-
Count vs Unique count计数 与 去重计数
这两个经常选错。计数是这一组有多少行,去重计数是这一列有多少个不同的值。「这个部门有几台设备」用前者,「这个部门涉及几个供应商」用后者。
-
Missing value handling缺失值处理
聚合时是否跳过空值。默认跳过 – 意味着求平均时分母是有值的行数,不是总行数。这个默认多数时候是对的,但你得知道它是这么算的,尤其在做占比和均值口径要向别人解释的时候。
-
Column naming输出列命名方式
输出列名默认会带上方法,比如
Sum(原值)。可以改成保留原列名。下游节点如果写死了列名,这一项一改就断 – 定了就别再动,或者在 GroupBy 后统一接一个 Column Renamer 固定下来。
最小示例
输入
| 资产编号 | 所属部门 | 原值 |
|---|---|---|
| FA-001 | 信息部 | 86000 |
| FA-002 | 行政部 | 4200 |
| FA-004 | 行政部 | 63000 |
| FA-005 | 信息部 | 7800 |
配置
分组列:所属部门
聚合: 原值 → 求和
资产编号 → 计数
输出
| 所属部门 | Sum(原值) | Count(资产编号) |
|---|---|---|
| 信息部 | 93800 | 2 |
| 行政部 | 67200 | 2 |
四行变两行,列名带上了聚合方法。
三个常见坑
- 分组列里有看不见的差异,同一个部门被拆成两组。「行政部」和「行政部 」在这里是两个组,输出里会出现两行都叫行政部。分组前先去掉首尾空格,这是最常见的一条。
- 没进聚合设置的列会消失。输出只有分组列加聚合结果列,其余列一律不出现。想保留某列的原值,把它加进聚合并选「取第一个」。
- 求和碰上文本列会失败或结果异常。原值列如果被读成了文本,求和这个方法要么选不了,要么给出拼接结果。先确认列类型再配聚合。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 要行列交叉的透视表,比如行是部门、列是年份 | Pivoting |
| 要在明细旁边加一列组内合计,行数不变 | GroupBy 汇总后再用 Joiner 接回明细 |
| 是横向跨多列算一个值,不是纵向跨行 | Column Aggregator |
| 要把拼接成一格的值再拆回多行 | Ungroup |

