父子格与动态格间运算

父子格与格间运算

概述

父子格和格间运算是FR报表中非常重要的功能,常用于:

  • 计算同环比
  • 计算排名
  • 处理层级数据结构

父子格

父子格与层级关系单元格扩展相关,主要用于展示类似"大类包含小类"的层级数据结构。虽然基本用法不复杂,但这是FR报表中非常重要的内容。

格间运算

格间运算主要用于解决以下问题:

  1. 跨行运算

    • 引用上一行数据
    • 典型应用:累计比和环比
  2. 跨组运算

    • 同期比等跨组计算
  3. 集合运算

    • 取第一名、算累计值等
    • 组合出通用集合运算(如:取第二名、算累计的乘积等)
  4. 条件运算

    • 统计同组数据中比当前数大的个数
    • 数据排名等

学习资源

官方文档

视频教程

动态格间运算示例

基础公式示例

年份 订购日期 日期 环比 环比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] 可以。这是因为需要相对参照 A2B2 这种体现层级的单元格,而 C2B2 是同一级,只能取更靠前的一级。

常用计算公式

基础运算

类型 公式
差值 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)

扩展后排序

注意:如涉及扩展后排序,不能直接将以上公式直接写入单元格,需要利用以下方式解决:

  1. 条件属性
  2. 形态设置
  3. JavaScript

其中一般使用条件属性即可。

实例:计算满足条件的单元格数量

C3的公式如下,思路大概为:算出来不为空的每列的个数,然后减去隐藏的行的的部分,则为最终结果

-- 计算满足一定条件的扩展单元格数量(横向,纵向)
count(C2[!0]{len(C2)>0&&C1=$C1})-count(C2[!0]{len(C2)>0&&C1="D"})
posted @ 2025-05-28 20:17  灯熄帘摇月候身  阅读(28)  评论(0)    收藏  举报