-
-
yangqh 数据老手Lv5
发表于2024-8-2 14:05
楼主
由于不同的场景,对于“工作日”的定义可能不太一样,所以产品中没有直接的内置函数可以统一去求某时间区间内的工作日天数,但是在能够明确“工作日”统计规则的情况下,是可以根据需要去计算工作日天数的,具体举例如下:
场景一:
不考虑调休和节假日情况,周一到周五为工作日,报表中有计算参数@rq和@rq2分别供用户选择开始时间和结束时间,需要求时间区间内工作日天数;
表达式:(STRTODATE(@rq)..STRTODATE(@rq2)).select([2,3,4,5,6].find(weekday(@))>-1).count()
解析:
1、(STRTODATE(@rq)..STRTODATE(@rq2))表示输出时间区间内的日期,返回结果为数组格式;
2、.select()是数组函数,可社区内搜索数组函数介绍具体了解;
3、[2,3,4,5,6].find(weekday(@))>-1表示筛选中周一~周五,weekday()函数中1表示周天、2表示周一,依此类推;
4、.count()数组函数用法,求计数。
场景二:
周一到周五的基础上,需要考虑调休和节假日场景;
表达式:基于场景一的表达式基础上,select部分改成如下逻辑剔除法定节假日或者是补充调休日期判断:
.select(([2,3,4,5,6].find(weekday(@))>-1|[此处数组内写经调休要上班的周末日期].find(datetostr(@,'yyyymmdd'))>-1) & [此处数组内写周一~周五但不上班的日期].find(datetostr(@, 'yyyymmdd'))=-1, @)
场景一:
不考虑调休和节假日情况,周一到周五为工作日,报表中有计算参数@rq和@rq2分别供用户选择开始时间和结束时间,需要求时间区间内工作日天数;
表达式:(STRTODATE(@rq)..STRTODATE(@rq2)).select([2,3,4,5,6].find(weekday(@))>-1).count()
解析:
1、(STRTODATE(@rq)..STRTODATE(@rq2))表示输出时间区间内的日期,返回结果为数组格式;
2、.select()是数组函数,可社区内搜索数组函数介绍具体了解;
3、[2,3,4,5,6].find(weekday(@))>-1表示筛选中周一~周五,weekday()函数中1表示周天、2表示周一,依此类推;
4、.count()数组函数用法,求计数。
场景二:
周一到周五的基础上,需要考虑调休和节假日场景;
表达式:基于场景一的表达式基础上,select部分改成如下逻辑剔除法定节假日或者是补充调休日期判断:
.select(([2,3,4,5,6].find(weekday(@))>-1|[此处数组内写经调休要上班的周末日期].find(datetostr(@,'yyyymmdd'))>-1) & [此处数组内写周一~周五但不上班的日期].find(datetostr(@, 'yyyymmdd'))=-1, @)