您的从入职到离职流程:职位管理数据模板
您的从入职到离职流程:职位管理数据模板
- 全面分析所需的建议属性
- 准确发现流程所需跟踪的关键活动
- 专为Microsoft Dynamics 365 Human Resources提供的数据提取指南
从入职到离职流程:职位管理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间 EventTime | 表示活动发生时间的时间戳。 | ||
| 说明 事件时间(即时间戳)记录活动完成的准确日期和时间,对于按时间顺序排列事件以及计算持续时间和周期时间至关重要。 几乎所有流程挖掘分析都会使用此属性,从构建流程图到计算“平均岗位审批周期时间”等绩效KPI。它有助于确定延误发生的时间,以及流程每个步骤所需的时长。 重要性 此时间戳对于排列事件顺序、计算所有基于时间的指标以及发现流程瓶颈至关重要。 获取途径 此信息通常位于系统日志表中,或Dynamics 365 HR中岗位和工作流记录关联的“CreatedDateTime”或“ModifiedDateTime”字段中。 示例 2023-04-15T09:00:00Z2023-04-15T14:35:10Z2023-04-18T11:21:05Z2023-05-02T16:45:00Z2024-01-10T10:00:00Z | |||
| 岗位ID PositionId | 组织内特定岗位的唯一标识符。 | ||
| 说明 岗位ID是主要案例标识符,可关联单个组织岗位的所有活动和数据点。借助它,您可以端到端跟踪岗位的完整生命周期,从创建和修改到最终停用或关闭。 在流程分析中,此ID对于重建每个岗位的完整过程至关重要。它支持创建仪表板,用于监控周期时间、发现审批瓶颈,并分析从申请到关闭的流程变体。 重要性 这是将所有相关事件关联到同一流程案例的核心标识符,可用于分析岗位的端到端生命周期。 获取途径 在Microsoft Dynamics 365 Human Resources中,通常对应HcmPosition.PositionId字段。可在HcmPositionV2Entity等数据实体中找到。 示例 POS001234MKT-0056FIN-SR-ANALYST-02HRBP-EAST-01IT-DEV-9876 | |||
| 活动名称 ActivityName | 岗位管理流程中发生的具体事件或任务名称。 | ||
| 说明 此属性描述岗位生命周期中的单个步骤,例如“已发起岗位申请”“已在HR系统中创建岗位”或“岗位已停用”。它构成流程图的基础,展示事件发生的顺序。 分析活动名称有助于直观呈现流程顺序流、发现偏离标准流程的情况,并计算不同步骤之间的转换时间。这是了解发生了什么以及事件先后顺序的基础。 重要性 它定义流程步骤,支持绘制流程图并分析流程顺序流和差异。 获取途径 此属性根据Microsoft Dynamics 365 Human Resources中的业务事件、状态变更或工作流历史记录生成,并非单一字段,而是结合数据上下文构建。 示例 已发起岗位申请岗位申请已获经理批准已在HR系统中创建岗位岗位属性已修改岗位已关闭 | |||
| 成本中心 CostCenter | 职位费用所分摊到的财务成本中心。 | ||
| 说明 成本中心是重要的财务维度,可将职位关联到特定预算或财务责任范围。需要重点监控此属性的变化。 “职位数据一致性检查”仪表板会分析创建后关键属性的变化,因此成本中心是其中的重要属性。它也用于按不同财务单位分析职位相关成本和预算。 重要性 此属性将职位与财务数据关联,支持成本相关的流程分析和数据一致性监控。 获取途径 此属性通常作为财务维度配置在职位记录中。请参阅Dynamics 365中的财务维度设置。 示例 CC-1001-FINCC-2500-ITCC-4510-SALESCC-7000-OPSCC-9002-HR | |||
| 用户名 UserName | 执行活动的用户姓名或ID。 | ||
| 说明 此属性用于识别负责某个流程步骤的员工或系统用户,例如批准申请的经理,或在系统中创建职位的人力资源专员。 按用户分析有助于发现培训需求、比较团队成员的绩效并了解工作量分布。此外,该属性也是开展一致性检查、确保职责适当分离的关键依据。 重要性 此属性有助于明确责任,并按个人或团队分析绩效,对于资源管理和培训至关重要。 获取途径 此信息关联到Dynamics 365 HR中的工作流历史记录或审计跟踪记录,也可能通过HcmWorker实体中的用户ID关联。 示例 John SmithJane DoeSYSTEMHRAdmin01MGR-FINANCE | |||
| 结束时间 EndTime | 表示活动完成时间的时间戳。 | ||
| 说明 EndTime标记活动的结束时间。StartTime与EndTime之间的时长,就是该活动的处理时间。 此属性对于计算活动级别的耗时、了解流程中的时间分布至关重要。例如,可据此判断经理收到职位申请后,花了多长时间完成审批。 重要性 此属性可用于计算活动处理时间,是开展详细绩效分析和瓶颈分析的基础。 获取途径 此值可根据后续事件的时间戳,或Dynamics 365 HR工作流日志中的特定“完成”字段推导得出,通常需要进行推断。 示例 2023-04-15T09:05:12Z2023-04-15T15:00:00Z2023-04-19T09:00:00Z2023-05-03T10:00:00Z2024-01-10T10:05:00Z | |||
| 职位名称 JobTitle | 与该职位关联的岗位名称,例如“高级会计师”。 | ||
| 说明 职位名称可说明职位的角色和职责,与职位ID不同,多个职位可以使用同一职位名称。 在分析中,此属性可用于按岗位类型分组和筛选。借助“职位重新分类趋势”仪表板,您可以查看哪些类型的岗位最常被重新分类。 重要性 此属性补充了关键业务背景信息,支持按岗位、层级或职能开展分析。 获取途径 此信息关联自与Position相关的“Job”记录。您可以在HcmPositionV2Entity等实体中查找,也可以通过联接HcmJobEntity获取。 示例 高级财务分析师软件工程师II人力资源业务伙伴市场营销协调员物流经理 | |||
| 职位状态 PositionStatus | 职位当前或历史状态。 | ||
| 说明 此属性表示职位在某个时间点的状态,例如“拟议”“活跃”“冻结”或“已关闭”。状态变化通常对应流程中的活动。 跟踪状态对于了解职位的整个历程,以及使用“职位合规审核状态”和“长期未更新及未充分利用的职位”等仪表板至关重要。它可呈现职位的当前状态快照,并帮助验证流程顺序。 重要性 此属性清晰标明每个职位的状态,是筛选案例和了解结果的必要依据。 获取途径 请参阅Microsoft Dynamics 365 Human Resources文档。此信息可能来自核心Position记录中的状态字段。 示例 拟议审核中活跃冻结已关闭 | |||
| 部门 DepartmentName | 职位所属的部门。 | ||
| 说明 此属性指定职位所属的组织部门,例如“财务”“市场营销”或“IT”,是筛选和汇总流程数据的主要维度。 按部门分析是“部门职位处理量”仪表板的关键。通过此分析,您可以比较流程绩效、发现部门特有的瓶颈,并了解企业不同部门的招聘趋势。 重要性 此属性支持按业务单元细分流程分析,帮助发现部门特有的问题并比较绩效。 获取途径 此信息属于职位详情,通常存储在HcmPositionDetail实体中,并关联到运营单位维度。 示例 财务信息技术销售与市场营销人力资源运营 | |||
| 地点 Location | 职位所在的实际地点或地理位置。 | ||
| 说明 此属性指定职位的所在地,可以是办公室、城市或国家/地区,也是筛选和细分流程数据的重要维度。 “部门职位处理量”仪表板会直接使用地点数据,分析不同地区的人员配置趋势和流程绩效。您还可以据此判断某些地点的职位创建或审批流程是否较慢。 重要性 此属性提供地理背景信息,支持分析不同地点的流程绩效和趋势。 获取途径 请参阅Microsoft Dynamics 365 Human Resources文档。此信息可能属于职位详情,也可能通过部门或法人实体关联。 示例 纽约,US伦敦,UK柏林,德国新加坡远程 | |||
| 审批周期时间 ApprovalCycleTime | 从发起职位申请到最终获批的总时长。 | ||
| 说明 此计算指标衡量从“发起职位申请”到最终审批活动(例如“人力资源部门批准职位申请”)的时长,是职位管理流程前期的重要绩效指标。 此属性会直接填充“职位审批周期时间”仪表板和KPI,可用于整体衡量审批流程的效率,并跟踪改进措施的长期影响。 重要性 此关键KPI衡量整个审批流程的效率,能直接显示职位获批并进入创建阶段前的延误。 获取途径 此指标在案例级别计算:找到审批阶段开始和结束活动的时间戳,再计算两者之间的时长。 示例 P3DT2H15MP10DP1DT12HP5DT6HP2W | |||
| 拒绝原因 RejectionReason | 职位申请被拒绝时填写的原因。 | ||
| 说明 经理或人力资源部门拒绝职位申请时,通常会记录原因,例如预算受限、信息有误或战略调整。 此属性对于计算“职位申请拒绝率”KPI、了解返工原因至关重要。分析常见拒绝原因,有助于发现申请质量不佳或指引不明确等上游问题,并采取措施改进流程。 重要性 此属性可直接说明申请未获批准的原因,帮助有针对性地改进流程,减少返工和拒绝。 获取途径 请参阅Microsoft Dynamics 365 Human Resources文档。拒绝原因通常记录在工作流评论中,或保存在专用的原因代码字段中。 示例 预算不足重复申请岗位资料有误招聘冻结战略调整 | |||
| 数据最后更新时间 LastDataUpdate | 源系统最近一次数据刷新的时间戳。 | ||
| 说明 此属性表示上次从Microsoft Dynamics 365 Human Resources提取数据的时间,可帮助判断分析所用数据的新旧程度。 在仪表板中显示此信息,可让用户确认查看的是最新数据。这是流程挖掘项目的重要元数据。 重要性 此信息可让用户了解数据的时效性,这对于依据分析结果做出决策至关重要。 获取途径 此时间戳在数据提取、转换和加载(ETL)过程中生成并保存。 示例 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| 是否返工 IsRework | 用于标记某项活动是否属于返工循环的标志。 | ||
| 说明 如果某项活动表示流程中重复执行的步骤,此布尔标志将设为true,例如修改属性后再次审批。它有助于量化低效的流程循环。 此属性可直接用于“职位返工分析”仪表板和“职位创建返工率”KPI。标记返工后,分析人员可以轻松筛选并衡量流程低效的频率和影响。 重要性 此属性可明确识别并量化流程返工,这是流程改进工作的重点之一。 获取途径 此值根据案例中的活动顺序计算。例如,如果“经理批准职位申请”发生在“修改职位属性”之后,就可以将其标记为返工。 示例 truefalse | |||
| 源系统 SourceSystem | 数据提取自哪个系统。 | ||
| 说明 此属性用于标识流程数据的来源。对于此视图,通常为“Microsoft Dynamics 365 Human Resources”。 在包含多个系统的环境中,此字段对于数据沿袭和问题排查至关重要。它有助于确认数据来自预期来源,也可用于筛选特定系统的分析结果。 重要性 它提供数据来源的背景信息,对于数据治理和跨多个企业系统的分析非常重要。 获取途径 这是在数据提取和转换过程中添加的静态值,用于标记数据集的来源。 示例 Microsoft Dynamics 365 Human ResourcesD365 HRDynamicsHR | |||
| 申请经理 RequestingManager | 发起职位申请的经理。 | ||
| 说明 此属性用于识别发起流程的招聘经理或部门负责人,他们申请了新职位或补缺职位。此信息可说明职位需求的来源。 按申请经理分析,有助于发现申请量、审批率和申请质量方面的规律,也能进一步了解工作量和流程执行情况。 重要性 此属性有助于追溯职位需求的来源,并从招聘经理的角度分析流程指标。 获取途径 请参阅Microsoft Dynamics 365 Human Resources文档。此信息可能记录在工作流发起数据中。 示例 Robert JonesSusan MillerDavid ChenMaria GarciaPaul Williams | |||
| 职位族 JobFamily | 按相似职能归类的一组岗位,例如“工程”或“财务”。 | ||
| 说明 职位族是一种分类方式,用于归纳相关职位名称。例如,“软件工程师”和“质量保证工程师”都可能属于“工程”职位族。 此属性对于“职位重新分类趋势”仪表板至关重要,可用于从更高层级分析哪些职位类别变化最频繁。与逐一查看职位名称相比,它能提供更全面的视角。 重要性 此属性支持按类别开展更全面的职位分析,有助于制定战略性人力规划和分析趋势。 获取途径 此信息属于Dynamics 365 HR中的岗位设置。请在HcmJobEntity中查找与“职位族”或“岗位职能”相关的字段。 示例 工程财务与会计销售人力资源产品管理 | |||
| 职位类型 PositionType | 将职位归类为全职、兼职、临时等类型。 | ||
| 说明 此属性根据职位的雇佣条款对职位进行分类,为人力分析和规划提供更多背景信息。 在流程分析中,按职位类型筛选可揭示不同类型的职位是否采用不同流程路径,或是否需要更长的周期时间。例如,与长期全职职位相比,临时职位的审批流程可能更快、更精简。 重要性 此属性支持分析不同雇佣类型对应的流程差异,帮助开展人力规划和流程优化。 获取途径 此信息通常可在Dynamics 365 HR的职位记录中找到。请在HcmPositionV2Entity等实体中查找相关字段。 示例 全职兼职合同工实习生临时 | |||
| 预算是否已批准 IsBudgetApproved | 用于标记职位预算是否已获批准。 | ||
| 说明 如果某个职位案例中发生了“职位预算已批准”活动,此布尔属性的值为true。它有助于分析流程顺序,并发现因等待预算而停滞的职位。 您可以使用此属性筛选流程,更有效地分析“职位预算审批周期时间”KPI。它能区分预算已获批和未获批的职位,便于开展瓶颈分析。 重要性 此属性以清晰的标志简化关键里程碑分析,帮助单独识别和衡量预算审批阶段。 获取途径 在数据转换过程中,通过检查案例历史记录中是否存在“职位预算已批准”活动来推导此值。 示例 truefalse | |||
从入职到离职流程:职位管理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 岗位已停用 | 岗位不再活跃,并从当前组织架构中移除,通常发生在岗位已有人任职之后。可根据状态变为“未活跃”或类似状态推断此事件。 | ||
| 重要性 标志着岗位活跃阶段结束,是分析平均岗位停用时间和准确管理员工人数的关键节点。 获取途径 根据“RetirementDate”字段填入日期,或岗位记录中的状态字段变为“未活跃”时的时间戳推断。 采集 根据岗位的RetirementDate设置日期,或状态字段变为“未活跃”的日期确定。 事件类型 inferred | |||
| 岗位已关闭 | 表示岗位记录已最终归档,标志着其生命周期彻底结束。可根据状态变为“已关闭”或类似终止状态推断此事件。 | ||
| 重要性 这是流程的终止事件,可用于完整分析岗位端到端生命周期,并帮助发现应予关闭的长期未更新岗位。 获取途径 根据岗位记录中的状态字段变为“已关闭”推断。由于记录通常会保留以供查询,因此此情况不如停用常见。 采集 根据状态字段更新为“已关闭”时的时间戳推断。 事件类型 inferred | |||
| 岗位已激活 | 标志着岗位正式开放并可开始招聘。通常根据岗位记录中的状态字段变为“活跃”或类似状态推断此事件。 | ||
| 重要性 这是衡量招聘就绪情况和最终设置阶段效率的关键节点,也是平均岗位激活时间KPI的重要依据。 获取途径 跟踪岗位记录中的状态字段(例如“PositionStatus”)更新为“活跃”或“开放”时的时间戳来推断。 采集 根据岗位的ActivationDate字段填入日期,或状态字段变为“活跃”的日期确定。 事件类型 inferred | |||
| 岗位申请已获人力资源部门批准 | 表示岗位正式创建前已获得人力资源部门的最终批准。人力资源审批任务在工作流系统中完成时,会明确记录此事件。 | ||
| 重要性 这标志着审批阶段结束,是衡量平均岗位审批周期时间的关键节点。 获取途径 人力资源代表完成审批任务时,系统会将此事件记录在工作流历史记录表中,例如WorkflowTrackingTable。 采集 人力资源审批步骤完成后,系统会将带时间戳的事件记录在工作流历史记录中。 事件类型 explicit | |||
| 已发起岗位申请 | 标志着岗位管理生命周期正式开始。通常在用户通过Dynamics 365 HR中的专用表单或工作流提交新岗位申请时记录此事件。 | ||
| 重要性 这是衡量岗位完整生命周期的起点,包括岗位审批周期时间和岗位创建前置时间等关键KPI。 获取途径 从岗位申请记录的创建时间戳,或工作流历史记录表中的发起记录提取,例如WorkflowTrackingStatusTable。 采集 提交新的岗位申请工作流时记录此事件。 事件类型 explicit | |||
| 已在HR系统中创建岗位 | 此事件标志着岗位记录已在Dynamics 365 HR中正式创建,可从岗位主记录本身的创建时间戳提取。 | ||
| 重要性 这是一个关键节点,标志着岗位申请转变为实际的组织岗位,也是岗位创建前置时间KPI的终点。 获取途径 从岗位主表中的“CreatedDateTime”系统字段提取,例如HcmPosition。 采集 从HcmPosition表的CreatedDateTime系统字段提取。 事件类型 explicit | |||
| 岗位属性已修改 | 表示岗位创建后对其关键属性所做的任何变更,例如职位名称或部门。通常通过跟踪系统数据库日志中的变更来推断此活动。 | ||
| 重要性 此活动频繁发生可能表明数据质量较差或流程存在返工。它是岗位属性变更频率和返工率KPI的重要依据。 获取途径 如果已为岗位表启用变更跟踪,可从SysDatabaseLog表推断。也可以通过比较岗位数据的历史快照来识别变更。 采集 通过数据库日志检测HcmPosition表关键字段的更新操作来推断。 事件类型 inferred | |||
| 岗位已冻结 | 表示岗位已暂时搁置,无法开展招聘活动。可根据岗位记录中的状态变为“冻结”或“暂停”等状态推断此事件。 | ||
| 重要性 跟踪岗位生命周期中的中断情况,这些中断可能影响人员配置计划和预算,并有助于发现招聘延误的原因。 获取途径 跟踪岗位记录中的状态字段更新为“冻结”或类似值时的时间戳来推断。 采集 根据状态变为“冻结”或“暂停”时的时间戳推断。 事件类型 inferred | |||
| 岗位已完成合规审查 | 表示岗位已完成正式的一致性检查。可通过状态变更、已完成的检查清单任务或自定义字段更新来记录此事件。 | ||
| 重要性 此活动对于监控岗位是否遵循监管要求和内部政策至关重要,并直接支持岗位合规遵循率KPI。 获取途径 通常可根据带时间戳的状态字段(例如“ComplianceReviewStatus”)或岗位记录中的布尔字段“IsComplianceReviewed”推断。 采集 根据合规状态字段更新为“已完成”或“已审查”时的时间戳推断。 事件类型 inferred | |||
| 岗位已重新分类 | 这是一次重要更新,表示岗位的基本分类(例如职位族或层级)发生了变更。通常可根据岗位记录中“Job”字段的变更推断。 | ||
| 重要性 有助于分析组织架构变更和职位定义的稳定性,是岗位重新分类率KPI的关键活动。 获取途径 根据HcmPosition表中“JobId”字段的变更推断,可通过数据库日志捕获,也可通过比较不同时期的记录版本识别。 采集 根据岗位记录中职位分类字段的变更日志推断。 事件类型 inferred | |||
| 岗位申请已拒绝 | 表示岗位申请在某个审批阶段被拒绝。审批人选择“拒绝”操作时,工作流历史记录中会明确记录此事件。 | ||
| 重要性 此事件有助于发现流程失败和返工循环。分析拒绝原因有助于提高初始申请质量,并支持岗位申请拒绝率KPI。 获取途径 针对具体岗位申请,在工作流历史记录表中记录为“已拒绝”状态,例如WorkflowTrackingStatusTable。 采集 审批人执行拒绝操作时,从工作流日志中提取。 事件类型 explicit | |||
| 岗位申请已获经理批准 | 表示招聘经理已完成第一轮审批。经理完成分配给自己的审批任务后,工作流历史记录中会明确记录此事件。 | ||
| 重要性 用于确定首轮审批所需时间,帮助发现特定经理或部门造成的瓶颈。 获取途径 作为已完成步骤记录在与岗位申请相关的工作流历史记录表中,例如WorkflowTrackingTable。 采集 从工作流日志中的经理审批步骤完成时间戳提取。 事件类型 explicit | |||
| 岗位预算已批准 | 这是关键审批节点,确认新岗位已获得所需资金。通常作为岗位创建工作流中的独立审批步骤记录。 | ||
| 重要性 单独识别财务审批阶段,以便分析预算分配相关的延误,并支持岗位预算审批周期时间KPI。 获取途径 作为已完成的审批任务记录在工作流历史记录表中,例如WorkflowTrackingTable,通常分配给财务角色。 采集 从工作流日志中的预算审批任务完成时间戳提取。 事件类型 explicit | |||
| 招聘流程已启动 | 表示岗位管理已移交至招聘环节。创建新的空缺岗位或招聘项目并关联到此岗位ID时,可推断此事件。 | ||
| 重要性 将岗位管理流程与招聘结果关联起来,从而分析岗位激活到实际招聘活动开始之间的时间。 获取途径 通过识别招聘或空缺岗位表中记录的创建日期来推断,例如引用岗位ID的HcmRecruitingRequest记录。 采集 通过将PositionId与招聘模块中相应记录的创建时间关联来推断。 事件类型 inferred | |||
数据提取指南
步骤
- 打开数据管理工作空间:登录Microsoft Dynamics 365 Human Resources。在主搜索栏中搜索并打开“数据管理”工作空间。
- 创建新的导出项目:在工作空间中选择“导出”磁贴。在“导出”项目页面上,点击“新建”创建项目。输入易于识别的名称,例如“PositionManagement_EventLog_Export”,并选择数据格式。建议选择“CSV”,便于后续转换。
- 向项目添加数据实体:在新建的项目中,点击“添加实体”。要完整记录职位生命周期,需要添加多个实体。依次添加以下关键实体:“HcmPositionV2”、“WorkflowTrackingStatusTable”和“HcmRecruitingRequest”。如果已启用职位变更的数据库日志记录,还需添加“SysDatabaseLog”。
- 配置实体筛选器:务必为每个实体设置筛选器,以限制数据范围。选择一个实体,然后点击“筛选”。对于“HcmPositionV2”,使用“CreatedDateTime”或“ModifiedDateTime”字段筛选特定日期范围。对于“WorkflowTrackingStatusTable”,筛选“CONTEXTTABLENAME”,仅包含与职位相关的工作流。
- 为每个实体选择字段:确保导出后续转换所需的所有字段。对于“HcmPositionV2”,包括“PositionId”、“CreatedDateTime”、“ActivationDate”、“RetirementDate”、“ModifiedDateTime”、“JobId”和“DepartmentNumber”。对于“WorkflowTrackingStatusTable”,包括“ContextRecId”、“WorkflowTrackingStatus”、“CreatedDateTime”和“UserId”。
- 运行导出作业:配置好所有实体、字段和筛选器后,在项目主页点击“导出”。系统将创建一个数据包,其中每个实体对应一个独立文件。
- 监控并下载数据包:您可以在“作业历史记录”部分查看作业进度。作业成功完成后,下载压缩格式的数据包。
- 解压并转换数据:解压下载的数据包。您会看到每个实体对应的CSV文件。这些文件是原始数据,并非最终事件日志。您需要使用外部脚本(例如通过Python和pandas或PowerShell)处理这些文件。
- 编写转换逻辑:脚本必须执行以下操作:
- 加载“HcmPositionV2.csv”文件。使用“PositionId”和“CreatedDateTime”生成“职位在HR系统中创建”活动。
- 根据“HcmPositionV2.csv”中的状态字段或“ActivationDate”和“RetirementDate”等日期字段,生成状态变更事件(“职位已激活”、“职位已冻结”、“职位已停用”、“职位已关闭”)。
- 加载“WorkflowTrackingStatusTable.csv”文件,并使用记录ID与职位数据联接。根据这些数据生成工作流事件:“职位申请已发起”、“职位申请已获经理批准”、“职位预算已批准”、“职位申请已获HR批准”和“职位申请已拒绝”。您需要将工作流状态和步骤上下文映射到相应的活动名称。
- 如果导出了“SysDatabaseLog.csv”,请解析该文件,根据HcmPosition表中特定字段的变更生成“职位属性已修改”和“职位已重新分类”事件。
- 加载“HcmRecruitingRequest.csv”,查找特定职位的招聘申请创建时间,以生成“招聘流程已启动”活动。
- 汇总最终事件日志:脚本应将不同来源生成的所有事件合并到一个CSV文件中。该文件必须包含“PositionId”、“ActivityName”和“EventTime”列,以及您能够映射的其他建议属性。
- 设置上传格式:确保最终CSV文件的表头与所需属性名称一致,并将“EventTime”列设为统一的时间戳格式。现在即可将文件上传到流程挖掘工具。
配置
- 关键数据实体:提取数据所需的主要实体包括:
HcmPositionV2:包含每个职位的核心信息,包括创建日期、激活日期,以及职位和部门等属性。WorkflowTrackingStatusTable:记录工作流实例的历史信息,包括提交、批准和拒绝记录,是跟踪审批流程的关键数据。HcmRecruitingRequest:当招聘申请与某个职位关联时,可用于推断“招聘流程已启动”活动。SysDatabaseLog:可选实体,可用于记录“职位属性已修改”和“职位已重新分类”等详细变更。是否使用取决于是否已为HcmPosition表预先配置数据库日志记录。
- 日期范围筛选:建议根据“CreatedDateTime”字段为“HcmPositionV2”实体设置日期范围筛选。通常可先选择6至12个月,以便控制数据量。
- 增量导出:如需持续分析,可将导出项目配置为增量导出。这样只会提取自上次运行以来发生变更的记录,显著缩短处理时间。
- 前提条件:执行导出的用户必须拥有足够权限,能够访问“数据管理”工作空间并读取所有指定的数据实体。通常需要“数据管理管理员”角色,或具有相应实体权限的自定义角色。
查询示例 sql
/*
This extraction uses the Dynamics 365 Data Management Framework. The 'query' is defined by configuring an export project via the user interface, not by running a script directly against the database.
A post-processing script is required to transform the output of this configuration into a final event log.
*/
-- Data Export Project Configuration --
Project Name: PositionManagement_EventLog_Export
Data Format: CSV
-- Entity 1: Positions --
Source Entity: HcmPositionV2
Fields to Export:
- PositionId
- CreatedDateTime (Used for 'Position Created In HR System' event)
- ActivationDate (Used for 'Position Activated' event)
- RetirementDate (Used for 'Position Deactivated' / 'Position Closed' event)
- ModifiedDateTime (Can be used for 'Position Attributes Modified' if SysDatabaseLog is not available)
- JobId (Used for 'Position Reclassified' event and 'JobTitle' attribute)
- DepartmentNumber (Used for 'DepartmentName' attribute)
- [Other fields for attributes like CostCenter, PositionStatus]
-- Entity 2: Workflow History --
Source Entity: WorkflowTrackingStatusTable
Fields to Export:
- ContextRecId (The record ID, used to link back to the HcmPosition record)
- ContextTableName (Filter this for 'HcmPosition')
- WorkflowTrackingStatus (Values like 'Submitted', 'Approved', 'Rejected')
- CreatedDateTime (Timestamp for the workflow event)
- UserId (The user who performed the action)
- [Workflow step name or ID field if available, to differentiate approval types]
-- Entity 3: Recruitment Requests --
Source Entity: HcmRecruitingRequest
Fields to Export:
- PositionId
- CreatedDateTime (Used for 'Hiring Process Started' event)
- RecruitingId
-- Entity 4: Database Change Log (Optional) --
Source Entity: SysDatabaseLog
Fields to Export:
- RefRecId (The record ID of the changed record)
- RefTableId (The table ID, filter for HcmPosition)
- CreatedDateTime (Timestamp of the change)
- [Fields indicating the old and new values, if available] 步骤
- 确认前提条件:开始前,请确认已为您的Microsoft Dynamics 365 Human Resources实例配置“自带数据库”(BYOD)功能,并确保所需数据实体已导出到Azure SQL Database。关键实体包括:
HcmPositionV2、HcmPositionDetail、WorkflowTrackingStatusTable、HcmJob、OMOperatingUnit和HcmRecruitingRequest。 - 连接Azure SQL Database:使用SQL Server Management Studio(SSMS)或Azure Data Studio等SQL客户端工具,连接到用作BYOD目标的Azure SQL Database。
- 确认数据库架构:连接后,先熟悉数据库架构。D365 HR数据实体会复制为表。请注意,BYOD数据库中的表名可能与实体名称不完全相同,但通常非常接近。
- 加载SQL查询:在SQL客户端中打开新的查询窗口,并粘贴本文档“query”部分提供的完整SQL脚本。
- 自定义参数:修改查询中的占位变量。将
@[YourCompanyId]设为您要分析的具体法人实体(例如“USMF”)。调整WHERE子句中的日期范围(例如CREATEDDATETIME >= '2023-01-01'),以限定所需的提取时段。 - 执行查询:对BYOD数据库运行完整SQL查询。执行时间取决于数据量和所选日期范围。
- 检查结果:查询完成后,在SQL客户端的结果窗格中检查输出。确认
PositionId、ActivityName、EventTime等列已按预期填充。 - 导出为CSV:将完整结果集导出为CSV文件。大多数SQL客户端都支持直接将结果保存为CSV。例如,在SSMS中,您可以右键点击结果网格并选择“将结果另存为...”。
- 准备上传:确保导出的CSV文件采用UTF-8编码。确认列标题与所需属性(
PositionId、ActivityName、EventTime等)完全一致,以便顺利上传到流程挖掘工具。
配置
- BYOD数据实体:确保所有必要的数据实体均已从Dynamics 365 HR发布到您的BYOD实例。此流程所需的关键实体包括职位、职位详情、工作流历史、职位、部门和招聘申请相关实体。
- 数据延迟:请注意,BYOD采用近实时复制,并非即时同步。D365 HR中的事务发生后,数据可能需要几分钟到一小时才会出现在Azure SQL Database中。
- 日期范围筛选:务必为查询设置日期筛选,以控制性能和数据量。通常可先选择3至6个月的范围,并在每个
UNION ALL块中按创建时间戳或事件时间戳筛选。 - 公司筛选:请始终按
DATAREAID(法人实体或公司ID)进行筛选,确保分析正确的组织单元。提供的查询中包含占位符@[YourCompanyId],供您设置公司ID。 - 前提条件:此方法需要有效的Azure订阅、已配置的BYOD实例、目标Azure SQL Database的读取权限,以及适用于执行查询的SQL客户端工具。
- 自定义工作流步骤:查询使用常见的审批步骤名称,例如“批准职位申请”。如果您的组织为这些工作流步骤使用了自定义名称,则需要更新相应
WHERE子句中的CONTEXT值。
查询示例 sql
SELECT
p.POSITIONID AS PositionId,
'Position Request Initiated' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Initiated' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 1 -- Submitted
AND w.CONTEXT LIKE '%Create position request%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Approved By Manager' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Pending Budget' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%Manager approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Budget Approved' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Pending HR' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%Budget approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Approved By HR' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Approved' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%HR approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Rejected' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Rejected' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 3 -- Rejection
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Created In HR System' AS ActivityName,
p.CREATEDDATETIME AS EventTime,
p.CREATEDDATETIME AS EndTime,
p.CREATEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Created' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.DATAREAID = '[YourCompanyId]'
AND p.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Attributes Modified' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
p.MODIFIEDDATETIME AS EndTime,
p.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Modified' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.MODIFIEDDATETIME > p.CREATEDDATETIME
AND p.DATAREAID = '[YourCompanyId]'
AND p.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Reviewed For Compliance' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime,
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Compliance Reviewed' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.[YourComplianceStatusField] = 'Reviewed' -- This requires a custom field indicating compliance review
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Reclassified' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
p.MODIFIEDDATETIME AS EndTime,
p.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Reclassified' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.MODIFIEDDATETIME > p.CREATEDDATETIME -- This is an inference. See known limitations.
AND p.DATAREAID = '[YourCompanyId]'
AND p.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Activated' AS ActivityName,
pd.VALIDFROM AS EventTime,
pd.VALIDFROM AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Active' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.VALIDFROM >= '[StartDate]'
AND p.DATAREAID = '[YourCompanyId]'
UNION ALL
SELECT
hr.POSITIONID AS PositionId,
'Hiring Process Started' AS ActivityName,
hr.CREATEDDATETIME AS EventTime,
hr.CREATEDDATETIME AS EndTime,
hr.CREATEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Recruiting' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmRecruitingRequest hr
JOIN HcmPositionV2 p ON hr.POSITIONID = p.POSITIONID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE hr.DATAREAID = '[YourCompanyId]'
AND hr.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Frozen' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime, -- Assuming a status change triggers modification time
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Frozen' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.[YourPositionStatusField] = 'Frozen' -- Requires a dedicated status field on the position
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Deactivated' AS ActivityName,
pd.VALIDTO AS EventTime,
pd.VALIDTO AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Inactive' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.VALIDTO < '2154-12-31' -- D365 often uses this far-future date for 'never expires'
AND pd.VALIDTO >= '[StartDate]'
AND p.DATAREAID = '[YourCompanyId]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Closed' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime, -- Assuming a status change triggers modification time
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Closed' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.[YourPositionStatusField] = 'Closed' -- Requires a dedicated status field on the position
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]' 立即优化从入职到离职的职位管理流程
将流程周期时间缩短30%,消除瓶颈。
无需信用卡,几分钟即可完成设置。