夜雨聆风学习资料网

ARTICLE · 1234043

一个公式干掉数据透视表? Excel 新函数 PIVOTBY 从入门到精通

一个公式干掉数据透视表? Excel 新函数 PIVOTBY 从入门到精通

点击上方蓝色字体,查看更多Excel技巧!!!

做月度汇总报表,你的流程是不是还停留在:插入透视表 → 拖字段 → 排版 → 数据一改 → 再手动刷新一遍?

Microsoft 365 上线的新函数 PIVOTBY,把这件事压缩成了一条公式:选中行字段、列字段、数值区域,回车,一张带行列总计的交叉汇总表直接"溢出"到工作表里——源数据一变,结果立刻重算,永远不用点"刷新"。

官方甚至特意声明:它和透视表功能没有直接关系。可以把它理解为——把透视表的核心能力,做成了一个公式。

今天这篇文章,从 30 秒上手到 11 个参数逐个拆透,看完直接抄进报表。

01 PIVOTBY 是什么:一个公式,输出一张交叉汇总表

一句话定位:按"行字段 × 列字段"分组,对数值做聚合,输出一张动态汇总表。

它和传统透视表最本质的区别在这三点:

  1. 是公式,不是对象
    ——透视表是插进工作表的一个"物件",PIVOTBY 就是一条普通公式;
  2. 自动更新
    ——数据改一个数字,结果立即跟着变,没有"刷新"这个动作;
  3. 结果可以被引用
    ——溢出区域可以直接喂给其他公式和图表,做联动看板。

代价也很明确:没有透视表的样式、切片器和钻取能力(后面细说怎么选型)。

02 先对版本:你的 Excel 有没有它

PIVOTBY 属于新函数(2023 年底预览、2024 年起在 Microsoft 365 正式推送),版本门槛要先确认:

版本
有没有
Microsoft 365 订阅版(Windows / Mac)
✅ 有,还在更新的基本都已推送
Excel 网页版(免费)
✅ 有
Excel 2024 买断版
官方适用列表包含
Excel 2019 / 2016 及更早
❌ 没有

