页面树结构
转至元数据结尾
转至元数据起始

需求背景

    有时候客户数据集里会保存[开始时间]和[结束时间],为了统计有效工时,需要计算[开始时间]和[结束时间]这段时间范围内的实际工作日天数,剔除其中的周六日、法定节假日等非有效工作日天数。例如 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([间隔日期数组],[节假日数组]))

示例资源可参考:

工作日.xml

工作日.xls




  • 无标签