影刀RPA 员工绩效数据采集:多系统KPI自动汇总 影刀RPA 员工绩效数据采集多系统KPI自动汇总作者林焱 | 适用人群影刀RPA新手 | 难度★★★☆☆一、什么情况用这个HR和部门主管每个月底最怕的就是绩效核算——数据散落在各个系统里OA里有请假记录、CRM里有销售数据、项目管理工具有任务完成情况、考勤系统有打卡记录。手动从各个系统导出数据、合并、计算……一搞就是两三天。用影刀RPA月初自动从各系统采集数据 → 合并清洗 → 按考核模板计算得分 → 生成个人绩效报表。HR再也不用打开七八个系统手动复制粘贴。实际场景月度绩效考核数据汇总、季度奖金计算、年度评分自动统计、OKR完成度自动计算。这篇文章能解决的问题从多个系统采集KPI数据数据合并去重按考核模板自动计算得分生成个人绩效报告二、怎么做2.1 数据源梳理首先明确数据来源和采集方式数据类型来源系统采集方式采集字段考勤OA/钉钉/企微网页操作或API出勤天数、迟到次数、请假天数销售CRM系统网页数据抓取销售额、新客数、回款额项目Jira/TAPDAPI调用完成任务数、Bug修复数OKR飞书/自研系统API或网页KR完成度、自评分2.2 影刀主流程┌──────────────────────────────────────────────┐ │ ① 【执行Python代码】 │ │ 采集OA考勤数据 │ │ ↓ │ │ ② 【执行Python代码】 │ │ 采集CRM销售数据 │ │ ↓ │ │ ③ 【执行Python代码】 │ │ 采集项目系统任务数据 │ │ ↓ │ │ ④ 【执行Python代码】 │ │ 多源数据合并 清洗 │ │ ↓ │ │ ⑤ 【读取Excel】 │ │ 读取考核模板权重/计算公式 │ │ ↓ │ │ ⑥ 【执行Python代码】 │ │ 计算绩效得分 │ │ ↓ │ │ ⑦ 【写入Excel】 │ │ 生成个人绩效报表 │ └──────────────────────────────────────────────┘2.3 核心代码步骤①②③多源数据采集importjsonfromdatetimeimportdatetime# 1. 考勤数据采集从OA网页 defcollect_attendance(employee_list):采集考勤数据# 用影刀网页操作采集或调API# 【打开网页】→ OA考勤系统# 【填写】→ 查询月份点击搜索# 【获取表格数据】→ 考勤明细表# 模拟返回数据attendance{}forempinemployee_list:attendance[emp[工号]]{work_days:22,# 应出勤天数actual_days:21,# 实际出勤late_times:1,# 迟到次数early_times:0,# 早退次数leave_days:1,# 请假天数}returnattendance# 2. 销售数据采集从CRM defcollect_sales_data(employee_list):采集销售数据sales{}forempinemployee_list:# 调用CRM API或网页抓取sales[emp[工号]]{revenue:150000,# 销售额new_customers:5,# 新客户数collected:120000,# 回款额pipeline:200000,# 商机金额}returnsales# 3. 项目数据采集从Jira/TAPD defcollect_project_data(employee_list):采集项目任务数据importrequests project_data{}# Jira API示例JIRA_URLhttps://your-domain.atlassian.netJIRA_TOKENyour-api-tokenforempinemployee_list:try:# 查询该员工本月完成的任务jqlfassignee {emp[jira_id]}AND status Done AND resolved startOfMonth()responserequests.get(f{JIRA_URL}/rest/api/2/search,params{jql:jql,maxResults:100},auth(emp[email],JIRA_TOKEN),timeout15,)tasksresponse.json().get(issues,[])completedlen(tasks)# 按任务类型分类bug_countsum(1fortintasksift[fields][issuetype][name]Bug)story_countsum(1fortintasksift[fields][issuetype][name]Story)project_data[emp[工号]]{completed_tasks:completed,bugs_fixed:bug_count,stories_completed:story_count,}exceptExceptionase:print(f采集{emp[姓名]}项目数据失败{e})project_data[emp[工号]]{}returnproject_data步骤④⑤⑥数据合并计算# 考核模板配置从Excel读取KPI_TEMPLATE{考勤:{weight:0.2,items:{出勤率:{formula:actual_days/work_days*100,target:95,weight:0.5},迟到次数:{formula:late_times,target:2,weight:0.5,reverse:True},}},销售业绩:{weight:0.4,items:{销售达成率:{formula:revenue/target_revenue*100,target:100,weight:0.6},新客数:{formula:new_customers,target:3,weight:0.4},}},项目交付:{weight:0.4,items:{任务完成数:{formula:completed_tasks,target:10,weight:0.5},Bug修复数:{formula:bugs_fixed,target:5,weight:0.5},}},}defcalculate_performance(employee,attendance,sales,project):计算个人绩效得分emp_idemployee[工号]attattendance.get(emp_id,{})salsales.get(emp_id,{})projproject.get(emp_id,{})scores{}total_score0forcategory,configinKPI_TEMPLATE.items():category_weightconfig[weight]category_score0foritem_name,item_configinconfig[items].items():# 获取实际值简化处理实际需要解析formulaifcategory考勤:actualatt.get(actual_days,0)/max(att.get(work_days,1),1)*100if迟到initem_name:actualatt.get(late_times,0)# 逆向指标越少分越高item_scoremax(0,(item_config[target]*2-actual)/(item_config[target]*2))else:item_scoremin(1,actual/item_config[target])elifcategory销售业绩:if达成率initem_name:actualsal.get(revenue,0)/employee.get(target_revenue,1)*100else:actualsal.get(new_customers,0)item_scoremin(1.5,actual/item_config[target])# 封顶150%elifcategory项目交付:if任务initem_name:actualproj.get(completed_tasks,0)else:actualproj.get(bugs_fixed,0)item_scoremin(1.5,actual/item_config[target])else:item_score0weighted_itemitem_score*item_config[weight]category_scoreweighted_item scores[f{category}-{item_name}]round(item_score*100,1)total_scorecategory_score*category_weightreturn{工号:emp_id,姓名:employee[姓名],部门:employee[部门],考核月份:datetime.now().strftime(%Y-%m),总分:round(total_score*100,1),考勤得分:round(scores.get(考勤-出勤率,0),1),销售得分:round(scores.get(销售业绩-销售达成率,0),1),项目得分:round(scores.get(项目交付-任务完成数,0),1),等级:get_grade(total_score),}defget_grade(score):得分转等级ifscore0.9:returnSelifscore0.8:returnAelifscore0.7:returnBelifscore0.6:returnCelse:returnD# 批量计算 results[]forempinemployee_list:perfcalculate_performance(emp,attendance,sales,project)results.append(perf)outputjson.dumps(results,ensure_asciiFalse)三、有什么坑坑1不同系统的数据口径不一致OA的「请假天数」按自然日算但考勤统计时用的是工作日天数。两个系统的数据直接加起来就会对不上。解决在合并数据时统一口径明确定义每个字段的计算方式。# 统一口径LEAVE_COUNT_METHOD工作日# or 自然日坑2销售人员的目标值Target动态变化某销售月初的目标是100万月中调到了80万月底考核时按哪个算建议考核模板中记录最终确认的目标值不从业务系统直接读取而是维护一份经审批的目标表。坑3部分员工某些考核维度不适用比如技术人员的「销售额」指标不适用——总分应该重新加权分配而不是直接给0分。defrecalculate_weights(template,applicable_dimensions):重新分配权重排除不适用的维度total_weightsum(template[d][weight]fordinapplicable_dimensions)fordinapplicable_dimensions:template[d][weight]template[d][weight]/total_weightreturntemplate坑4跨系统数据对齐难员工在OA中的ID和CRM中的ID不一样字段拼写也不同。需要建一张「员工系统映射表」姓名工号OA账号CRM账号Jira账号TAPD账号张三E001zhangsanzs_001zhangsancorp.comzhangsan坑5历史考核数据的审计绩效考核结果涉及薪资奖金如果有人质疑得分需要能追溯原始数据。建议每次计算后保存一份「原始数据快照」# 保存原始数据快照snapshot{计算时间:datetime.now().isoformat(),员工:employee[工号],考勤原始数据:attendance[employee[工号]],销售原始数据:sales[employee[工号]],项目原始数据:project[employee[工号]],计算过程:steps,最终得分:score,}总结影刀做绩效数据汇总本质上是「跨系统数据聚合 按模板计算」。关键是统一数据口径、建立员工系统映射表、保存原始数据快照以备审计。考核模板配置化Excel管理方便调整权重和公式。

