ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 290|回复: 6

[求助] 用PQ解决打卡时间(详见附件)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-14 10:22 | 显示全部楼层 |阅读模式
请朋友帮忙:将附件中的打卡时间,用PQ操作解决进行分列,达到附件中的效果。多谢!

用PQ解决打卡时间.zip

11.6 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2023-6-14 11:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-6-14 11:02 | 显示全部楼层
image.png
这个应该有逻辑,另外时间上空着的怎么处理的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-14 14:56 | 显示全部楼层

朋友你好:看到了结果,非常好。我不懂代码,能把操作的EXCEL文件发上来吗?最好能写几个步骤

TA的精华主题

TA的得分主题

发表于 2023-6-15 09:32 | 显示全部楼层
390717298 发表于 2023-6-14 11:02
这个应该有逻辑,另外时间上空着的怎么处理的

很强大,但是你这个代码忽略了漏打卡的问题,也就是如果早上没打卡,但下午打卡了,你这个代码是不会跳出那一天的打卡记录的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-15 10:14 | 显示全部楼层
Tongbaby2020 发表于 2023-6-15 09:32
很强大,但是你这个代码忽略了漏打卡的问题,也就是如果早上没打卡,但下午打卡了,你这个代码是不会跳出 ...

实际工作中确实存在漏打卡现象。对于漏打卡的人员,需要办公室手动做个人员忘记打卡表记录(由当事人填写纸制表其中写明原因)月末将考勤机导出的表与忘记打卡的表进行合并全表,同时在表中增加时长列,算出每人每天的时长及1个月的总时长。

TA的精华主题

TA的得分主题

发表于 2023-6-15 10:40 | 显示全部楼层
htqccw 发表于 2023-6-15 10:14
实际工作中确实存在漏打卡现象。对于漏打卡的人员,需要办公室手动做个人员忘记打卡表记录(由当事人填写 ...

给你一个可以看懂的简单M代码,我加了备注在里面,希望能帮到你,考虑到了重复打卡和漏打卡情况(前提当天至少有一个任何打卡记录),你可以看附件:




let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    更改的类型 = Table.TransformColumnTypes(源,{{"考勤时间", type time}, {"打卡时间", type time}, {"考勤日期", type date}}),
    逆透视 = Table.UnpivotOtherColumns(更改的类型, {"姓名", "部门", "考勤日期"}, "属性", "值"),
    已添加自定义1 = Table.AddColumn(逆透视, "早晚", each if [值]<#time(8,1,0) then "早" else if [值]>#time(16,50,0) then "晚" else "非常规"),

//以上为区分早晚打卡,举例如果上班没打卡,下班打了两次卡,如果不区分,系统很有可能会认为晚上第一次打卡为上班打卡

    解决重复打卡 = Table.Distinct(已添加自定义1, {"姓名","部门", "考勤日期","属性","早晚"}),

//以上为解决重复打卡问题

    合并 = Table.AddColumn(解决重复打卡 , "合并", each [属性]&[早晚]),
    删除的其他列 = Table.SelectColumns(合并,{"姓名", "部门", "考勤日期", "值", "合并"}),
    已透视列 = Table.Pivot(删除的其他列, List.Distinct(删除的其他列[合并]), "合并", "值"),

//主代码已经结束,下面是辅助信息,但是你有了打卡早和考勤早,再要打卡和考勤时间,感觉多余了
    复制的列 = Table.DuplicateColumn(已透视列, "考勤时间早", "考勤时间早 - 复制"),
    复制的列1 = Table.DuplicateColumn(复制的列, "打卡时间早", "打卡时间早 - 复制"),
    重命名的列 = Table.RenameColumns(复制的列1,{{"考勤时间早 - 复制", "考勤时间"}, {"打卡时间早 - 复制", "打卡时间"}}),
    重排序的列 = Table.ReorderColumns(重命名的列,{"姓名", "部门", "考勤日期", "考勤时间", "打卡时间", "考勤时间早", "打卡时间早", "考勤时间晚", "打卡时间晚"})
in
    重排序的列


用PQ解决打卡时间.rar

18.55 KB, 下载次数: 3

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-6 08:03 , Processed in 0.039110 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表