10 秒自检:随便找一格,输入 =PIVOTBY(——如果弹出函数补全和参数提示,说明能用;如果回车后返回 #NAME?,就是版本不支持。

买断版不确定的,用这招一试便知。公司电脑长期收不到更新的,可能是走了半年发布渠道(Semi-Annual),找 IT 管理员确认。

03 示例数据:12 行销售明细

后面所有示例都基于这张表(放在 A1:D13),你也可以换成自己的数据:

区域
产品
季度
销售额
华东
手机
Q1
12000
华东
电脑
Q1
8000
华南
手机
Q1
9000
华南
电脑
Q1
15000
华东
手机
Q2
13000
华东
电脑
Q2
7500
华南
手机
Q2
11000
华南
电脑
Q2
16000
华东
手机
Q3
12500
华东
电脑
Q3
8200
华南
手机
Q3
9500
华南
电脑
Q3
15500

04 30 秒上手:一个公式出交叉表

想看"各区域 × 各产品"的销售额汇总,一条公式:

=PIVOTBY(A2:A13, B2:B13, D2:D13, SUM)

四个参数依次是:行字段(区域)、列字段(产品)、数值(销售额)、聚合方式(求和)。回车,结果自动溢出成一张表:

手机
电脑
总计
华东
37500
23700
61200
华南
29500
46500
76000
总计
67000
70200
137200

注意:行列总计默认自带,不用你做任何设置。

把列字段换成季度,公式只改一个字母:

=PIVOTBY(A2:A13, C2:C13, D2:D13, SUM)
Q1
Q2
Q3
总计
华东
20000
20500
20700
61200
华南
24000
27000
25000
76000
总计
44000
47500
45700
137200

就这么多——入门部分到此结束,确实和写一条 XLOOKUP 的工作量差不多。

05 语法全貌:4 个必需 + 7 个可选

完整签名长这样(别慌,前 4 个够用 80% 的场景):

=PIVOTBY(row_fields, col_fields, values, function,
         [field_headers], [row_total_depth], [row_sort_order],
         [col_total_depth], [col_sort_order],
         [filter_array], [relative_to])
参数
作用
说明
row_fields
行字段
按什么分组放在行上,可用 HSTACK 拼多列
col_fields
列字段
按什么分组放在列上,同样可拼多列
values
数值区域
要聚合的列,可以多列
function
聚合函数
SUM、AVERAGE、COUNT 等,或自定义 LAMBDA
field_headers
表头控制
0~3,见第 08 节
row_total_depth
行方向总计
0~2 和 -1、-2,见第 08 节
row_sort_order
行排序
正数升序,负数降序
col_total_depth
列方向总计
同 row_total_depth
col_sort_order
列排序
同 row_sort_order
filter_array
公式内筛选
一组 TRUE/FALSE
relative_to
百分比的分母
配合 PERCENTOF 用

一个提前剧透的细节:排序和总计是"行、列各一套"——想让行按值降序、列照常排,就只动 row_sort_order,这正是它比想象中灵活的地方。

06 聚合随便换:从 SUM 到去重计数

function 参数直接写裸函数名,不带括号:SUM、AVERAGE、MAX、COUNT……换一个词,换一种口径,同一个"华东 × 手机"的结果立刻不同:

聚合函数
华东 × 手机结果
含义
SUM
37500
三季度销售额合计
AVERAGE
12500
季度平均销售额
MAX
13000
单季度最高销售额
COUNT
3
明细行数(订单数)

真正拉开差距的是自定义 LAMBDA——很多透视表做起来费劲的口径,这里一个公式搞定。

去重计数(透视表要勾"添加到数据模型"才能做的 Distinct Count):

=PIVOTBY(A2:A13, B2:B13, C2:C13, LAMBDA(x, ROWS(UNIQUE(x))))

数值区域换成季度列,统计每个组合出现在几个季度——3。

聚合文本(以前在 Excel 里几乎不可能的事):

=PIVOTBY(A2:A13, B2:B13, C2:C13,
         LAMBDA(x, ARRAYTOTEXT(SORT(UNIQUE(x)))))

每个格子直接列出该组合覆盖的季度:Q1, Q2, Q3。

07 多级分组:HSTACK 拼出"区域-产品"双层行

行字段传两列,就得到两级分组。用 HSTACK 把区域和产品拼起来,选区记得带上表头,field_headers 写 3,row_total_depth 写 2 打开小计:

=PIVOTBY(HSTACK(A1:A13, B1:B13), C1:C13, D1:D13, SUM, 3, 2)
区域
产品
Q1
Q2
Q3
总计
华东
电脑
8000
7500
8200
23700
华东
手机
12000
13000
12500
37500
华东
小计
20000
20500
20700
61200
华南
电脑
15000
16000
15500
46500
华南
手机
9000
11000
9500
29500
华南
小计
24000
27000
25000
76000
总计
44000
47500
45700
137200

多级行 + 小计 + 总计,一条公式全出来了——这就是以前透视表"拖三个字段进行区域,再开小计"的效果。

08 精装修四件套:表头、总计、排序、筛选

8.1 field_headers:表头控制

值
含义
0
数据没有表头
1
有表头,但结果里不显示
2
没有表头,但自动生成显示
3
有表头,并且显示

省略时是"自动猜":第一个值是文本、第二个是数字,就默认你有表头。正式报表建议显式指定——推荐用法是选区包含表头 + 写 3(如第 07 节示例)。

8.2 row_total_depth / col_total_depth:总计控制

值
含义
0
不要任何总计
1
总计
2
总计 + 小计(字段至少 2 列)
-1
总计放在最上面
-2
总计 + 小计都放最上面

行、列各自独立设置。比如"列要总计、行不要":

=PIVOTBY(A2:A13, C2:C13, D2:D13, SUM, , 0, , 1)

总计行放表格顶部(很多领导偏好的样式):

=PIVOTBY(A2:A13, C2:C13, D2:D13, SUM, , -1, , -1)

8.3 row_sort_order / col_sort_order:排序

排序序号的规则要记住:序号先数行(列)字段,接着数值列。本例 1 个行字段 + 1 个数值列,所以 1 = 区域、2 = 销售额——负数降序:

=PIVOTBY(A2:A13, C2:C13, D2:D13, SUM, , , -2)

行按汇总值从大到小:华南(76000)排到华东(61200)前面。想做"业绩榜",就靠这个 -2。

列同理,比如季度倒着排(Q3、Q2、Q1):

=PIVOTBY(A2:A13, C2:C13, D2:D13, SUM, , , , -1)

8.4 filter_array:公式内筛选

第 10 个参数是一个 TRUE/FALSE 数组,长度和源数据行数一致,TRUE 的行才参与汇总。只汇总手机:

=PIVOTBY(A2:A13, B2:B13, D2:D13, SUM, , , , , , B2:B13="手机")

只看单笔一万元以上的明细:

=PIVOTBY(A2:A13, B2:B13, D2:D13, SUM, , , , , , D2:D13>=10000)

注意公式里那一串连续逗号——中间不用的可选参数必须留空位占着,从 SUM 数过去第 6 个逗号后面才是 filter_array。这是新手最容易写错的地方。

09 百分比报表:PERCENTOF 与 relative_to

配套新函数 PERCENTOF 专做占比:PERCENTOF(子集, 全集) = 子集求和 ÷ 全集求和。直接当聚合函数用:

=PIVOTBY(A2:A13, B2:B13, D2:D13, PERCENTOF, , 0, , 0)

(总计关掉,输出更清爽)每个格子自动变成占所在列总计的比重:

手机
电脑
华东
55.97%
33.76%
华南
44.03%
66.24%

想换"分母",调 relative_to:

值
分母是什么
0
各列总计(默认)
1
各行总计
2
总计
3
父级列总计(多级字段用)
4
父级行总计

写自己的双参数 LAMBDA 时按这个模式来:LAMBDA(subset, totalset, SUM(subset)/SUM(totalset))——百分比口径就完全由你定义。

10 三种方案对比:PIVOTBY / 透视表 / SUMIFS

维度
PIVOTBY
数据透视表
SUMIFS 矩阵
上手方式
一条公式
插入 + 拖字段
写一堆公式
源数据变化
立即自动更新
要手动刷新
自动更新
新增分类
自动"长"出来
刷新后长出来
手动补行补列
结果被引用
溢出区域直接引用
GETPIVOTDATA 较绕
可以但维护累
去重计数
LAMBDA 一句话
需数据模型
很难
交互探索(切片器/钻取)
无
强
无
自带格式
无
有
手动
版本要求
M365 / 新版
全版本
全版本

选型建议:固定格式的月报、Dashboard、要喂图表的数据源 → PIVOTBY;给自己或领导做交互式探索分析 → 透视表;表格要发给用旧版 Excel 的同事 → 老老实实 SUMIFS,或者直接发 PDF。

顺带认识它的姊妹函数 GROUPBY:=GROUPBY(A2:A13, D2:D13, SUM)——只按行分组汇总,没有列维度。逻辑和 PIVOTBY 完全一致,参数还少几个,做一维汇总用它更轻。

11 避坑清单(建议截图)

  1. 公式返回 #NAME? → 版本不支持,用第 02 节的方法自检;
  2. function 参数写 SUM,不是 SUM()——裸函数名,带括号会先被求值成 0,直接报错;
  3. #SPILL!
     → 结果区右下方有单元格挡路,清空溢出区域再回车;
  4. #VALUE!
     → 行字段、列字段、数值三个区域行数不一致;filter_array 的长度也必须等于源数据行数;
  5. field_headers 的"自动"是靠猜的,正式报表显式写 0/1/2/3;
  6. 中间不用的可选参数要留逗号占位,别把 filter_array 写到排序的位置上;
  7. 它不是透视表:没有样式、没有切片器——汇报用够炫,探索分析还是透视表。

12 终极速查表

需求
写法
行列交叉求和
=PIVOTBY(行, 列, 值, SUM)
换口径
function 换 AVERAGE / MAX / COUNT
去重计数
LAMBDA(x, ROWS(UNIQUE(x)))
文本合并聚合
LAMBDA(x, ARRAYTOTEXT(SORT(UNIQUE(x))))
多级行字段
HSTACK(列1, 列2)
 + field_headers=3
行/列总计
row/col_total_depth:0 关、1 总计、2 加小计、-1 顶部
按汇总值降序
row_sort_order=-2(1 个行字段 + 1 个值列时)
公式内筛选
第 10 参 filter_array:B2:B13="手机"
百分比矩阵
function=PERCENTOF,分母调 relative_to
只要一维汇总
改用 =GROUPBY(行, 值, SUM)
新增数据自动纳入
源数据 Ctrl+T 转表格,用结构化引用

最后补一个压箱底技巧:把源数据 Ctrl+T 转成智能表格(比如命名"销售表"),公式改成结构化引用:

=PIVOTBY(销售表[区域], 销售表[产品], 销售表[销售额], SUM)

以后每天往表里追加新行,汇总表自动扩展、自动重算——配一个引用溢出区域(=F2#)的图表,就是一张零维护的迷你 Dashboard。

写在最后

透视表代表的是"手动建模"时代的交互智慧,PIVOTBY 代表的是"公式即报表"的新思路——数据始终是活的,报表始终是最新的。

现在打开你的 Excel,输入 =PIVOTBY(,用最近一张明细表试跑第一条公式。

如果这篇对你有帮助,点个「赞」和「在看」;也欢迎转发给那个每次交报表前都在狂点"刷新"的同事——这可能是你今天对他最大的帮助。

相关学习资料