父子格与动态格间运算
父子格与格间运算
概述
父子格和格间运算是FR报表中非常重要的功能,常用于:
- 计算同环比
- 计算排名
- 处理层级数据结构
父子格
父子格与层级关系单元格扩展相关,主要用于展示类似"大类包含小类"的层级数据结构。虽然基本用法不复杂,但这是FR报表中非常重要的内容。
格间运算
格间运算主要用于解决以下问题:
-
跨行运算
- 引用上一行数据
- 典型应用:累计比和环比
-
跨组运算
- 同期比等跨组计算
-
集合运算
- 取第一名、算累计值等
- 组合出通用集合运算(如:取第二名、算累计的乘积等)
-
条件运算
- 统计同组数据中比当前数大的个数
- 数据排名等
学习资源
官方文档
视频教程
动态格间运算示例
基础公式示例
| 年份 | 订购日期 | 日期 | 值 | 环比 | 环比2 | 同比 | 同比_1 |
|---|---|---|---|---|---|---|---|
| ds1.G(year) | ds1.G(订购日期) | ds1.G(date) | ds1.G(value) | 公式1 | 公式2 | 公式3 | 公式4 |
-- 公式1:简单环比
if(&B2 > 1, D2 / D2[B2:-1], '-')
-- 公式2:复杂环比
if(&B2 > 1, D2 / D2[B2:-1], if(&A2 > 1, D2 / D2[A2:-1,B2:!-1], '-'))
-- 公式3:同期比
if(&A2 > 1, if((D2 / D2[!0;!0]{A2 = $A2 - 1 && C2 = $C2}) > 9999999, '-',
(D2 / D2[!0;!0]{A2 = $A2 - 1 && C2 = $C2})), '-')
-- 公式4:特殊同期比
if(&A2 > 1, if((D2 / D2[!0;!0]{A2 = $A2 - 1 && B2 = $B2 - 10000}) > 9999999, '-',
(D2 / D2[!0;!0]{A2 = $A2 - 1 && B2 = $B2 - 10000})), '-')
注意:间格运算
D2[C2:-1]可能无法获取值,而D2/D2[B2:-1]可以。这是因为需要相对参照A2、B2这种体现层级的单元格,而C2和B2是同一级,只能取更靠前的一级。
常用计算公式
基础运算
| 类型 | 公式 |
|---|---|
| 差值 | B2 - B2[A2:1] |
| 占比 | B2 / SUM(B2[!0]) |
| 环比 | IF(&A2 > 1, B2 / B2[A2:-1], 0) |
| 逐层累计 | C2 + D2[B2:-1] |
| 跨层累计 | IF(&B2 > 1, C2 + E2[B2:-1], C2 + E2[A2:-1,B2:!-1]) |
| 排名 | RANK(D2, D2[!0], 0) (若 B2,C2 为字符串,则在 D2 输入公式=B2+C2+0,则可解决排名乱码问题 ,*1也行) |
| 排名2 | COUNT(B3[!0]{B3 > $B3}) + 1 (--desc; COUNT(B3[!0]{B3 < $B3}) + 1 --asc) |
扩展后排序
注意:如涉及扩展后排序,不能直接将以上公式直接写入单元格,需要利用以下方式解决:
- 条件属性
- 形态设置
- JavaScript
其中一般使用条件属性即可。
实例:计算满足条件的单元格数量

C3的公式如下,思路大概为:算出来不为空的每列的个数,然后减去隐藏的行的的部分,则为最终结果
-- 计算满足一定条件的扩展单元格数量(横向,纵向)
count(C2[!0]{len(C2)>0&&C1=$C1})-count(C2[!0]{len(C2)>0&&C1="D"})


浙公网安备 33010602011771号