背景上篇文章《用时序UDF制作历史拉链表》介绍了如何使用观远自定义时序函数制作历史拉链表,不过,时序自定义函数使用逻辑比较复杂,对用户来说可能操作起来不太方便,本文将介绍如何在ETL使用 Spark 窗口函数来制作历史拉链表。 拉链表2种制作方式对比如下,请根据实际场景选择合适的方式:
Spark 窗口函数使用请参考:Spark窗口函数 实现步骤一、数据准备把已经准备好的库存快照表(用ETL制作数据快照)或者流水明细表导入到观远数据平台中,创建一个Smart ETL,先把数据聚合到需要的颗粒度。这里我们准备一张门店、商品的日汇总表,以下图为例,既存在连续日期,也存在跳跃日期,缺失的日期实际库存数等同于历史最近日期的库存数。 二、ETL数据处理
lead([库存数])over(partition by [门店ID],[商品ID] order by [日期])
以下图为例,2020-01-20至2020-01-23期间库存没有变化,2020-01-21和2020-01-22两天就既不是期初也不是期末,期末为库存数发生变化的前一天。 然后用筛选数据行节点把非期初期末的重复库存数据筛除。
注意:以上非唯一方案,可以使用窗口函数探索更多解决方案。例如,库存快照表(或者任何日期连续的情况)也可使用 lasting_days_to_date 函数制作拉链表。 三、仪表板展现场景一:直接查询页面卡片上制作卡片,新建计算字段「日期筛选」,布尔型,引用时间型全局参数,拖入筛选栏(默认筛选true)。然后在页面上创建日期筛选器,联动卡片里使用的全局参数即可。 [DYNAMIC_PARAMS.所选日期] between [期初] and [期末] 最终页面效果: 场景二:同环比计算由于拉链表是基于日期区间模糊查询,卡片里无法使用系统自带的同环比计算,需要借助全局参数直接计算出同环比数据并展示。以下案例展示月同比数据。 新建以下2个计算字段,拖入数值栏,不需要筛选日期。然后在页面上创建日期筛选器,联动卡片里使用的全局参数即可。 |