文章 查看内容

以当前时间为基准,月进度,季度进度如何获取

以当前时间为基准,月进度,季度进度如何获取

63 0 可视化分析 2025-3-17 18:20 发布者: 观小豪

以当前时间为基准月进度,季度进度如何获取
一、背景
仪表板展示界面,有一个日期筛选器,可以筛选月份和季度
需求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

路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2025 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部