有时候客户数据集里会保存[开始时间]和[结束时间],为了统计有效工时,需要计算[开始时间]和[结束时间]这段时间范围内的实际工作日天数,剔除其中的周六日、法定节假日等非有效工作日天数。例如 2023-12-30至2024-01-04 期间,2024-01-01、2024-01-02、2024-01-03为节假日,实际只有2个有效工作日2023-12-30、2024-01-04。
准备一个包含节假日的表,通过文件导入到指定数据源中。每年末进行数据追加即可。
1、对业务库,包含[开始时间]、[结束时间]的表处理
a.确保[开始时间]和[结束时间]字段为日期date格式。如果非日期格式需进行字符转换。
b.添加派生列节点,计算字段[间隔日期]:sequence([开始],[结束]),该计算会返回[间隔日期]的数组。
再新建一个常量字段,如:"1"(为了后面做关联使用)
2、对节假日手工表进行查询处理
新建查询,并对节假日日期进行列转行。同时需要输出[常量]"1"(为了和业务表进行关联创建)。(此处为mysql写法)
3、两个表关联
添加join节点。通过[常量]字段进行关联
4、对[间隔日期]格式处理
第一步创建的[间隔日期]包含空格,且数组中数据格式为日期。需进行格式处理:REPLACE(REPLACE(REPLACE(string([间隔日期]),"["),"]")," ","")
5、生成数组
对[节假日期]、[间隔日期字符串],转为数组:split([间隔日期字符串],",")
6、计算工作日
使用函数array_except()可计算工作日期,size()函数可统计个数。工作日天数为:size(array_except([间隔日期数组],[节假日数组]))
示例资源可参考: