根据日期设置动态日期范围
场景
可视化看板里,时常会用到柱形图或者折线图,来展示包括当天在内的周期趋势变化。然而每逢新的周期开始时(例如年初、月初、周初),由于数据量少,柱形图或者折线图下跌趋势明显,容易误导看板浏览者认为业绩或运营出现问题。希望在周期初始,不显示当前周期,仅显示之前周期的数据。
案例
制作最近8周的用户群活跃度趋势图,期望效果:每逢周一不显示当天数据,展示之前8周数据;周二至周日,展示包括当前周和之前7周的数据。效果参考下图,X轴显示的日期范围跟随当天日期动态变化。
实现步骤
1. 提取周一日期,按周区分日期
在卡片里新建计算字段「周日期」,用函数trunc(返回日期格式)或者date_trunc(返回日期时间格式)取得日期字段所在周的周一日期。
2. 判断「近8周」逻辑
新建计算字段「近8周」,放入筛选栏。判断近8周的逻辑有多种,以下提供2种方案供参考。
卡片整体设置如下图。
注意事项
需要把数据聚合到周维度的场景里,部分用户习惯用 weekofyear() 函数来取得周数,并用这个周数来控制日期筛选,本文案例中「近8周」也可以通过如下公式筛选得到。
但是,强烈不建议使用该方案,主要弊端有:在数据集里包含多年份、或者跨年数据时,不筛选年份会导致不同年份的同一周都误参与计算;筛选年份会导致跨年后(每年1、2月)取不到近8周中去年的数据。
其它
非周期趋势图表,仅用筛选器筛选单个周期(例如当前月),可以使用选择筛选器,默认选项使用时间宏,从而实现月初1号、周一的时候默认显示上个周期数据,其余事后显示当前周期数据。筛选器设置参考下图。
如果可视化图表里只需要展示当前月、不包含今天当天的数据,也不需要通过筛选器控制时间周期显示,那么在卡片编辑页面筛选日期字段,选择快捷日期区间,例如“本月到昨天”,也可以实现月初一号展示上个月数据。其他周期以此类推。
参考文档:时间宏使用 Spark日期函数及应用