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]
)
=PIVOTBY(
B2:B12,
C2:C12,
E2:E12,
AVERAGE
)
PIVOTBY的第5参数表示数据源否有表头,可以根据实际需要进行设置,一共有4种类型。0表示没有且不生成表头;1表示有表头,但不显示。2表示没有表头,但需要生成默认表头。3表示有表头且显示。
我们将上述公式中的第5参数设置为2,表示数据源没有表头,但需要生成默认,返回结果如下:
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,AVERAGE,
2
)
将上述公式中的第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
)
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,AVERAGE,,0,,0,2,
B2:B40="西林实验学校"
)
打个响指,接下来重点说一下PivotBy函数的第4参数:聚合方式。
这个参数的类型是function。在之前的教程里我们讲过,但凡参数类型是function的,都不是什么温柔的好东西,它会十分强大,也会万分复杂。
Powerful and Complex, Make sense?
这个参数的特点和GroupBy函数类似——事实上,就像在会员群里一直说的,这俩函数整体都很相似,学会其中一个,另外一个也就触类旁通了。骗你娶你,不论男↓女↑
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,
AVERAGE,
,0,,0
)
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,
LAMBDA(v,AVERAGE(v)),
,0,,0
)
换而言之,第一个公式里的AVERAGE是LAMBDA(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函数聚合成一个字符串。
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,
HSTACK(AVERAGE,MAX),
,0,,0
)
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,
VSTACK(
HSTACK(AVERAGE,MAX),
{"平均分","最高分"}
),
,0,,0
)
=PIVOTBY(
B2:B40,C2:C40,
E2:E40,
HSTACK(
VSTACK(AVERAGE,MAX),
{"平均分";"最高分"}
),
,0,,0
)
这就是第3参数的第2个特点,它的结果可以是由多个内置的lambda表达式的聚合元素构成的数组,数组的矢量方向将决定结果是按行还是按列展开。
……
打个响指,看我真诚的小眼神,本期推文只是给大家简单介绍下PIVOTBY函数的基本用法、参数作用和第4参数的主要规则,更多典型的案例欢迎持续关注我们。有什么问题照例可以在VIP会员微信群中提问交流。
下期再见,挥手,拜拜。
扩展阅读