节点手册 · 汇总

KNIME Pivoting 透视表用法

Manipulation → Row → Transform

做行列交叉的透视表:行是部门、列是年份、格子里是金额合计。相当于 Excel 的数据透视表,但结果是可重复执行的。

它解决什么问题

GroupBy 出的是每组一行的清单,Pivoting 出的是二维交叉表。要「各部门各年度的原值合计」这种一眼看得出趋势的表,用它。

和 GroupBy 的关系:Pivoting 是 GroupBy 加了一个「列方向的分组」。只填行分组就等同于 GroupBy,再填一个列分组,结果才展开成二维。理解了这一点,配置就不难。

它在流程里的位置

Concatenate全年明细
Pivoting部门 × 年份
Column Renamer固定列名
Excel Writer出报表

后面接一个改名节点是有意的 – 透视出来的列名带聚合方法,直接出报表不好看,下游写死列名也容易断。

基本信息

英文原名Pivoting
中文名称透视 / 数据透视(iModel 中文界面)
输入端口1 个数据表
输出端口3 个:透视表、行方向合计、列方向合计
输出列数由列分组那一列有多少个不同取值决定

配置项逐条

  • Groups行方向分组

    结果表里每一行代表什么。选「所属部门」,输出就是每个部门一行。可以选多列。

  • Pivots列方向分组

    决定横着展开成哪些列。选「年份」,这一列里有几个不同的年份,输出就有几组列。选取值特别多的列会直接把表撑爆 – 选之前先确认这一列有多少个不同值。

  • Manual Aggregation聚合设置

    格子里放什么。和 GroupBy 一样,选列加方法:求和、计数、平均等。同一列可以加多次用不同方法,但那样列数会翻倍。

  • Column naming输出列命名方式

    默认列名会拼上取值和方法,像 2026+Sum(原值)。可以改成只保留取值。无论选哪种,下游都别写死列名 – 数据换一批多出一个年份,列名就变了。

Pivoting 配置对话框
行方向分组Groups
所属部门结果里每个部门一行。
列方向分组Pivots
年份 这一列有几个不同取值,输出就有几组列。选到「资产编号」这种唯一值列,会生成上万列直接卡死。
聚合Manual Aggregation
原值 → 求和格子里放什么,配法和 GroupBy 一致。

最小示例

输入

所属部门年份原值
信息部202586000
信息部20267800
行政部20254200
行政部202663000

输出(主输出端口)

所属部门2025+Sum(原值)2026+Sum(原值)
信息部860007800
行政部420063000

另外两个输出端口分别是各部门的横向合计和各年份的纵向合计 – 需要总计行的话不用自己再算一遍。

三个常见坑

  1. 列分组选错,生成上万列。把「资产编号」这种每行都不一样的列放进列方向分组,输出会有几万列,KNIME 会卡很久甚至内存溢出。放进去之前先用 GroupBy 数一下这列有多少个不同取值。
  2. 数据换一批,下游全断。今年多了一个部门或多了一个年份,输出列数就变,写死列名的下游节点立刻变红。修法:透视后接 Column Renamer 或 Table Manipulator 把列名规范化,或者干脆在下游用通配符选列而不是点名选。
  3. 某些格子是空的。某个部门在某一年没有数据,交叉点上就是缺失值 – 这是正确的表达,不是 bug。要显示成 0 的话后面接 Missing Value 填 0,但先想清楚「没有记录」和「金额为零」在你的口径里是不是一回事。

什么时候该换别的节点

情况换成
只要每组一行的清单,不需要交叉GroupBy
要反过来,把宽表转成长表Unpivoting
只是想调整列的顺序和名称Table Manipulator
要做的是同比环比这类跨列计算透视之后再用 Math Formula

透视出来的列数不对

先确认列方向分组那一列有多少个不同取值 – 列数就等于它。太多就说明这一列选错了。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码