复杂报表计算同比|环比|列占比
一、需求背景
在实现数据分析的过程中,有时会在同一张表内查看自定义某段时间内的数据(后文称“本期数据”)、同期数据(去年相同时间范围内的数据)、环比数据、同比数据占比(按维度、按列)。
其实在卡片编辑中高级计算功能可以直接实现同比、环比的计算,但是由于只能使用一次高级计算功能,导致无法计算同比、环比数据的列占比情况。
二、最终效果
三、解决方案
方案一:在ETL中事先处理好数据
1. 计算出每个日期对应的同比、环比数据、不同维度的数据总计(用于计算不同维度的占比数据)
2. 在编辑卡片的时候直接拖拽相应字段
注:计算每个日期维度的同比/环比数据,目的是方便卡片创建之后可以和外部日期筛选器(按日/年/月维度)进行联动
方案二:直接在复杂报表中进行处理
数据准备
新建2个日期全局参数:「本期开始」、「本期结束」。
至少需要创建4个视图:【日期说明】、【本期】、【同期】、【环比】
1.【本期】视图:
a. 新建字段「本期筛选范围」:[日期] >= [DYNAMIC_PARAMS.本期开始] and [日期] <= [DYNAMIC_PARAMS.本期结束]
b. 计算「本期数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[本期筛选范围])
2.【日期说明】视图,需要创建4个字段:
a. 「本期区间」:concat([DYNAMIC_PARAMS.本期开始],'~',[DYNAMIC_PARAMS.本期结束])
b. 「同期区间」:concat(add_months([DYNAMIC_PARAMS.本期开始],-12),'~',add_months([DYNAMIC_PARAMS.本期结束],-12))
c. 「环比间隔天数」:datediff([DYNAMIC_PARAMS.本期开始],[DYNAMIC_PARAMS.本期结束])
d.「环比区间」:concat(date_add([DYNAMIC_PARAMS.本期开始],[环比间隔天数]),'~',date_add([DYNAMIC_PARAMS.本期结束],[环比间隔天数]))
3.【同期】视图:
a. 新建字段「同期筛选范围」:[日期] >= add_months([DYNAMIC_PARAMS.本期开始],-12) and [日期] <= add_months([DYNAMIC_PARAMS.本期结束],-12)
b. 计算「同期数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[同期筛选范围])
4.【环比】视图:
a. 新建字段「环比间隔」:datediff([DYNAMIC_PARAMS.本期开始],[DYNAMIC_PARAMS.本期结束])
b. 新建字段「环比筛选范围」:[日期] >= date_add([DYNAMIC_PARAMS.本期开始],[环比间隔]) and [日期] <= date_add([DYNAMIC_PARAMS.本期结束],[环比间隔])
c. 计算「环比数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[环比筛选范围])
模版编辑
1.公式模版编辑如下:
2.需要注意的字段的动态属性配置如下: