新函数PIVOTBY启动,用函数创建透视表样式的报表~

职场   2025-01-07 07:54   福建  
菜单→教程合集✔领取海量学习教程👆
HI,大家好,我是星光。

如你所知,Excel功能众多,包含了基操/函数/透视表/图表/VBA/SQL/PowerQuery/PowerPivot等,随着版本迭代甚至还包含了JS和Python,但在所有功能里,学习性价比最高的始终是...透视表~

它不需要一条函数公式,也不需要一行代码,只需要拖曳鼠标,就可以从不同角度聚合数据,快速制作完成不同类型的报表。


打个响指,今天给大家分享的内容是函数PivotBy——在英文里,透视表叫做Pivot Table,简称Pivot。由此及彼,望文生义,PivotBy是一个和透视表紧密相连的函数→_→它可以实现透视表的效果,按行/列字段对数据进行分组、聚合、排序和筛选等。

照例先来看下它的基本语法▼

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])

眼睛瞪的像铜铃~嚯,你没看错,它有11个参数……
o(╯□╰)o

不过这货就像上期给大家分享的GroupBy函数,虽然参数众多,但各参数的指向性都比较明确,常用且必需的是前4个参数。

举几个常用的套路性质的例子。

如下图所示,是一张成绩表。


1,行列交叉聚合


输入以下公式,可以统计各学校各班级的平均分,同时将学校作为行字段,班级作为列字段。

=PIVOTBY(  B2:B12,  C2:C12,  E2:E12,  AVERAGE)

PIVOTBY函数的第1参数指定分组的行字段,第2参数指定分组的列字段,第3参数指定值区域,第4参数指定聚合方式。

在本例中,我们需要统计各个学校(行字段是学校:B2:B12)各个班级(列字段是班级:C2:C12)的平均成绩(值区域是成绩列:E2:E12,聚合方式为平均值:AVRANGE)


2,表头设置


PIVOTBY的第5参数表示数据源否有表头,可以根据实际需要进行设置,一共有4种类型。0表示没有且不生成表头;1表示有表头,但不显示。2表示没有表头,但需要生成默认表头。3表示有表头且显示。


我们将上述公式中的第5参数设置为2,表示数据源没有表头,但需要生成默认,返回结果如下:


=PIVOTBY(  B2:B40,C2:C40,  E2:E40,AVERAGE,  2)

👆你看你看……这是不是乱七八糟的鸡窝头?所以这头啊不要也罢,是的,你完全可以忘记第5参数的存在。

Fuck head▼


3丨 总计与小计


PIVOTBY的第6参数和第8参数分别表示是否显示行和列的总计或小计,它有5种类型可选,如下图所示:



将上述公式中的第6/8参数设置为0,就可以取消显示行和列的总计。


=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  AVERAGE,  ,0,,0)



4丨 排序



对于分组聚合后的结果表,PIVOTBY函数的第7参数可以指定行字段的排序方式,第9参数可以指定列字段的排序方式。这俩参数都是用一个数字对应结果表中的列/行数,当数字为正数时表示升序,负数时表示降序。例如,数字1,表示对结果表中的第1列/行数据执行升序排序,数字-2,表示对结果表中第2列/行的数据执行降序排序。


以下公式将第7参数设置为-1,表示按结果表第1列的数据降序排序。



=PIVOTBY(  TEXT(A2:A40,"mm月"),B2:C40,  E2:E40,AVERAGE,  ,0,-1,0)


5,筛选


PivotBy函数的第10参数filter_array可以对数据源做筛选,它是一个由逻辑值构成的数组,尺寸大小需要和第1参数保持一致。

如果需要只计算西林实验学校各班级的平均分:


参考公式如下:
=PIVOTBY(  B2:B40,C2:C40,  E2:E40,AVERAGE,,0,,0,2,  B2:B40="西林实验学校")
~

打个响指,接下来重点说一下PivotBy函数的第4参数:聚合方式。


这个参数的类型是function。在之前的教程里我们讲过,但凡参数类型是function的,都不是什么温柔的好东西,它会十分强大,也会万分复杂。


Powerful and Complex, Make sense?


这个参数的特点和GroupBy函数类似——事实上,就像在会员群里一直说的,这俩函数整体都很相似,学会其中一个,另外一个也就触类旁通了。骗你娶你,不论男↓女↑


