官方文档

表达式

复杂报表表达式:运算、比较、if 分支,以及怎么写进单元格。

表达式是单元格公式里除函数名以外的运算:引用格子、加减乘除、比较大小、按条件分支。函数列表见 函数汇总。按扩展后的行取「上一行、去年同月」见 层次坐标。

1. 表达式做什么

数据集只提供原始数字和分组。比值、差额、空值、以及「满足条件才计算」,都写在表达式里,预览时按每一行扩展结果计算。

  • 引用:D3 取与当前行对应的 D3。
  • 计算:D3 / 1000、D3 - E3。
  • 判断:B3 == 1、D3 > 0。
  • 分支:某月没有对比值时显示空白,其它月才做除法。

2. 怎么写进单元格

  1. 单击目标单元格。
  2. 公式栏输入,第一个字符是 =。等号后面不要再写一个等号。
  3. 右侧 单元格属性 → 基本 确认扩展方向。跟在扩展行后面计算的格子选不扩展,左主格选自定义并填它所跟随的扩展格。
  4. 需要百分比或千分位时,在同一页的 格式、格式模式 里设置。格式不代替公式。
  5. 保存,分页预览。

也可以点公式栏左侧 fx 打开编辑器。编辑器里保存的内容同样是表达式,单元格上会带上等号。

3. 支持的写法

3.1 常数和字符串

写法含义示例
整数、小数数字1、2010、0.5
双引号文字字符串。用英文双引号。"月份"
null空。预览为空白,不是 0。if (B3 == 1) { null } else { D3 }
true / false逻辑值ORDER(D3[], true)

3.2 算术

符号含义示例
+ -加、减D3 - E3
* /乘、除D3 / E3
%余数B3 % 2
( )先算括号里(D3 - E3) / E3

除数不能为 0。没有上月、没有去年时,先用 if 留空,不要直接做除法。

环比、同比若要显示成 170%、2470% 这种「本月 ÷ 对比月」,公式只写除法,单元格格式用百分比 0%。这不是「增长了百分之几」。(增长额再除以对比月,公式才是 (本月 - 对比月) / 对比月。)

3.3 比较和逻辑

符号含义
==相等。数字 1 和整数 1 视为相等。
!=不相等
> >= < <=大于、大于等于、小于、小于等于
&&并且。也可写 and。
||或者。也可写 or。用在 if 的条件里。

层次坐标花括号里的多个条件请用 && 连接,例如 D3[]{A3==A3 && B3<=B3}。

3.4 条件分支

没有名为 IF 的函数。分支写成:

if (条件) { 结果 } else { 结果 }

可以继续写 else if:

if (B3 == 1) {
  null
} else if (B3 == 2) {
  "二月"
} else {
  B3
}

也可以写成一行三元形式:条件 ? 结果1 : 结果2。例如 B3 == 1 ? null : D3 / D3[B3:-1]。分支较多时用 if 更清楚。

4. 示例

4.1 差额

E3 为预算,D3 为实际,差额格:

=D3 - E3

4.2 1 月留空,其它月做除法

=if (B3 == 1) { null } else { D3[B3:-0] / D3[B3:-1] }

D3[B3:-0] 是当前月金额,D3[B3:-1] 是上一个月。写法说明见层次坐标。

4.3 拼接显示文字

=CONCAT(B3, "月份")

月份数字 1 显示成「1月份」。

4.4 当年合计

=SUM(D3[]{A3==A3})

只把年份等于当前行年份的销售额加在一起。

5. 常见问题

预览是公式原文,没有算出数。 公式栏必须以 = 开头。只有等号、后面是空的,也不会计算。

每一行都是同一个数,或除法是 0%。 计算格要设成不扩展,左主格指向当前行的扩展格。金额列如果用了千分位,除法里用 D3[B3:-0],不要直接除已格式化的 D3。

1 月或第一年预览报错、整表不出数。 上一格或上一年不存在时,不要先写 D3[B3:-1] 或 D3[A3:-1]。用 if 先判断月份或年份,条件成立时再取坐标。