节点手册 · 汇总

KNIME GroupBy 分组汇总用法

Manipulation → Row → Transform

按一列或几列分组,对其余列做求和、计数、平均这类汇总,相当于 Excel 的分类汇总或 SQL 的 GROUP BY。

它解决什么问题

一张几万行的资产明细,要出一张「每个部门有多少台、原值合计多少」的汇总表 – 这就是 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(资产编号)
信息部938002
行政部672002

四行变两行,列名带上了聚合方法。

三个常见坑

  1. 分组列里有看不见的差异,同一个部门被拆成两组。「行政部」和「行政部 」在这里是两个组,输出里会出现两行都叫行政部。分组前先去掉首尾空格,这是最常见的一条。
  2. 没进聚合设置的列会消失。输出只有分组列加聚合结果列,其余列一律不出现。想保留某列的原值,把它加进聚合并选「取第一个」。
  3. 求和碰上文本列会失败或结果异常。原值列如果被读成了文本,求和这个方法要么选不了,要么给出拼接结果。先确认列类型再配聚合。

什么时候该换别的节点

情况换成
要行列交叉的透视表,比如行是部门、列是年份Pivoting
要在明细旁边加一列组内合计,行数不变GroupBy 汇总后再用 Joiner 接回明细
是横向跨多列算一个值,不是纵向跨行Column Aggregator
要把拼接成一格的值再拆回多行Ungroup

汇总数字和 Excel 对不上

先查两件事:分组列有没有被空格拆成多组,缺失值跳过与否的口径和 Excel 那边是否一致。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码