摊手,总结起来,这个第4参数主要有两个规则或者说特点。

首先,它有内置的LAMBDA表达式,存在一个默认的变量,指向分组后的每个值区域块。

其次,它的结果可以是由多个内置的lambda表达式聚合后的元素构成的矢量数组,数组的方向将决定结果是按行还是按列展开。

先说下第一个特点。

以下公式可以统计各学校各班级的平均分:

=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  AVERAGE,  ,0,,0)

第4参数指定了聚合方式为AVERAGE,这是一种语法糖(语法简写形式),完整的公式如下:

=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  LAMBDA(v,AVERAGE(v)),  ,0,,0)

换而言之,第一个公式里的AVERAGELAMBDA(v,AVERAGE(v))的简写形式。LAMBDA是PIVOTBY内置的一个匿名函数,它有一个默认的变量,指向分组后的每组值。这里设置其名为v(v的名字不是固定的,你可以自由选择,叫阿狗阿猫也行),然后使用AVERAGE函数对其聚合。


同样的道理,以下公式聚合各学校各班级不重复的学员名单


=PIVOTBY(  B2:B40,C2:C40,  D2:D40,  LAMBDA(v,TEXTJOIN(",",,UNIQUE(v))),  ,0,,0)

第4行公式,先使用unique函数对分组后的姓名去重,然后使用TEXTJOIN函数聚合成一个字符串。


……

然后说下第4参数的第2个特点。

还是举个例子。

假设不但需要统计各学校各班级的平均分,还需要统计最高分。


公式如下:
=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  HSTACK(AVERAGE,MAX),  ,0,,0)
公式的第3参数是HSTACK(AVERAGE,MAX),它包含了两种内置的lambda聚合函数语法糖,分别执行AVERAGE求平均值与MAX求最大值的聚合运算,最后使用HSTACK横向合并。由于它是横向合并的,返回的是一维水平数组,根据第2个规则,计算结果也是横向按列展开。

展开后的名字默认为英文AVERAGE/MAX,看起来有点奇怪,对此,我们可以做一个修改,改成中文名称平均分和最高分,参考公式如下:

=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  VSTACK(    HSTACK(AVERAGE,MAX),    {"平均分","最高分"}  ),  ,0,,0)


公式中使用VSTACK函数将聚合值{AVERAGE,MAX},和标题名{"平均分","最高分"}纵向合并,形成一个二维数组,二维数组的第一行被Excel读为值,第二行被读为标题。

——注意,常量数组中分隔符使用的是逗号,而不是分号,两者之间的区别,我们在「超详细拆解函数数组」里详细讲过了,希望你还有印象~

~

以上公式是将平均分和最高分横向多列展开,如果你需要纵向多行展开,只需要将多个lambda表达式聚合的元素纵向堆叠即可:


=PIVOTBY(  B2:B40,C2:C40,  E2:E40,  HSTACK(    VSTACK(AVERAGE,MAX),    {"平均分";"最高分"}  ),  ,0,,0)

这就是第3参数的第2个特点,它的结果可以是由多个内置的lambda表达式的聚合元素构成的数组,数组的矢量方向将决定结果是按行还是按列展开。


……


打个响指,看我真诚的小眼神,本期推文只是给大家简单介绍下PIVOTBY函数的基本用法、参数作用和第4参数的主要规则,更多典型的案例欢迎持续关注我们。有什么问题照例可以在VIP会员微信群中提问交流。


下期再见,挥手,拜拜。




需要系统学习Excel却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?

加入我的付费社群,学习+训练+答疑,与6000+在线会员一起,同微软&金山最有价值专家MVP&KVP同行,全面精进Excel之道

🚂>>~
超低价Excel终身会员:一次付费
永久迭代学习,学习问题永久答疑


扩展阅读



 Excel.VBA常用代码合集
 WPS.JSA宏代码应用案例合集
• 从Excel出发带你轻松学会SQL

本文由公众号“Excel星球”首发。
点击阅读原文系统学习Excel!

Excel星球
微软全球最有价值专家(Excel MVP),上千篇原创图文和视频教程随学随用,随用随查,建议常用Excel的职场人关注。
 最新文章