表达式
复杂报表表达式:运算、比较、if 分支,以及怎么写进单元格。
表达式是单元格公式里除函数名以外的运算:引用格子、加减乘除、比较大小、按条件分支。函数列表见 函数汇总。按扩展后的行取「上一行、去年同月」见 层次坐标。
1. 表达式做什么
数据集只提供原始数字和分组。比值、差额、空值、以及「满足条件才计算」,都写在表达式里,预览时按每一行扩展结果计算。
- 引用:
D3取与当前行对应的 D3。 - 计算:
D3 / 1000、D3 - E3。 - 判断:
B3 == 1、D3 > 0。 - 分支:某月没有对比值时显示空白,其它月才做除法。
2. 怎么写进单元格
- 单击目标单元格。
- 公式栏输入,第一个字符是
=。等号后面不要再写一个等号。 - 右侧 单元格属性 → 基本 确认扩展方向。跟在扩展行后面计算的格子选不扩展,左主格选自定义并填它所跟随的扩展格。
- 需要百分比或千分位时,在同一页的 格式、格式模式 里设置。格式不代替公式。
- 保存,分页预览。
也可以点公式栏左侧 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 先判断月份或年份,条件成立时再取坐标。
