You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAX如何实现跨月假期拆分 统计各月对应工作日天数

DAX跨月假期工作日统计实现方案

完全可以通过DAX度量值实现该需求,核心逻辑是计算单条请假记录和当前时间上下文的日期交集,再筛选工作日计数即可,无需提前拆分原始请假表的跨月记录。

前置条件

先确认你的数据模型满足以下基础要求:

  • Leave表至少包含字段:LeaveType(假期类型:年假/病假/公共假期)、StartDate(请假开始日期)、EndDate(请假结束日期,默认包含当天)
  • 日历表(Date表)为连续日期表,包含字段:Date(日期主键)、Working Day(是否工作日,取值为Yes/No)、Year、Month等时间维度字段

核心度量值

通用假期工作日统计度量值

该度量值可直接按年月、假期类型维度拆分统计,自动处理跨月记录:

假期使用天数 = 
VAR CurrentDateRange = VALUES('Date'[Date])
RETURN
SUMX(
    'Leave',
    VAR LeaveStart = 'Leave'[StartDate]
    VAR LeaveEnd = 'Leave'[EndDate]
    // 计算请假时段和当前上下文日期的交集
    VAR OverlapDates = FILTER(CurrentDateRange, [Date] >= LeaveStart && [Date] <= LeaveEnd)
    // 统计交集内的工作日数量
    VAR WorkDaysCount = COUNTROWS(FILTER(OverlapDates, RELATED('Date'[Working Day]) = "Yes"))
    RETURN
    ISNUMBER(WorkDaysCount) * WorkDaysCount
)

你只需将Date'[Year]、Date'[Month]、Leave'[LeaveType]放到表格/矩阵的维度轴,即可自动得到各月各类假期的工作日天数,你举例的跨6/7/8月的病假也会自动拆分统计到对应月份。

上月专用统计度量值

如果需要固定取上月的统计结果,可基于上面的度量值扩展:

上月假期使用天数 = 
CALCULATE(
    [假期使用天数],
    DATEADD('Date'[Date], -1, MONTH),
    ALL('Date')
)

注意事项

  • 如果你的EndDate是不包含当日的类型(比如请假1天的结束日期是次日零点),将交集判断条件的[Date] <= LeaveEnd修改为[Date] < LeaveEnd即可
  • 单表数据量小于10万行的场景下,上述写法的性能足够使用;如果数据量更大,可以改用GENERATE + SUMMARIZE的写法优化计算效率

内容的提问来源于stack exchange,提问作者JSY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:12:02