如何在Palantir Contour中计算日期之间的工作日
Palantir Contour计算两日期列工作日天数的解决方案
方案一:基础工作日计算(仅排除周六周日)
由于date_diff仅能计算总天数,无法直接过滤周末,可通过自定义表达式组合现有函数实现:
date_diff(start_date, end_date) - (2 * floor((date_diff(start_date, end_date) + day_of_week(start_date)) / 7)) - case when day_of_week(end_date) = 0 then 1 else 0 end - case when day_of_week(start_date) = 6 then 1 else 0 end
逻辑说明:
date_diff(start_date, end_date):获取两个日期之间的总天数2 * floor((date_diff(...) + day_of_week(start_date)) / 7):计算这段时间内包含的完整周末天数(每周2天)- 最后两个
case语句:调整首尾日期为周末时的多扣减情况(day_of_week返回0代表周日,6代表周六)
方案二:包含自定义节假日的工作日计算
如果需要排除公司自定义节假日,需结合节假日维度表实现:
- 创建一个维护节假日日期的维度表(例如命名为
holidays,包含holiday_date列) - 在Contour中关联主表与节假日表,筛选出
start_date到end_date区间内的节假日数量 - 用方案一的基础工作日数减去节假日数量,表达式示例:
-- 基础工作日数 (date_diff(start_date, end_date) - (2 * floor((date_diff(start_date, end_date) + day_of_week(start_date)) / 7)) - case when day_of_week(end_date) = 0 then 1 else 0 end - case when day_of_week(start_date) = 6 then 1 else 0 end) -- 减去区间内的节假日数量 - (select count(*) from holidays where holiday_date between start_date and end_date)
注意:需定期更新节假日维度表,确保包含所有需要排除的日期。
内容的提问来源于stack exchange,提问作者Questionado
相关产品推荐
相关产品推荐

