1. 概述
1.1 版本
| FineBI 版本 |
|---|
| 6.0.14 |
2. 描述
2.1问题描述
当我们要看销售额在周维度的环比变化情况时,这里的周按照FineBI默认情况展示(从上周日~这周六为一周)在FineBI中画这样一张组合图形,条形图表示周维度的销售额以及环期值,折线图表示周维度的环比增长率,销售额的环期值和环比增长率通过FineBI自带的快速计算功能实现,结果如下。

问题会出现在最近的周,也就是图中第49周的环期值和环比增长率,在数据源中,12月份的销售数据仅更新到2023/12/4(只有1,2,3,4号四天的销售数据),第49周是2023/12/3(周日)和2023/12/4(周一)两天,对应的总销售额是15.99万,FineBI计算正确,而第49周的环期值快速计算的结果是138.28万,也就是说FineBI把整个第48周(2023/11/26~2023/12/2)的销售额作为49周的环期值,这样第49周的环比增长率是-88.43%,这在实际业务运用中是不正确的。
正确结果应该是,由于第49周只有两天的销售额数据(2023/12/3~2023/12/4),那么环期值应该是2023/11/26~2023/11/27这两天的总销售额才是第49周的环期值,然后再计算对应的环比增长率才是正确的,那么该如何解决该问题呢?
2.2解决方案
以上提到的问题会出现在距离当前最近的周中,尤其是最近的周数据还不完整的情况下,
第49周只有两天的销售额数据(2023/12/3,2023/12/4),那么可以进行环比的日期就是第48周的2023/11/26,2023/11/27两天的销售数据,从2023/11/28到2023/12/2的数据是不可以跟第49周的数据进行环比的,我们需要在数据源中识别出哪些日期是可以进行环比,哪些日期是不可以进行环比。
2.2.1 创建【最近日期】列
先识别出数据源中最近的日期,创建【最近日期】字段,用DEF函数实现,【最近日期】=DEF(MAX_AGG(日期1))。
可以看出最近日期是2023年12月4号

2.2.2 创建【可比日期-周环比】列
可以进行周环比的日期标记为true,否则标记为false。具体公式如下:
【可比日期-周环比】=IF(
日期1<=DATEDELTA(最近日期,-7) || WEEK(日期1)=DEF(MAX_AGG(WEEK(日期1))),
"true","false"
)
数据源中第49周数据只有12/3,12/4两天,那么该公式利用最近日期把11/26,11/27识别出来标记为可比日期,11月份之前(1月~10月)的日期也标记为可比日期,11/28到12/2标记为不可比日期,同时将12/3,12/4标记为可比日期

2.2.3 开始绘图
进入组件中开始绘图,复制【销售额】字段,得到【销售额2】,对【销售额2】字段进行明细过滤,过滤条件字段选择【可比日期-周环比】,属于固定值true。

2.2.4 创建计算字段【周环期销售额】
【周环期销售额】=PREVIOUS_PERIOD(SUM_AGG(销售额2)),或者将【销售额2】字段直接拖到纵轴,利用快速计算功能计算环期值。

2.2.5 创建计算字段【销售额周环比增长率】
【销售额周环比增长率】=(SUM_AGG(销售额)-PREVIOUS_PERIOD(SUM_AGG(销售额2)))/PREVIOUS_PERIOD(SUM_AGG(销售额2)),这里必须编写环比增长率计算公式,不能用快速计算功能。

2.3 结果验证
绘制图形,选择自定义图表,
【日期1】拖到横轴,并设置为年周
【销售额】,【周环期销售额】,【销售额周环比增长率】拖到纵轴
【销售额周环比增长率】设置为折线图,值轴设置为右值轴
给【销售额】,【周环期销售额】,【销售额周环比增长率】加上数据标签验证结果
结果如下,现在第49周的销售额不变,是15.99万,但是环期值变成56.91万,也就是11/26,11/27这两天的总销售额,对应的环比增长率为-71.90%,结果正确。

