一、背景 仪表板展示界面,有一个日期筛选器,可以筛选月份和季度 需求1:以当前时间为基准,当前时间占所在月的天数比值数据应该怎么获取(不计入当天);同时,如果筛选的月份小于当前月,则进度表示100%。 需求2:以当前时间为基准,当前时间占所在季度的天数比值数据应该怎么获取(不计入当天);同时,如果筛选的季度小于当前季度,则进度表示100%。 二、需求1实现步骤 1、新建计算字段,使用 case when date >= trunc(CURRENT_DATE(), 'MM') and date <= LAST_DAY(CURRENT_DATE()) then (DAYOFMONTH(date) - 1) / (DAYOFMONTH(LAST_DAY(CURRENT_DATE()))) when date < trunc(CURRENT_DATE(), 'MM') then 1 else 0 end 2、使用的函数部分解释 1)trunc(CURRENT_DATE(), 'MM'):表示获取当前时间所在月的第一天,比如当前时间是2025-03-17,那么获取的数据就是2025-03-01。 2)LAST_DAY(CURRENT_DATE()):表示获取当前时间所在月的最后一天,比如当前时间是2025-03-17,那么获取的数据就是2025-03-31。 3)DAYOFMONTH(date) - 1:表示获取日期字段【date】在所在月份的天数,且不计入当天,比如日期数据是2025-01-19,那么【DAYOFMONTH(date)】获取的数据就是19,因为不计入当天,所以 - 1。 4)DAYOFMONTH(LAST_DAY(CURRENT_DATE())):表示获取当前时间所在月的最后一天的日期在所在月份的天数,比如当前时间是2025-03-17,【LAST_DAY(CURRENT_DATE())】获取的数据就是2025-03-31,【DAYOFMONTH(2025-03-31)】即获取的数据是31。 3、配置好之后,因为需要表示百分比格式,因为可以通过点击该字段,配置“数据格式-百分比” 三、需求2实现步骤 1、首先先创建一个计算字段,获取当前时间所在季最后一天 last_day( make_date( year(CURRENT_DATE()), CASE WHEN quarter(CURRENT_DATE()) = 1 THEN 3 WHEN quarter(CURRENT_DATE()) = 2 THEN 6 WHEN quarter(CURRENT_DATE()) = 3 THEN 9 WHEN quarter(CURRENT_DATE()) = 4 THEN 12 END, 1 ) ) 1.1、使用的函数部分解释 1)current_date():表示获取当前日期。 2)year(current_date()):表示从当前日期里提取年份。 3)quarter(current_date()):表示获取当前日期所在的季度。 4)CASE 语句:按照季度来确定该季度最后一个月的月份。第一季度(1 - 3 月)最后一个月是 3 月,第二季度(4 - 6 月)最后一个月是 6 月,第三季度(7 - 9 月)最后一个月是 9 月,第四季度(10 - 12 月)最后一个月是 12 月。 5)make_date():借助提取的年份、确定的月份以及固定的日期(每月的第一天,即 1)来构建日期。 6)last_day():得到构建日期所在月份的最后一天,也就是当前季度的最后一天。 2、然后再次新建计算字段,获取季度进度比值数据 case when date >= trunc(CURRENT_DATE(), 'quarter') and date <= 【当前时间所在季最后一天字段】 then (DATEDIFF(CURRENT_DATE(), trunc(CURRENT_DATE(), 'quarter'))) / (DATEDIFF(【当前时间所在季最后一天字段】, trunc(CURRENT_DATE(), 'quarter')) + 1) when date < trunc(CURRENT_DATE(), 'quarter') then 1 else 0 end 2.1、使用的函数部分解释 1)trunc(CURRENT_DATE(), 'quarter'):表示获取当前时间所在季度的第一天。 2)DATEDIFF(CURRENT_DATE(), trunc(CURRENT_DATE(), 'quarter')):表示获取当前时间所在季度的第一天日期,与当前时间日期的日期差。 3)DATEDIFF(【当前时间所在季最后一天字段】, trunc(CURRENT_DATE(), 'quarter'):表示获取当前时间所在季度的第一天日期,与当前时间所在季最后一天日期的日期差。 3、配置好之后,因为需要表示百分比格式,因为可以通过点击该字段,配置“数据格式-百分比” 四、文档 1)观远bi上更多关于spark日期函数的介绍也可以参考观远帮助中心文档:https://docs.guandata.com/product/bi/428146642139480064 2)网络资源上spark日期时间处理可以参考:https://blog.csdn.net/weixin_40829577/article/details/107573546 |