如何在PowerBI中计算最大连续工作时长?

在人力资源管理和员工考勤分析中,计算最大连续工作时长是一个常见但具有挑战性的需求。这个指标不仅能帮助企业了解员工的工作模式,还能用于合规性检查、工作效率评估以及异常行为检测。本篇文章将介绍如何在PowerBI中实现这一指标的计算。

问题描述

某工厂在某一天记录了所有员工完成各项任务的用时,为评选优秀员工,现在需要统计每位员工的最大连续工作时长,即合并各任务的可合并工作时间后取最大的那一段时长。

其中,各项任务完成后,允许休息五分钟,并且休息时间算入工作时长。

例如:员工A处理第一个任务的用时为:[13:00, 14:00],处理第二个任务的用时为[14:03, 15:38],那么这两段时间可以合并成[13:00, 15:38],若处理第二个任务时的开始时间为14:05:01及之后,则不能进行合并。

具体问题如下图所示:

本案例的初始数据如下:

任务日志表:

uidtask idstartend
A12025/1/1 13:00:002025/1/1 14:00:00
A22025/1/1 14:03:002025/1/1 15:38:00
A32025/1/1 16:00:002025/1/1 18:56:00
A42025/1/1 19:01:002025/1/1 19:30:00
B52025/1/1 8:10:112025/1/1 8:20:00
B62025/1/1 9:00:002025/1/1 10:00:00
B72025/1/1 10:04:002025/1/1 12:22:00
B82025/1/1 14:00:002025/1/1 15:23:00
B92025/1/1 15:27:002025/1/1 18:22:00
C102025/1/1 14:00:002025/1/1 15:22:30
D112025/1/1 8:00:002025/1/1 12:56:00
D122025/1/1 15:00:002025/1/1 22:58:00
D132025/1/1 23:02:132025/1/2 6:30:03

若需其它辅助表等,可自行创建并建模。

解题要点

首先,需要计算出员工所对应的所有连续工作时间段,然后取时间最长的即可。连续工作时间段的计算思路如下:

1、首先找出所有连续工作时间段的起始时间,只要某个任务的起始时间是连续工作时间段的起始时间,那么在它之前的任务的结束时间加上休息时间不会有大于等于它的。

2、然后找出所有连续工作时间段的结束时间,只要某个任务的结束时间是连续工作时间段的结束时间,那么在它之后的任务的开始时间减去休息时间不会有小于等于它的。

3、对于找出的每一个连续工作时间段的起始时间,再从所有结束时间中找到最接近它的那个结束时间,即可得到一段连续工作时间段的起始与结束时间。

解决方案

首先,数据模型如下图所示:

然后,创建如下度量值:

最大连续工作时长 = 
IF(ISINSCOPE('任务日志表'[uid]),
    VAR StartNode = 
        FILTER(
            VALUES('任务日志表'[start]),
            ISEMPTY(FILTER('任务日志表','任务日志表'[start]<EARLIER('任务日志表'[start]) && '任务日志表'[end]+TIME(0,5,0)>=EARLIER('任务日志表'[start])))
        )
    VAR EndNode = 
        FILTER(
            VALUES('任务日志表'[end]),
            ISEMPTY(FILTER('任务日志表','任务日志表'[end]>EARLIER('任务日志表'[end]) && '任务日志表'[start]-TIME(0,5,0)<=EARLIER('任务日志表'[end])))
        )
    RETURN
    FORMAT(
        MAXX(
            GENERATE(StartNode,TOPN(1,FILTER(EndNode,'任务日志表'[end]>'任务日志表'[start]),'任务日志表'[end],ASC)),
            '任务日志表'[end]-'任务日志表'[start]
        ),
        "hh:nn:ss"
    )
)

然后创建一个矩阵,并将用户ID字段作为行标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值