跳到主要内容
版本:7.0.0

复杂报表计算同比|环比|列占比

一、需求背景

在实现数据分析的过程中,有时会在同一张表内查看自定义某段时间内的数据(后文称“本期数据”)、同期数据(去年相同时间范围内的数据)、环比数据、同比数据占比(按维度、按列)。

其实在卡片编辑中高级计算功能可以直接实现同比、环比的计算,但是由于只能使用一次高级计算功能,导致无法计算同比、环比数据的列占比情况。

二、最终效果

image.png

三、解决方案

方案一:在ETL中事先处理好数据

1. 计算出每个日期对应的同比、环比数据、不同维度的数据总计(用于计算不同维度的占比数据)

2. 在编辑卡片的时候直接拖拽相应字段

注:计算每个日期维度的同比/环比数据,目的是方便卡片创建之后可以和外部日期筛选器(按日/年/月维度)进行联动

方案二:直接在复杂报表中进行处理

数据准备

新建2个日期全局参数:「本期开始」、「本期结束」。
至少需要创建4个视图:【日期说明】、【本期】、【同期】、【环比】

1.【本期】视图:

image.png

a. 新建字段「本期筛选范围」:[日期] >= [DYNAMIC_PARAMS.本期开始] and [日期] <= [DYNAMIC_PARAMS.本期结束]

b. 计算「本期数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[本期筛选范围])

2.【日期说明】视图,需要创建4个字段:

image.png

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.【同期】视图:

image.png

a. 新建字段「同期筛选范围」:[日期] >= add_months([DYNAMIC_PARAMS.本期开始],-12) and [日期] <= add_months([DYNAMIC_PARAMS.本期结束],-12)

b. 计算「同期数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[同期筛选范围])

4.【环比】视图:

image.png

a. 新建字段「环比间隔」:datediff([DYNAMIC_PARAMS.本期开始],[DYNAMIC_PARAMS.本期结束])

b. 新建字段「环比筛选范围」:[日期] >= date_add([DYNAMIC_PARAMS.本期开始],[环比间隔]) and [日期] <= date_add([DYNAMIC_PARAMS.本期结束],[环比间隔])

c. 计算「环比数据-订购数量」:sum([订购数量]) over(partition by [大区],[省份],[环比筛选范围])

模版编辑

1.公式模版编辑如下:替换图片.png

2.需要注意的字段的动态属性配置如下:

image.png