有些分析场景,需要使用周和对应日期一起作为维度字段(如下图所示的效果),系统自带的周无法满足需求,需要结合spark日期函数和文本函数拼接处理,下文介绍具体操作过程。 1、利用spark日期函数,获取每个日期对应的周数周:weekofyear([日期]) 2、获取每周的周一周一日期:trunc([日期],'week') 日期函数无法直接截取字符,还需要转为文本函数再进行截取,三个公式可以套在一起 周一文本:substr(cast(trunc([日期],'week') as string),6,5) 3、获取每周的周日,周日可以在周一的日期往后推算6天周日日期:trunc([日期],'week')+interval 6 days 周日文本:substr(cast(trunc([日期],'week')+interval 6 days as string),6,5) 4、将周和该周的日期拼接在一起拼接:[周]||'('||[周一]||'~'||[周日]||')' 5、现在日期拼接中间使用的‘-’,如果想替换成‘.’,可以使用replace函数最终效果就和预期一样了,可以把直接这个最终放在维度使用,其他字段只是过程过度使用,卡片中不需要展示出来,不影响最后的结果 |