财务月报、地区对照表经常要在「长表」和「宽表」之间切换:明细是地区 + 月份 + 金额一行一条,汇报却要地区做行、月份做列、格子里求和;反过来,已经摊成「1月、2月、3月」各一列的宽表,要收成「月份 + 金额」才能继续按月汇总或做同比。
如果采用传统手工方式,只能反复拉数据透视表,或把月份列逐个复制粘贴成竖表。缺一个月份、多一个状态列,手工透视就要重做;源表一被改,宽表与长表立刻对不上。过程无法沉淀为可回溯、可自动复跑的工作流。
DT-Bot 的 「透视反透视」 算子专为解决此类长表与宽表互换而设计。它把工作空间里的一张表写成一张新表:透视做交叉汇总,反透视收成名称列 + 值列。源表只读。未点名时新表名为「源表名_透视」或「源表名_反透视」。按维度汇总但列集合不变,请用「聚合计算」;整表行变列、不聚合,请用「行列转置」。
一、 核心能力与适用场景
「透视反透视」算子聚焦于一张表的长宽结构转换,覆盖以下三大核心能力:
| 核心能力 | 解决什么业务问题 | 典型业务场景 |
|---|---|---|
| 透视(长表变宽表) | 指定谁做行、谁做列、格子填哪一列、怎么聚合,得到交叉表。 | 按地区做行、月份做列,金额求和;各状态各一列,格子里计数或求平均。 |
| 反透视(宽表变长表) | 把若干度量列收成「名称列 + 值列」,其余列作为保留维度。 | 把 1月、2月、3月 收成「月份 + 金额」,再往下按月计算。 |
| 指定结果名 | 交叉表要落成业务可识别的表名,而不是默认「源表名_透视」。 | 同一套地区×月份求和,输出「地区月报」。 |
不写聚合时默认求和。也可以计数、平均、最大、最小。列头取值超过 256 种会拒绝。一次展开两个列维、或同时摊两列度量,本节点做不到。
二、 边界指南:它与相近算子有何区别?
在构建数据工作流时,理解算子之间的职责边界至关重要:
| 比较维度 | 「透视反透视」算子 | 「聚合计算」算子 | 「行列转置」算子 | 「单元格拆行」算子 |
|---|---|---|---|---|
| 主要定位 | 长宽表互换(交叉汇总或名称+值) | 分组压行,列集合不变 | 整表行变列、不聚合 | 一格拆成多行,仍是一张明细 |
| 输出机制 | 源表只读,另写透视/反透视表 | 源表只读,另写短表 | 写出转置表 | 行数变多,不是交叉宽表 |
| 典型动作 | 地区做行、月份做列;1月/2月竖起来 | 按地区合计金额,月份仍是值不是列头 | 整表行列对调 | 逗号分隔的一格拆多行 |
| 如何选择 | “要交叉宽表,或把月份列收成名称+值” | “只要分组短表,不要把月份摊成列头” | “整表转置,格子里不求和” | “拆的是单元格文本,不是列维” |
三、 提示词编写规范与公式
「透视反透视」算子支持自然语言直接表达,建议遵循以下标准的三要素编写公式:
【目标表】 + 【透视:行 / 列 / 值 / 聚合;或反透视:收哪些列、名称列与值列叫什么】 + 【结果表名(可选)】
1. 目标表范围表达
- 单表精准点名:例如
把 “销售明细” ...、把 “月度宽表” ...; - 默认当前流转表:未显式提及表名时,继承上一节点连线流入的数据表。
2. 结构怎么写
- 透视:写清谁做行、谁做列、格子填哪一列、怎么聚合。不写聚合时默认求和。也可以计数、平均、最大、最小;
- 反透视:写清收哪些列、新名称列和值列叫什么。也可以写成「除姓名外都竖起来」,结果与点名 1月、2月、3月相同;
- 限制:一次展开两个列维、或同时摊两列度量,本节点做不到;列头取值超过 256 种会拒绝。
3. 结果名
- 点名则用你写的表名(如「地区月报」);不写则为「源表名_透视」或「源表名_反透视」。源表只读。
把 “销售明细” 按地区做行、月份做列,金额求和。
对应三段:表是销售明细;透视行=地区、列=月份、值=金额、聚合=求和;结果默认「销售明细_透视」。
四、 核心功能与图解实战
以下结合真实企业数据场景,展示「透视反透视」在不同需求下的处理效果:
场景 1:透视(长表变交叉宽表)
业务背景:财务要把销售明细收成「地区 × 月份」交叉表,格子里是金额求和。华东 1 月有两笔,必须先加总再进格子,而不是只留其中一笔。
【处理前:销售明细】
| 地区 | 月份 | 金额 |
|---|---|---|
| 华东 | 1月 | 100 |
| 华东 | 1月 | 20 |
| 华东 | 2月 | 80 |
| 华北 | 1月 | 50 |
| 华北 | 2月 | 70 |
【执行提示词】
把 “销售明细” 按地区做行、月份做列,金额求和。
【处理后:销售明细_透视(新表;源表只读)】
| 地区 | 1月 | 2月 | 变更说明 |
|---|---|---|---|
| 华东 | 120 | 80 | 1 月 100 + 20 = 120;2 月仅 80 |
| 华北 | 50 | 70 | 各月各一笔 |
逻辑详解:未点名结果表,新表名为「销售明细_透视」。不写聚合时默认求和。源表五行只读。也可以计数、平均、最大、最小。列头取值超过 256 种会拒绝。
场景 2:反透视(宽表收成名称 + 值)
业务背景:月度宽表已经是「1月、2月、3月」各一列,下游同比与累计都要求「月份 + 金额」长表。李四 2 月为 0 也要留下,不能当空列丢掉。
【处理前:月度宽表】
| 姓名 | 1月 | 2月 | 3月 |
|---|---|---|---|
| 张三 | 10 | 20 | 30 |
| 李四 | 5 | 0 | 15 |
【执行提示词】
把 “月度宽表” 的 1月、2月、3月 反透视成月份和金额。
【处理后:月度宽表_反透视(新表)】
| 姓名 | 月份 | 金额 | 变更说明 |
|---|---|---|---|
| 张三 | 1月 | 10 | 宽表 1 月列竖起来 |
| 张三 | 2月 | 20 | |
| 张三 | 3月 | 30 | |
| 李四 | 1月 | 5 | |
| 李四 | 2月 | 0 | 0 仍保留为一行 |
| 李四 | 3月 | 15 |
逻辑详解:未点名结果表,新表名为「月度宽表_反透视」。姓名作为保留列,1月/2月/3月变成「月份」与「金额」。也可以写成「除姓名外都竖起来」,结果一样。源表只读。
场景 3:指定结果名(同一套透视,表名叫「地区月报」)
业务背景:交叉表要直接叫「地区月报」交给业务,不能停在默认的「销售明细_透视」,以免下游选错表。
【处理前:销售明细】
| 地区 | 月份 | 金额 |
|---|---|---|
| 华东 | 1月 | 100 |
| 华东 | 1月 | 20 |
| 华东 | 2月 | 80 |
| 华北 | 1月 | 50 |
| 华北 | 2月 | 70 |
【执行提示词】
把销售明细按地区做行、月份做列,金额求和,输出 “地区月报”。
【处理后:地区月报(新表)】
| 地区 | 1月 | 2月 | 变更说明 |
|---|---|---|---|
| 华东 | 120 | 80 | 与场景 1 同一套交叉汇总 |
| 华北 | 50 | 70 | 仅表名按提示词落成「地区月报」 |
逻辑详解:聚合口径与场景 1 相同,区别只在结果表名。源表「销售明细」仍只读,不会被「地区月报」覆盖。
五、 常见问题与操作贴士(FAQ)
Q1:不写聚合方式时,格子里按什么算?
答:默认求和。也可以计数、平均、最大、最小,须在提示词里写清。华东 1 月两笔 100 与 20,求和后格子是 120。
Q2:为什么提示「列头取值超过 256 种会拒绝」?
答:透视的列维会变成表头。取值种类过多时交叉表会过宽,本节点会拒绝执行。请先收敛列维(例如先「筛选器」或「聚合计算」),再透视。
Q3:一次把两个列维都摊开,或同时摊两列度量,行吗?
答:本节点做不到。 一次只展开一个列维、摊一列度量。需要更复杂的查询请用 「NP-SQL」。
Q4:和「聚合计算」「行列转置」怎么选?
答:按维度汇总但列集合不变(月份仍是值,不是列头)请用 「聚合计算」。整表行变列、不聚合请用 「行列转置」。一格拆成多行请用 「单元格拆行」。
六、 关联算子导航
- 若只需分组压行、列集合不变:请参考 数据统计 · 聚合计算
- 若需整表行变列、格子里不聚合:请参考 数据处理 · 行列转置
- 若需把一格文本拆成多行:请参考 数据处理 · 单元格拆行
- 若需一次查询完成更复杂的跨表或双度量结构:请参考 数据统计 · NP-SQL
- 欲下载真实数据表格亲自动手实测:请查阅 数据案例 · 透视反透视案例