一个公式搞定多维汇总,还能自动更新,Office 365和WPS用户有福了
做数据分析时,你是不是也经常遇到这样的尴尬:用Sumifs函数写了一大串公式,结果发现行字段一变就得重写;改用数据透视表吧,确实方便,但每次源数据更新,还得手动点一下“刷新”,一不小心就忘了,汇报时数据对不上,那叫一个尴尬。
最近,Excel和WPS新增了一个叫 PIVOTBY 的函数,或许能帮你告别这些烦恼。
它到底是什么?
简单来说,PIVOTBY 就是一个“长了脑子的”数据透视表函数。它既有数据透视表那种拖拽汇总的便捷,又保留了函数公式自动更新的优势。它跟之前介绍的 GROUPBY 函数是“亲兄弟”,只不过 GROUPBY 只能按行分组,而 PIVOTBY 支持按行和列两个维度同时分组,功能更强大。
它的参数看着有11个之多,但其实只要抓住核心,理解起来并不难。我们可以把它想象成一个数据透视表的“三缺一”牌局,等着你下注:
=PIVOTBY(行字段, 列字段, 值字段, 汇总方式, [其他可选参数...])
前四个是必选参数,正好对应数据透视表的四个区域:* 行字段:你想让哪些项目显示在行上(比如“产品类别”)。
列字段:你想让哪些项目显示在列上(比如“销售日期”)。
值字段:你要汇总计算的数据是哪一列(比如“销售额”)。
汇总方式:你要怎么算,求和用
SUM,计数用COUNTA,平均值用AVERAGE。
后面的可选参数,可以帮你搞定是否显示总计、小计、排序、筛选等需求,就像数据透视表里的那些设置选项。
案例数据准备
假设我们有一张 2026年Q1销售订单表(共20行),字段如下:
| A(订单号) | B(日期) | C(大区) | D(销售员) | E(产品) | F(金额) |
|---|---|---|---|---|---|
| 1001 | 2026/1/5 | 华东 | 张伟 | 手机 | 3200 |
| 1002 | 2026/1/8 | 华南 | 李娜 | 电脑 | 5800 |
| 1003 | 2026/1/12 | 华东 | 王强 | 平板 | 2100 |
| 1004 | 2026/1/15 | 华北 | 赵敏 | 手机 | 2800 |
| 1005 | 2026/1/20 | 华南 | 陈晨 | 电脑 | 6200 |
| 1006 | 2026/2/2 | 华东 | 张伟 | 平板 | 2300 |
| 1007 | 2026/2/5 | 华北 | 赵敏 | 手机 | 3000 |
| 1008 | 2026/2/10 | 华南 | 李娜 | 手机 | 3400 |
| 1009 | 2026/2/14 | 华东 | 王强 | 电脑 | 5400 |
| 1010 | 2026/2/18 | 华北 | 刘洋 | 平板 | 1900 |
| 1011 | 2026/2/22 | 华南 | 陈晨 | 电脑 | 6700 |
| 1012 | 2026/3/1 | 华东 | 张伟 | 手机 | 3100 |
| 1013 | 2026/3/5 | 华南 | 李娜 | 平板 | 2500 |
| 1014 | 2026/3/8 | 华北 | 赵敏 | 电脑 | 5200 |
| 1015 | 2026/3/12 | 华东 | 王强 | 手机 | 2900 |
| 1016 | 2026/3/15 | 华南 | 陈晨 | 平板 | 2200 |
| 1017 | 2026/3/18 | 华北 | 刘洋 | 电脑 | 4900 |
| 1018 | 2026/3/20 | 华东 | 张伟 | 电脑 | 5600 |
| 1019 | 2026/3/22 | 华南 | 李娜 | 手机 | 3600 |
| 1020 | 2026/3/25 | 华北 | 赵敏 | 平板 | 2700 |
案例一:基础二维汇总(按大区×产品汇总金额)
需求:按“大区”为行、“产品”为列,统计各区域的每种产品销售额合计。
公式:=PIVOTBY(C2:C21, E2:E21, F2:F21, SUM)
参数拆解:
行字段 →
C2:C21(大区)列字段 →
E2:E21(产品)值字段 →
F2:F21(金额)汇总方式 →
SUM(求和)
返回结果:
| 大区 | 手机 | 电脑 | 平板 | 总计 |
|---|---|---|---|---|
| 华东 | 9200 | 16800 | 4400 | 30400 |
| 华南 | 7000 | 18700 | 4700 | 30400 |
| 华北 | 5800 | 10100 | 4600 | 20500 |
| 总计 | 22000 | 45600 | 13700 | 81300 |
💡 亮点:源数据新增一行后,结果自动更新,无需手动刷新。
案例二:带总计和小计(按大区汇总,内部按销售员细分)
需求:行上先按“大区”分组,再按“销售员”细分;列上按“产品”展开;显示行总计,不显示列总计。
公式:
=PIVOTBY(C2:C21, E2:E21, F2:F21, SUM, 1, 0)
参数拆解:
第5个参数
1→ 显示行总计(每个大区的小计 + 整体总计)第6个参数
0→ 不显示列总计
返回结果:
| 大区 | 销售员 | 手机 | 电脑 | 平板 | 总计 |
|---|---|---|---|---|---|
| 华东 | 张伟 | 6300 | 5600 | 2300 | 14200 |
| 华东 | 王强 | 2900 | 5400 | 2100 | 10400 |
| 华东 | 小计 | 9200 | 11000 | 4400 | 24600 |
| 华北 | 赵敏 | 5800 | 5200 | 2700 | 13700 |
| 华北 | 刘洋 | 0 | 4900 | 1900 | 6800 |
| 华北 | 小计 | 5800 | 10100 | 4600 | 20500 |
| 华南 | 李娜 | 7000 | 5800 | 2500 | 15300 |
| 华南 | 陈晨 | 0 | 12900 | 2200 | 15100 |
| 华南 | 小计 | 7000 | 18700 | 4700 | 30400 |
| 总计 | 22000 | 39800 | 13700 | 75500 |
⚠️ 注意:行总计是先汇总每个大区内部,再汇总整体。
案例三:自定义行排序(按指定顺序排列大区)
需求:大区不按字母顺序,而是按 “华北 → 华东 → 华南” 的顺序显示。
公式:=PIVOTBY( HSTACK(MATCH(C2:C21, {"华北","华东","华南"}, 0), C2:C21), E2:E21, F2:F21, SUM, 1, 0)
参数拆解:
用
MATCH将每个大区转换成它在自定义列表中的位置序号(华北=1,华东=2,华南=3)用
HSTACK把序号和原大区名称拼在一起作为新的“行字段”PIVOTBY会先按序号排序,结果显示时自然就按自定义顺序排列了
返回结果(大区行按指定顺序):
| 大区 | 手机 | 电脑 | 平板 | 总计 |
|---|---|---|---|---|
| 华北 | 5800 | 10100 | 4600 | 20500 |
| 华东 | 9200 | 16800 | 4400 | 30400 |
| 华南 | 7000 | 18700 | 4700 | 30400 |
| 总计 | 22000 | 45600 | 13700 | 81300 |
案例四:二维表转一维明细表(逆透视)
需求:如果你的源数据本身就是一张二维表(行=销售员,列=产品,值=金额),想把它转换成一维表(销售员、产品、金额三列),方便后续用筛选器或做图表。
源数据(二维表):
| 销售员 | 手机 | 电脑 | 平板 |
|---|---|---|---|
| 张伟 | 6300 | 5600 | 2300 |
| 李娜 | 7000 | 5800 | 2500 |
| 王强 | 2900 | 5400 | 2100 |
公式:=PIVOTBY( A2:A4, , B2:D4, IF({1,0}, N, TOCOL(B1:D1)), , 0, , 0)
参数拆解(这里用得比较巧妙):
行字段 →
A2:A4(销售员)列字段 → 留空(
,占位)值字段 →
B2:D4(整个数值区域)汇总方式 →
IF({1,0}, N, TOCOL(B1:D1)),这个结构的作用是动态构造表头:N代表数值本身(即金额)TOCOL(B1:D1)把三个产品名称按列方向展开成一列IF({1,0}, ...)把这两列拼在一起,相当于告诉函数:结果要有两列,第一列放数值,第二列放对应的产品名称第6个参数
0→ 不显示总计第8个参数
0→ 不显示行小计
返回结果:
| 销售员 | 金额 | 产品 |
|---|---|---|
| 张伟 | 6300 | 手机 |
| 张伟 | 5600 | 电脑 |
| 张伟 | 2300 | 平板 |
| 李娜 | 7000 | 手机 |
| 李娜 | 5800 | 电脑 |
| 李娜 | 2500 | 平板 |
| 王强 | 2900 | 手机 |
| 王强 | 5400 | 电脑 |
| 王强 | 2100 | 平板 |
💡 这就是俗称的“逆透视”或“取消透视”,在Power Query里需要点好几下,用
PIVOTBY一个公式搞定,而且数据变了自动刷新。
案例五:多条件筛选(只汇总“手机”和“电脑”两类产品)
需求:只想看“手机”和“电脑”的汇总数据,过滤掉“平板”。
公式:=PIVOTBY( C2:C21, E2:E21, F2:F21, SUM, 1, 0, , E2:E21="手机")
(或把条件写成 E2:E21="手机" 配合 OR 逻辑,但 PIVOTBY 的筛选参数支持数组条件,可以用 (E2:E21="手机")+(E2:E21="电脑"))
更严谨的写法:
=PIVOTBY( C2:C21, E2:E21, F2:F21, SUM, 1, 0, , (E2:E21="手机")+(E2:E21="电脑"))
参数拆解:
第8个参数(筛选条件)→
(E2:E21="手机")+(E2:E21="电脑"),+在这里相当于“或”逻辑,只要满足任一条件即为TRUE
返回结果(只有手机和电脑,平板被过滤掉):
| 大区 | 手机 | 电脑 | 总计 |
|---|---|---|---|
| 华东 | 9200 | 16800 | 26000 |
| 华南 | 7000 | 18700 | 25700 |
| 华北 | 5800 | 10100 | 15900 |
| 总计 | 22000 | 45600 | 67600 |
案例对比:PIVOTBY vs 传统数据透视表
| 对比维度 | PIVOTBY | 传统数据透视表 |
|---|---|---|
| 数据更新 | 自动刷新(公式随源数据变化) | 需手动右键刷新 |
| 排序灵活性 | 可自定义任意顺序(结合MATCH) | 仅支持升序/降序 |
| 与其他函数联动 | 可作为中间结果嵌套在其他公式中 | 无法被其他公式直接引用 |
| 学习门槛 | 参数较多,需理解数组运算 | 拖拽操作,对新手友好 |
| 复杂百分比计算 | 暂不支持(如“行汇总百分比”) | 支持多种值显示方式 |
| 适用版本 | Office 365 / Excel 2021 / WPS最新版 | 所有Excel版本 |
操作提示
版本检查:在Excel中输入
=PIVOTBY(,如果没有智能提示,说明你的版本不支持(需Office 365或WPS最新版)。参数顺序别记错:前四个必选(行、列、值、汇总方式),后面的可选参数建议用逗号占位,比如要写筛选条件时,前面几个不用的参数要写
,,,来占位。错误排查:如果结果出现
#VALUE!,检查行、列、值三个区域的行数是否一致;如果出现#NAME?,说明函数名不被识别。动态数据源:建议把数据区域定义为表格(Ctrl+T),然后用表名称引用(如
表1[金额]),这样新增行时公式会自动扩展,比固定区域更方便。
写在最后
PIVOTBY 函数的出现,让我们在“数据透视表”和“函数公式”之间找到了一个很好的平衡点。它不仅保留了透视分析的功能,还具备了公式的实时动态性和与其他函数组合的灵活性。
当然,目前它还不能完全替代经典的数据透视表,比如一些“值显示方式”的复杂百分比计算,可能还依赖传统透视表来完成。但对于大多数日常的交叉汇总、动态报表需求来说,PIVOTBY 是一个值得上手的新工具。如果你用的是最新版的Office 365或WPS,不妨打开Excel试一下。
夜雨聆风