根据员工出勤时间计算“工作时间”

r7xajy2e  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(305)

我使用的是power bi,我想根据员工进出公司的时间来计算他们的工作时间。这是一个数据样本

假定总小时数应为7小时8分钟。所以,员工外出无所事事的时间。在我的情况下,我应该排除从2:04:20到3:09:46大约1小时的时间。

camsedfj

camsedfj1#

你可以计算下一个 out 对于每个 in 区别对待:

select t.employee_id,
       sum(datediff(second, local_time, next_local_time)) as diff_seconds
from (select t.*,
             lead(local_time) over (partition by employee_id order by local_time) as next_local_time
     from t
    ) t
where action = 'IN'
group by t.employee_id;

注:假设 IN s和 OUT s是交错的,因此一行中没有具有相同操作的行。
这也给出了以秒为单位的结果——可以转换成十进制小时或任何其他您想要的特定格式。

6rqinv9w

6rqinv9w2#

在powerbi/powerquery中,假设您的表与post的结构相同,您可以使用以下脚本创建一个新表。在此脚本中 yourSource 是指你的table。

let
    #"Sorted Rows" = Table.Sort(yourSource,{{"EmployeeID", Order.Ascending}, {"LOCAL_TIME", Order.Ascending}}),
    #"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 1, 1, Int64.Type),
    #"Added Custom1" = Table.AddColumn(#"Added Index", "Employee_In_Out_Index", each if [Action] = "IN" then [Index] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom1",{"Employee_In_Out_Index"}),
    #"Removed Columns" = Table.RemoveColumns(#"Filled Down",{"Index"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"Employee_In_Out_Index", "EmployeeID", "Action", "LOCAL_TIME"}),
    #"Pivoted Column" = Table.Pivot(#"Reordered Columns", List.Distinct(#"Reordered Columns"[Action]), "Action", "LOCAL_TIME"),
    #"Added Custom" = Table.AddColumn(#"Pivoted Column", "Time Difference", each [OUT] - [IN])
in
    #"Added Custom"

在新表中,每条记录都是一进一出。有一个 Time Difference 列,您可以在计算中使用。

相关问题