相关新闻

最新新闻

RAG技术实战:从零搭建企业级私有知识库系统

RAG技术实战:从零搭建企业级私有知识库系统

在AI应用开发中,我们经常遇到一个核心痛点:通用大模型虽然知识渊博,但无法准确回答特定领域的问题。比如询问公司内部产品信息、技术文档细节或私有数据时,模型往往给出笼统甚至错误的答案。这正是RAG(检索增强生成&am…

2026/7/13 3:04:43
Sqribble文档自动化:模板驱动的PDF生成原理与实践

Sqribble文档自动化:模板驱动的PDF生成原理与实践

1. 项目概述:这不是“一键生成”,而是一套被精心封装的文档流水线你有没有过这种经历:手头有一篇写得不错的博客文章,或者一份整理好的培训笔记,突然需要把它变成一本像模像样的PDF小册子——用来当课程资料、客户提案…

2026/7/13 3:04:43
工业级C++异常处理:从防御性编程到契约设计的实战指南

工业级C++异常处理:从防御性编程到契约设计的实战指南

1. 项目概述:为什么工业级C需要更坚固的异常防线?在C的世界里摸爬滚打十几年,我见过太多因为异常处理不当而导致的深夜救火现场。一个看似稳定的服务,可能因为一个未捕获的std::bad_alloc而雪崩;一个精心设计的算法&am…

2026/7/13 3:04:43
SD卡无法格式化怎么解决?【图文讲解】全套安全修复实操完整教程

SD卡无法格式化怎么解决?【图文讲解】全套安全修复实操完整教程

(1)问题背景把相机、行车记录仪的SD卡插到电脑,右键格式化直接弹出「Windows 无法完成格式化」,换读卡器、换 USB 接口全都无济于事,是不是瞬间束手无策?很多人遇到这种故障,要么直接丢掉存储卡…

2026/7/13 3:04:43
Zotero 高级配置:5 个隐藏首选项优化文献管理与同步效率

Zotero 高级配置:5 个隐藏首选项优化文献管理与同步效率

Zotero 高级配置:5 个隐藏首选项优化文献管理与同步效率1. 解锁Zotero的隐藏潜能:about:config入门指南在科研工作者的数字工具箱中,Zotero早已超越简单的文献管理工具,成为学术工作流的核心枢纽。然而大多数用户仅停留在基础功能…

2026/7/13 3:04:43
OSS 文件下载 3 种方案对比:控制台、SDK 本地下载与流式下载的适用场景

OSS 文件下载 3 种方案对比:控制台、SDK 本地下载与流式下载的适用场景

OSS 文件下载方案深度对比:控制台、SDK 本地下载与流式下载的工程实践指南在云端存储架构中,对象存储服务(OSS)已成为企业数据管理的核心组件。面对不同业务场景下的文件下载需求,技术团队往往需要在控制台操作、SDK本…

2026/7/13 2:59:43

月新闻