1. 概述
注:11.0.4 及以后版本用户推荐使用 ACCSUM 函数实现跨层累计。
1.1 应用场景
跨层累计:不按分组进行累计,而是按照从上到下的顺序一直求累加和。
例如下图示例,对 2010 - 2011 年进行跨层累计。
1.2 实现思路
通过公式 IF(&B2 > 1, C2 + D2[B2:-1], C2 + D2[A2:-1,B2:!-1]) 进行跨层累计。
2. 示例
2.1 数据准备
新建普通报表,新建数据查询 ds1 ,SQL语句为:
SELECT STRFTIME('%Y',订购日期) AS 年份,STRFTIME('%m',订购日期) AS 月份,应付金额
FROM 订单
WHERE STRFTIME('%Y',订购日期) IN ('2010','2011')
2.2 报表设计
如下图设计表格,将 ds1 中的字段拖到 A2、B2、C2 ,D3 单元格用于计算跨层累计数据。
D3 单元格公式为:IF(&B2 > 1, C2 + D2[B2:-1], C2 + D2[A2:-1,B2:!-1]),公式拆解后的说明如下表所示:
公式拆解 | 说明 |
---|---|
IF(A, B, C) | 条件表达式,如果A为真,返回B,否则,返回C |
&B2 > 1 | 条件表达式一部分,判断月份是不是第一个月 |
D2[B2:-1] | 求上一次累计结果,即上一个 B2(上月)对应的 D2 的值 |
D2[A2:-1, B2:!-1] | 求上一组最后一个累计结果,即上一个 A2(上一年)中 B2 扩展出来的最后一个对应的 D2 的值 |
IF(&B2 > 1, C2 + D2[B2:-1], C2 + D2[A2:-1,B2:!-1]) | 如果 &B2>1,从第二月开始,求上一次累计结果加该月金额;如果 B2 为第一个月,求上一组最后一个累计结果加上当前月的金额 |
2.3 效果预览
保存模板,点击分页预览,如下图所示:
支持 App 端和 HTML5 端预览,效果如下图所示:
3. 模板下载
点击下载模板:跨层累计.cpt