REDUCE 函数¶
函数概述¶
REDUCE 用于把一组值逐个“累积”成一个结果。它会从你指定的初始值开始,按顺序取数组中的每个元素,反复调用你提供的 LAMBDA 进行合并,最终返回一个值(也可以是一个数组)。
你可以把它理解为:
“从 initial_value 出发,对 array 里的每个元素做一次‘累计运算’,最后得到总结果”。
典型应用:
- 求和、求积、累计计数等聚合运算
- 把多列/多表结果逐步合并
- 生成自定义的累计数组(如逐步拼接、逐步叠加)
基础语法¶
参数说明¶
| 参数 | 必填 | 含义 | 说明 |
|---|---|---|---|
| initial_value | 是 | 初始累积值 | 第一次计算时的“起点”,类型可为数字/文本/数组 |
| array | 是 | 要遍历的数组 | 可以是一列/一行/多行多列;遍历顺序按列展开(从左到右、从上到下) |
| lambda | 是 | 累积规则 | 形如 LAMBDA(acc, value, ...),每步返回新的 acc |
lambda通常写成:LAMBDA(acc, cur, <返回新的acc>)其中acc是累计结果,cur是当前元素。
基础用法示范¶
下面示例均可直接套用,你只需要把数据区域替换成自己的范围即可。
1)对一列求和¶
数据源示例(任意一列数字):
| 数值 |
|---|
| 10 |
| 20 |
| 30 |
公式:
结果:60
2)对一列求积¶
说明:初始值用 1 更符合“乘法单位元”的语义。
3)统计满足条件的个数¶
数据源示例:
| 分数 |
|---|
| 58 |
| 76 |
| 90 |
| 61 |
需求:统计 >=60 的人数
说明:(cur>=60) 会返回 TRUE/FALSE,在运算中会被当作 1/0 累加。
4)把文本逐个拼接¶
数据源示例:
| 名称 |
|---|
| 苹果 |
| 香蕉 |
| 梨 |
需求:用 、 连接成一句话
结果:苹果、香蕉、梨
5)对二维区域做累计¶
数据源示例(2×3):
| A | B | C |
|---|---|---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
需求:把整个区域求和
说明:REDUCE 会把二维区域按顺序展开遍历后累加。
6)生成“累计结果数组”¶
REDUCE 不仅能输出单个值,也可以让 acc 变成一个“会增长的数组”,从而得到一串累计结果。
数据源示例:
| 数值 |
|---|
| 5 |
| 8 |
| 2 |
需求:得到累计和序列:5, 13, 15
思路说明:
acc维护一列累计结果(用VSTACK逐步往下叠)TAKE(acc,-1)取最后一个累计值,再加上当前值- 最开始放了一个
0,所以用DROP(...,1)把首行去掉
总结¶
REDUCE的核心是“初始值 + 遍历数组 + LAMBDA累计规则”。lambda每一步都要返回新的累计值acc,最终REDUCE返回最后一次的acc。- 不仅能做聚合(求和/计数/拼接),还可以把
acc设计成数组,实现“生成累计序列”等更灵活的效果。