历史版本23 :同比 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

本文视频学习请参见专题视频:相对层次坐标能用来做什么

系统的层次坐标学习计划参见:层次坐标专题

1.1 预期效果

同期比是把当年每月与上一年相应月份的数据相除计算出的一个比率。即某年第 n 月与上一年第 n 月的比值,计算公式为:本期/同期*100%

示例分别为当年和上一年月份时间一一对应的情况以及不一一对应的情况。

示例一:当年上年月份一一对应情况下的同期比如下图所示:

示例二:当年上年月份不一一对应情况下的同期比如下图所示:

1609830312373690.png

1.2 实现思路

使用层次坐标获取上一年同月的数据,并使用 IF 函数进行计算。

示例一:从第二年开始,当月金额比上上一年相应月金额,否则显示 0。

示例二:从第二年开始,当月金额比上上一年相应月金额,且只有月份相同的情况下才会计算,即需要同时判断高级父格与下级父格,否则显示 0。

层次坐标详情参见:层次坐标概述

2. 示例一:月份一一对应计算同期比编辑

2.1 准备数据

新建普通报表,新增数据集 ds1,SQL 语句为:select strftime('%Y',订购日期) as 年份, strftime('%m',订购日期) as 月份,应付金额 from 订单 where strftime('%Y',订购日期) = '2010' or strftime('%Y',订购日期) = '2011'

查询出 2010 和 2011 年月下的应付金额,如下图所示:

1609831156599439.png

2.2 设计报表

设计表格,并将年份、月份、应付金额拖入A3、B3、C3单元格下,将「年份」、「月份」设置为分组格式、「应付金额」设置为汇总格式,如下图所示:

1609831430188440.png

2.3 计算与去年同期比

在 D3 单元格中,输入公式:=IF(&A3 > 1, C3 / C3[A3:-1], 0),如下图所示:

1609831498693183.png

公式说明:

公式
说明
C3[A3:-1]表示当前 C3,所在的 A3(年份)单元格往上偏移一个位置(去年)中与当前月在相同位置的月所对应的 C3 单元格的值,即等价于 C3[A3:-1,B3:+0]。
&A3>1从第二年开始。
IF(&A3 > 1, C3 / C3[A3:-1], 0)父格为月份单元格,跟随月份扩展:当&A3>1即从第二年开始,当月金额比上上一年相应月金额,否则显示 0。

2.4 效果预览

保存模板,点击「分页预览」,效果参见本文 1.1 节示例一。

已完成模板可参考%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\同期比.cpt

模板下载:同期比.cpt

3. 示例二:月份不一一对应求同期比编辑

当年同期比的月与上年同期比的月份不一一对应的时候,发现示例一单元格的写法就不满足需求。

例如 16 年从 9 月到 12 月,而 17 年从 1 月开始到 12 月。这时候 16 年和 17年就仅对应了 4 个月,如下图所示:

1609831797430171.png

3.1 设计报表

打开示例模板 同期比-月份不对应.cpt,使用已有的内置数据集,将年份、月份、总额拖入A3、B3、C3单元格下,将「年份」、「月份」设置为分组格式、「总额」设置为汇总格式,在 D3 单元格输入公式:IF(&A3>1,C3/C3[!0]{A3=$A3-1&&B3=$B3},0),如下图所示:

1609832244761891.png

公式说明:


公式
说明
A3=$A3-1上一年年份
B3=$B3月度相同
C3[!0]{A3=$A3-1&&B3=$B3}取总额满足年份为上一年,且月份与当年相同的数据
C3/C3[!0]{A3=$A3-1&&B3=$B3}当月金额比上上一年相应月金额,且只有当年和上一年月份相同的情况下才会计算。
&A3>1从第二年开始
if(&A3>1,C3/C3[!0]{A3=$A3-1&&B3=$B3},0)从第二年开始,当月金额比上上一年相应月金额,且只有月份相同的情况下才会计算,即需要同时判断高级父格与下级父格,否则显示 0。

也可使用公式:IF(&A3>1,if(len(C3[!0]{A3=$A3-1&&B3=$B3}) =0,0,C3/C3[!0]{A3=$A3-1&&B3=$B3}),0)


公式说明:

公式
说明
LEN(C3[!0]{A3=$A3-1&&B3=$B3})=0判断上一年的相同月份值是否存在
if(len(C3[!0]{A3=$A3-1&&B3=$B3}) =0,0,C3/C3[!0]{A3=$A3-1&&B3=$B3})如果不存在,则返回0 否则进行计算
IF(&A3>1,if(len(C3[!0]{A3=$A3-1&&B3=$B3}) =0,0,C3/C3[!0]{A3=$A3-1&&B3=$B3}),0)从第二年开始,当月金额比上上一年相应月金额,且只有月份相同的情况下才会计算,即需要同时判断高级父格与下级父格,否则显示 0。

D3 单元格设置条件属性,可避免存在「除数」为 0 时,结果出现无穷大,详情可参见:除数/被除数为零的处理 ,如下图所示:

1609832623518134.png

3.2 效果预览

保存模板,选择分页预览,效果参见本文 1.1 节示例二。

已完成模板可参考:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\同期比-月份不对应.cpt

3.3 模板下载

模板下载:

同期比-月份不对应.cpt

同期比-月份不对应_2.cpt

4. 注意事项编辑

4.1 问题描述

相对层次坐标定位规则为:Cellx[Lk:±lk,LK-1:±lk-1,......,L1:±l1;Tk:±tk,Tk-1:±tk-1......,T1:±t1]

父子格有层级的概念,如上例中 D3 的父格为 B3,而B3的父格为 A3,那么对 D3 来说,A3 就是高级父格。如果对单元格 Cellx 的高级父格如这里的 A3 进行了定位,而对下面的父格没有定位时,相对层次坐标会将它缺省为高级父格中与下级父格的相同位置,即下级父格偏移为+0。

4.2 示例