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

如何使用DAX按员工维度计算WTD/MTD/YTD累计总工时?

DAX 员工多维度工时计算实现方案

前置依赖

  • 已创建覆盖全部打卡时间范围的独立日期维度表,与打卡表的打卡日期字段建立一对多活跃关系
  • 打卡表至少包含2个核心字段:员工姓名(文本类型)、打卡时间(日期时间类型),无单独打卡日期字段的可通过DATE([打卡时间])临时提取

基础度量值:单日工时

按员工+日期维度,计算单天有效工时(返回单位为小时,可自行调整单位)

单日工时 = 
VAR 当日最早打卡 = CALCULATE(MIN(打卡表[打卡时间]), ALLEXCEPT(打卡表, 打卡表[员工姓名], '日期表'[日期]))
VAR 当日最晚打卡 = CALCULATE(MAX(打卡表[打卡时间]), ALLEXCEPT(打卡表, 打卡表[员工姓名], '日期表'[日期]))
RETURN
// 仅当日存在至少2条打卡记录时返回工时,可根据业务规则调整判断逻辑
IF(
    NOT(ISBLANK(当日最早打卡)) && NOT(ISBLANK(当日最晚打卡)) && 当日最早打卡 <> 当日最晚打卡,
    DATEDIFF(当日最早打卡, 当日最晚打卡, HOUR) + DATEDIFF(当日最早打卡, 当日最晚打卡, MINUTE)/60,
    BLANK()
)

多维度累计工时度量值

基于上述单日工时度量值,结合DAX时间智能函数实现各周期累计,自动按员工维度独立统计:

WTD(周累计工时)

WTD累计工时 = 
CALCULATE(
    [单日工时],
    DATESWTD('日期表'[日期]),
    ALLEXCEPT(打卡表, 打卡表[员工姓名])
)

MTD(月累计工时)

MTD累计工时 = 
CALCULATE(
    [单日工时],
    DATESMTD('日期表'[日期]),
    ALLEXCEPT(打卡表, 打卡表[员工姓名])
)

YTD(年累计工时)

YTD累计工时 = 
CALCULATE(
    [单日工时],
    DATESYTD('日期表'[日期]),
    ALLEXCEPT(打卡表, 打卡表[员工姓名])
)

可选优化规则

  • 需排除休息日/法定节假日的,可在日期表新增是否工作日布尔列,所有度量值的CALCULATE筛选参数中新增'日期表'[是否工作日] = TRUE()即可
  • 需处理单日仅1条打卡、跨天打卡等异常场景的,直接修改单日工时的返回判断逻辑即可,所有累计度量值会自动继承规则
  • 矩阵视图展示时,行维度放员工姓名,列维度放日期表的年/季/月/周/日层级,值放对应度量值即可实现自动聚合统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:36:04