官方文档

层次坐标

复杂报表层次坐标:当前行、上一行、去年同月、条件筛选、累计和排名。

纵向或横向扩展之后,设计器里的一个格子会变成许多行(或许多列)。层次坐标用来在这些扩展结果里定位:当前行、上一行、去年同一月,或「同一年内到本月为止的全部金额」。完整做表步骤见 同比环比等财务统计表。

1. 先分清三种格子

角色扩展方向左主格例子
分组主格纵向扩展无,或指向更左边的主格A3 年份,B3 月份且左主格为 A3
跟随格不扩展自定义,填它要跟着的主格销售额 D3 左主格 B3。公式格同样指向 B3
公式格不扩展与它要「按行对齐」的那个主格相同环比 E3 左主格 B3

数据集查询请按主格顺序排好,例如 ORDER BY 年份, 月份。否则「上一个月」会指到错误的行。

2. 条件里的左右两边

写成 D3[]{A3==A3 && B3<=B3} 时:

  • 花括号里左边的单元格,是正在被筛选的那一行。
  • 右边的单元格,是公式自己所在的这一行。

所以 A3==A3 是「候选行的年份等于当前行的年份」,B3<=B3 是「候选行的月份小于等于当前行的月份」。多个条件用 && 连接。

3. 常用写法

写法含义示例
单元格[]该格扩展后的全部值SUM(D3[]) 全部销售额
单元格[]{条件}全部值里,满足条件的那些SUM(D3[]{A3==A3}) 当年合计
单元格[主格:-0]当前这个主格对应的值。金额列设了千分位时,除法用这个写法取原始数字D3[B3:-0] 本月销售额
单元格[主格:-1]同一主格序列里的上一个。月份连续、且按月排序时,就是上一个月D3[B3:-1] 上月销售额
单元格[主格:-1]{条件}先按主格位移,再用条件收成一行D3[A3:-1]{B3==B3} 去年同一月份
单元格[主格:1]绝对位置,从 1 开始,1 是第一个D3[B3:1] 该序列第一个月
单元格[主格:!-1]从后往前数,!-1 是最后一个D3[B3:!-1]

:-1 会跨过年份,只要月份主格在数据里是连续排下来的。每年 1 月若不能用上一年的 12 月,必须先判断月份,再取上一格:

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

第一年没有「上一年」。先判断年份,再写 [A3:-1]。不要在条件不成立时仍去取不存在的坐标,否则这一格算不出来,整次预览会失败。

4. 四个常用口径

下面都假设 A3 是年份,B3 是月份,D3 是销售额,且公式格的左主格是 B3。

口径公式说明
月份环比if (B3 == 1) { null } else { D3[B3:-0] / D3[B3:-1] }本月 ÷ 上月。1 月为空,不跨年。格式用百分比。
年份同比if (A3 == 2010) { null } else { D3[B3:-0] / D3[A3:-1]{B3==B3} }本月 ÷ 去年同月。{B3==B3} 把上一年的 12 个月收成与当前月份相同的那一个。第一年为空。
占当年比重D3[B3:-0] / SUM(D3[]{A3==A3})本月 ÷ 当年合计。格式用百分比 0%。
年内累计SUM(D3[]{A3==A3 && B3<=B3})同一年里,月份小于等于本月的金额之和。
年内排名COUNT(D3[]{A3==A3 && D3>D3[B3:-0]}) + 1同年里比本月更大的个数,再加 1。最大为 1。
全部排名COUNT(D3[]{D3>D3[B3:-0]}) + 1所有月份里比本月更大的个数,再加 1。

5. 设计时注意

  • 公式格不要再设成纵向扩展,否则每个公式会自己再展开一套,行对不齐。
  • 隐藏列(例如只给公式用的月份数字)仍占设计上的一列。标题合并时按全部列合并即可,预览会按可见列对齐。
  • 分组排名不要给 SORT 再加第四个参数。用上面的 COUNT。