您的“从入职到退休 - 职位管理”数据模板
您的“从入职到退休 - 职位管理”数据模板
- 建议采集的属性,用于全面分析
- 为确保流程发现准确性需追踪的关键流程活动
- 专门针对 Microsoft Dynamics 365 Human Resources 的数据提取指南
入职到离职 (Hire to Retire) - 职位管理属性
| 名称 | 描述 | ||
|---|---|---|---|
| Event 时间 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 作为主要的 case identifier,将与单个组织职位相关的所有活动和数据点联系起来。这实现了对职位从创建、修改到最终停用或关闭的端到端跟踪。 在流程分析中,此 ID 对于重建每个职位的路径至关重要。它支持监控周期时间、识别审批瓶颈以及分析从申请到关闭的流程变体。 为何重要 这是连接所有相关事件以形成单一流程 case 的核心标识符,从而实现对端到端职位生命周期的分析。 获取方式 这通常是 Microsoft Dynamics 365 Human Resources 中的 HcmPosition.PositionId 字段。可以在 HcmPositionV2Entity 等数据实体中找到。 示例 POS001234MKT-0056FIN-SR-ANALYST-02HRBP-EAST-01IT-DEV-9876 | |||
| 活动名称 ActivityName | 职位管理流程中发生的特定事件或任务的名称。 | ||
| 描述 此属性描述了职位生命周期中的单个步骤,如“职位申请已发起”、“职位已在系统创建”或“职位已停用”。它构成了流程图的骨架。 分析活动名称可以可视化流程流向,识别偏离标准流程的情况,并计算不同步骤之间的转换时间。 为何重要 它定义了流程步骤,支持流程图的可视化展示,以及流程流向和变体的分析。 获取方式 此属性派生自 Microsoft Dynamics 365 Human Resources 内部的业务事件、状态变更或工作流历史。它不是单一字段,而是根据数据上下文构建的。 示例 职位申请已发起经理已批准职位申请HR 系统中已创建职位职位属性已修改职位已关闭 | |||
| 成本中心 CostCenter | 职位费用所属的财务成本中心。 | ||
| 描述 成本中心是连接职位与特定预算或财务责任领域的关键财务维度。监控该属性的变更至关重要。 此属性对于“职位数据一致性检查”仪表板非常关键,可分析创建后关键属性的变动。它还用于分析不同财务单位的职位成本和预算。 为何重要 它将职位与财务 data 相关联,支持成本相关的流程分析并监控 data 的一致性。 获取方式 这通常配置为职位记录上的财务维度。请参考 Dynamics 365 中的财务维度设置。 示例 CC-1001-FINCC-2500-ITCC-4510-SALESCC-7000-OPSCC-9002-HR | |||
| 用户名称 UserName | 执行该活动的用户姓名或ID。 | ||
| 描述 此属性识别负责给定流程步骤的员工或系统用户,例如批准申请的经理或在系统中创建职位的 HR 专家。 按用户分析有助于识别培训需求、比较团队成员绩效并了解工作量分配。 为何重要 它提供了问责机制,并允许按个人或团队进行绩效分析,这对于资源管理和培训至关重要。 获取方式 与 Dynamics 365 HR 中的 workflow 历史记录或审计跟踪记录相关联。通常可以通过 HcmWorker 实体的用户 ID 进行关联。 示例 约翰·史密斯Jane Doe系统HRAdmin01MGR-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 不同,多个职位可以共用同一个职位名称。 在分析中,此属性允许按角色类型进行分组和过滤。它对“职位重新分类趋势”仪表板很有帮助,可以查看哪些类型的职位最常被重新分类。 为何重要 它添加了关键的业务上下文,支持基于工作角色、级别或职能进行分析。 获取方式 此信息链接自与职位关联的“工作”记录。可在 HcmPositionV2Entity 等实体中查找,或通过连接到 HcmJobEntity 获取。 示例 高级财务分析师软件工程师 IIHR业务伙伴市场协调员物流经理 | |||
| 职位状态 PositionStatus | 职位的当前或历史状态。 | ||
| 描述 此属性表示职位在特定时间点的状态,如“建议中”、“活动”、“冻结”或“已关闭”。状态变更通常对应流程中的活动。 为何重要 它为每个职位提供明确的状态,这对于筛选 case 和理解结果至关重要。 获取方式 请参阅 Microsoft Dynamics 365 Human Resources 文档。这通常派生自核心职位记录的状态字段。 示例 建议中审核中在职已冻结已结案 | |||
| 部门 DepartmentName | 职位所属部门。 | ||
| 描述 此属性指定与职位关联的组织部门,如“财务部”、“市场部”或“IT 部”。它是过滤和聚合流程数据的主要维度。 为何重要 它支持按业务单元对流程分析进行细分,有助于识别特定部门的问题并对比绩效。 获取方式 此信息是职位详情的一部分,通常存储在 HcmPositionDetail 实体中,并链接到运营单位维度。 示例 财务信息技术销售与市场人力资源运营 | |||
| 最后数据更新 LastDataUpdate | 源系统最近一次数据刷新时间戳。 | ||
| 描述 此属性表示从 Microsoft Dynamics 365 Human Resources 最后一次提取数据的时间。它为分析的时效性提供了背景。 为何重要 它向用户告知 data 的时效性,这对于根据分析结果做出决策至关重要。 获取方式 此时间戳在数据提取、转换和加载 (ETL) 过程中生成并存储。 示例 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| 地点 Location | 职位的物理或地理位置。 | ||
| 描述 此属性指定职位所在地,可以是办公室、城市或国家。它是过滤和细分流程数据的另一个重要维度。 为何重要 它提供了地理位置上下文,支持跨不同地点分析流程绩效和趋势。 获取方式 请参阅 Microsoft Dynamics 365 Human Resources 文档。这可能是职位详情的一部分,或通过部门或法人实体进行关联。 示例 美国纽约英国伦敦德国柏林新加坡远程 | |||
| 处理时间 ProcessingTime | 在一项活动上实际投入工作的时间长度。 | ||
| 描述 处理时间是指活动 StartTime 与 EndTime 之间的时长。它代表了任务的实际执行时间,不包含等待时间。 该指标是性能分析的基础,广泛应用于“职位创建瓶颈监控”等仪表板中。通过汇总所有活动的处理时间,可以了解职位生命周期的总操作时间,这是效率分析的关键组成部分。 为何重要 它衡量活动的实际工作时长,有助于在瓶颈分析中区分主动工作时间与闲置等待时间。 获取方式 在数据转换时,通过以EndTime减去StartTime(EndTime - StartTime)计算得到。 示例 PT5M12SPT1H30MP2DT4H15MP0DPT8H | |||
| 审批周期时间 ApprovalCycleTime | 从发起职位申请到最终获批的总耗时。 | ||
| 描述 此计算指标测量从“职位申请已发起”活动到最终审批活动之间的时长。它是职位管理流程前端的关键绩效指标。 为何重要 这是一个关键 KPI,用于衡量整个审批流程的效率,能直接揭示职位在准备创建阶段的延迟。 获取方式 这是在 case 层级计算的,通过查找审批阶段开始和结束活动的时间戳并计算差值得到。 示例 P3DT2H15MP10DP1DT12HP5DT6HP2W | |||
| 拒绝原因 RejectionReason | 职位申请被驳回时提供的原因。 | ||
| 描述 当经理或 HR 驳回职位申请时,通常会记录原因。这可能是由于预算限制、信息有误或战略调整。 此属性对于计算“职位申请驳回率”KPI 以及理解返工原因至关重要。分析最常见的驳回原因有助于识别上游问题,如申请质量差或指南不明确。 为何重要 它提供了关于申请失败原因的直接见解,支持针对性的流程改进,以降低返工率和拒绝率。 获取方式 请参阅 Microsoft Dynamics 365 Human Resources 文档。这通常在拒绝时捕捉于 workflow 备注或专用的原因代码字段中。 示例 预算不足重复申请岗位详情错误招聘冻结战略调整 | |||
| 是否返工 IsRework | 指示活动是否属于返工循环一部分的标记。 | ||
| 描述 如果活动代表流程中正在重复的步骤(例如属性修改后的重新审批),则此布尔标志设为 true。它有助于量化低效的流程循环。 为何重要 它明确识别并量化流程返工情况,这是流程改进倡议的主要目标。 获取方式 这是根据 case 的活动顺序计算的。例如,如果“经理批准职位申请”发生在“职位属性已修改”之后,则可以将其标记为返工。 示例 truefalse | |||
| 源系统 SourceSystem | 数据提取来源系统。 | ||
| 描述 此属性识别流程数据的来源。在此视图中,通常为“Microsoft Dynamics 365 Human Resources”。 在多系统环境中,此字段对于数据血缘和故障排除至关重要。 为何重要 它提供了关于 data 来源的上下文,这对于跨多个企业系统的 data 治理和分析非常重要。 获取方式 这是在数据提取和转换过程中添加的静态值,用于标记数据集的来源。 示例 Microsoft Dynamics 365 Human ResourcesD365 HRDynamicsHR | |||
| 申请经理 RequestingManager | 发起职位申请的经理。 | ||
| 描述 此属性识别通过申请新职位或补缺职位来启动流程的招聘经理或部门主管。此信息提供了职位需求来源的背景。 为何重要 它有助于追溯职位需求的来源,并从招聘经理的角度分析流程指标。 获取方式 请参阅 Microsoft Dynamics 365 Human Resources 文档。此信息通常捕捉在 workflow 启动 data 中。 示例 Robert JonesSusan Miller陈大卫Maria GarciaPaul Williams | |||
| 职位类型 PositionType | 将职位分类为全职、兼职、临时等。 | ||
| 描述 此属性根据雇用条款对职位进行分类,为人才规划提供背景。 在流程分析中,按职位类型过滤可以揭示某些职位是否具有不同的流程路径或更长的周期时间。例如,兼职职位可能比全职职位拥有更快速、更简化的审批流程。 为何重要 它支持分析不同雇佣类型的流程差异,助力劳动力规划和流程优化。 获取方式 此信息通常可在 Dynamics 365 HR 的职位记录中找到。请检查 HcmPositionV2Entity 等实体中的相关字段。 示例 全职兼职合同工实习生临时 | |||
| 职族 JobFamily | 具有相似职能的工作组合,例如“工程”或“财务”。 | ||
| 描述 职族是对相关岗位职称进行归类的分类方式。例如,“软件工程师”和“QA 工程师”都可能归属于“工程”职族。 此属性对于“职位重新分类趋势”dashboard 至关重要,因为它支持对变更最频繁的岗位类别进行更高级别的分析,提供比观察单个岗位职称更广阔的视角。 为何重要 它支持对职位进行更广泛的类别化分析,有助于战略劳动力规划和趋势分析。 获取方式 这是 Dynamics 365 HR 中工作设置的一部分。请在 HcmJobEntity 上查找与“工作系列”或“工作职能”相关的字段。 示例 工程部财务与会计销售人力资源产品管理 | |||
| 预算是否已批准 IsBudgetApproved | 指示职位预算是否已获批准的标记。 | ||
| 描述 如果给定职位的“职位预算已批准”活动已发生,则此布尔属性为 true。它有助于分析流程流向并识别卡在等待预算环节的职位。 为何重要 它通过为关键里程碑提供清晰标记来简化分析,有助于独立衡量预算审批阶段。 获取方式 这是在数据转换期间通过检查 case 历史记录中是否存在“职位预算已批准”活动来派生的。 示例 truefalse | |||
入职到离职 (Hire to Retire) - 职位管理活动
| 活动 | 描述 | ||
|---|---|---|---|
| HR 已批准职位申请 | 标志着人力资源部门在正式创建职位前的最终批准。这是工作流系统中完成 HR 审批任务时记录的明确事件。 | ||
| 为何重要 这标志着审批阶段的结束,是衡量整体“平均职位审批周期”的关键里程碑。 获取方式 当 HR 代表完成审批任务时,记录在 workflow 历史表(如 WorkflowTrackingTable)中。 捕获 HR 审批步骤完成后,event 会记录在 workflow 历史记录中并附带 timestamp。 事件类型 explicit | |||
| HR 系统中已创建职位 | 此事件标志着在 Dynamics 365 HR 中正式创建职位记录。它是从主职位记录本身的创建时间戳中获取的。 | ||
| 为何重要 这是一个关键里程碑,标志着从“申请”到“正式组织实体”的转变。它是“职位创建前置时间”这一 KPI 的终点。 获取方式 来自主职位表(如 HcmPosition)的“CreatedDateTime”系统字段。 捕获 提取自 HcmPosition 表上的 CreatedDateTime 系统字段。 事件类型 explicit | |||
| 职位已停用 | 职位不再处于活动状态,并从活动组织架构中移除(通常在职位填补后)。这是通过状态变更为“非活动”或类似状态来推断的。 | ||
| 为何重要 标志着职位活跃期的终点。这对于分析“职位停用平均时长”和精准管理人头数至关重要。 获取方式 根据“RetirementDate”字段被填充或职位记录的状态字段变更为“非活动”时的 timestamp 推断得出。 捕获 根据职位记录中设置 RetirementDate 的日期或状态字段变更为“非活动”的日期确定。 事件类型 inferred | |||
| 职位已关闭 | 代表职位记录的最终归档,标志着其生命周期的彻底结束。此事件通过状态变更为“已关闭”或类似的终止状态来推断。 | ||
| 为何重要 这是流程的终点事件,可实现完整的端到端生命周期分析,并有助于识别应关闭的陈旧职位。 获取方式 根据职位记录中状态字段变更为“已关闭”推断得出。由于通常保留历史记录,这比“停用”相对少见。 捕获 根据状态字段更新为“已关闭”时的 timestamp 推断得出。 事件类型 inferred | |||
| 职位已激活 | 标志着职位正式开放、可以开始招聘的时间点。此 event 根据职位记录中的状态字段变更为“活动”或类似状态推断得出。 | ||
| 为何重要 这是衡量人员配置就绪情况和最终设置阶段效率的关键里程碑。它对于“平均职位激活时间”这一 KPI 至关重要。 获取方式 通过追踪职位记录中状态字段(如“PositionStatus”)更新为“活动”或“开放”时的 timestamp 来推断。 捕获 根据职位记录中填充 ActivationDate 字段的日期或状态字段变更为“活动”的日期确定。 事件类型 inferred | |||
| 职位申请已发起 | 标志着职位管理生命周期的正式开始。当用户通过 Dynamics 365 HR 中的专用表单或 workflow 提交新职位申请时,通常会捕捉到此 event。 | ||
| 为何重要 这是衡量整个职位生命周期的起点,包括“职位审批周期”和“职位创建提前期”等关键 KPI。 获取方式 捕捉自职位申请记录的创建 timestamp 或 workflow 历史表(如 WorkflowTrackingStatusTable)中的启动记录。 捕获 提交新的职位申请 workflow 时,该 event 即被记录。 事件类型 explicit | |||
| 招聘流程已开始 | 标志着从职位管理到招聘的交接。当创建新的职位空缺或招聘项目并关联至特定职位 ID 时,即可推断出此事件。 | ||
| 为何重要 将职位管理流程与其结果相连,以便分析职位激活与实际招聘活动开始之间的时间间隔。 获取方式 通过识别引用该职位 ID 的招聘或空缺表(如 HcmRecruitingRequest)中记录的创建日期来推断。 捕获 通过将 PositionId 链接到招聘模块中相应记录的创建来推断。 事件类型 inferred | |||
| 经理已批准职位申请 | 代表招聘经理完成第一线审批。当经理完成分配的审批任务时,此事件会显式记录在工作流历史中。 | ||
| 为何重要 精确计算初始审批步骤的耗时,帮助识别特定经理或部门存在的瓶颈。 获取方式 作为职位申请关联的 workflow 历史表(如 WorkflowTrackingTable)中已完成的步骤进行记录。 捕获 捕捉自 workflow 日志中经理审批步骤完成时的 timestamp。 事件类型 explicit | |||
| 职位合规性已审核 | 表示职位已通过正式的合规性检查。这可以通过状态变更、完成的检查清单任务或自定义字段的更新来捕捉。 | ||
| 为何重要 对于监控监管及内部政策的执行情况至关重要。此活动直接支持“职位合规依从率”这一 KPI。 获取方式 可能根据职位记录中带有 timestamp 的状态字段(如 ComplianceReviewStatus)或布尔值字段(如 IsComplianceReviewed)推断得出。 捕获 根据合规状态字段更新为“已完成”或“已审查”时的 timestamp 推断得出。 事件类型 inferred | |||
| 职位属性已修改 | 代表职位在初次创建后对其关键属性(如职衔或部门)进行的任何更改。该活动通常通过跟踪系统数据库日志中的更改来推断。 | ||
| 为何重要 该活动频率过高可能意味着 data 质量不佳或流程返工。它对于“职位属性变更频率”和“返工率”KPI 至关重要。 获取方式 如果职位表启用了变更跟踪,则从 SysDatabaseLog 表推断。或者,需要对比职位 data 的历史快照。 捕获 通过数据库日志检测 HcmPosition 表关键字段的更新操作来推断。 事件类型 inferred | |||
| 职位已冻结 | 表示职位已暂时挂起,停止所有招聘活动。这通过推断职位记录中的状态变更为“已冻结”或“挂起”来捕捉。 | ||
| 为何重要 跟踪职位生命周期的中断情况,这些中断可能影响人员配置计划和预算。它有助于识别招聘延迟的原因。 获取方式 通过追踪职位记录中状态字段更新为“已冻结”或类似值的 timestamp 来推断。 捕获 根据状态变更为“已冻结”或“挂起”时的 timestamp 推断得出。 事件类型 inferred | |||
| 职位已重新分类 | 职位的核心分类(如职族或职级)发生重大变更。这通常根据职位记录中“工作 (Job)”字段的变动推断得出。 | ||
| 为何重要 有助于分析组织架构变更和岗位定义的稳定性。这是“职位重新分类率”KPI 的核心活动。 获取方式 根据 HcmPosition 表中“JobId”字段的变更推断得出,通过数据库日志或对比不同时间点的记录版本进行捕捉。 捕获 根据职位记录中工作分类字段的记录变更推断得出。 事件类型 inferred | |||
| 职位申请已驳回 | 表示职位申请在某个审批阶段被拒绝。当审批人选择“拒绝”操作时,该 event 会明确记录在 workflow 历史记录中。 | ||
| 为何重要 揭示流程故障和返工循环。分析拒绝原因有助于提升初始申请的质量,并支持“职位申请拒绝率”KPI。 获取方式 在特定职位申请的工作流历史表(如 WorkflowTrackingStatusTable)中记录为“驳回”状态。 捕获 捕捉自审批人执行拒绝操作时的 workflow 日志。 事件类型 explicit | |||
| 职位预算已批准 | 确认新职位已分配必要资金的关键审批里程碑。这通常捕捉自职位创建 workflow 中一个独立的审批步骤。 | ||
| 为何重要 独立出财务审批阶段,以便分析与预算分配相关的延迟,并支持“职位预算审批周期”KPI。 获取方式 在工作流历史表(如 WorkflowTrackingTable)中记录为已完成的审批任务,通常分配给财务角色。 捕获 捕捉自 workflow 日志中预算审批任务完成时的 timestamp。 事件类型 explicit | |||
提取指南
步骤
- 导航至数据管理工作区:登录 Microsoft Dynamics 365 Human Resources。使用主搜索栏进入“数据管理 (Data management)”工作区。
- 创建新导出项目:在工作区中,选择“导出”磁贴。在项目页面点击“新建”,输入名称如“PositionManagement_EventLog_Export”,并选择 data 格式(建议使用 CSV 以便于后续转换)。
- 添加 data 实体:点击“添加实体”。为捕捉职位的完整生命周期,请依次添加:
HcmPositionV2、WorkflowTrackingStatusTable和HcmRecruitingRequest。如果启用了职位变更的数据库日志,还需添加SysDatabaseLog。 - 配置实体筛选器:务必筛选以限制 data 范围。选择实体后点击“筛选”。针对
HcmPositionV2,根据CreatedDateTime或ModifiedDateTime字段设置日期范围。针对WorkflowTrackingStatusTable,筛选CONTEXTTABLENAME以仅包含职位相关的 workflow。 - 选择导出字段:确保导出转换所需的所有字段。
HcmPositionV2需包含PositionId、CreatedDateTime、ActivationDate、RetirementDate等;WorkflowTrackingStatusTable需包含ContextRecId、WorkflowTrackingStatus、CreatedDateTime和UserId。 - 执行导出作业:配置完成后,点击主页面上的“导出”。系统将创建一个包含各实体文件的 data 包。
- 监控并下载 data 包:在“作业历史记录”中查看进度。作业完成后,下载压缩格式的 data 包。
- 提取并转换 data:解压下载的包。您会看到多个 CSV 文件。这些是原始 data,而非最终的 event 日志。您需要使用外部脚本(如 Python 或 PowerShell)来处理这些文件。
- 实施转换逻辑:您的脚本需执行以下操作:
- 加载
HcmPositionV2.csv。利用PositionId和CreatedDateTime生成“在 HR 系统中创建职位” event。 - 通过解析状态字段或日期字段(如
ActivationDate),生成状态变更 event(如“职位已激活”、“职位已冻结”、“职位已关闭”)。 - 加载
WorkflowTrackingStatusTable.csv。通过记录 ID 与职位 data 关联,生成 workflow event,如“职位申请已启动”、“经理已批准”、“预算已批准”等。需将 workflow 状态映射到正确的活动名称。 - 如果导出了
SysDatabaseLog.csv,解析该文件以根据HcmPosition表特定字段的变更生成“职位属性已修改” event。 - 加载
HcmRecruitingRequest.csv,根据为特定职位创建招聘申请的时间生成“招聘流程已开始” event。
- 加载
- 汇编最终 event 日志:脚本应将所有来源生成的 event 合并为一个 CSV 文件。该文件必须包含:
PositionId、ActivityName和EventTime列,以及您映射的其他属性。 - 格式化以供上传:确保最终 CSV 文件的表头与要求的属性名称一致,且
EventTime列使用统一的 timestamp 格式。现在即可将其上传至 Process Mining 工具。
配置
- 关键 Data 实体:本次导出所需的主要实体包括:
HcmPositionV2:包含职位的核心详情,包括创建日期、激活日期,以及工作和部门等属性。WorkflowTrackingStatusTable:提供 workflow 实例的历史记录,包括提交、审批和拒绝。这对于跟踪审批流程至关重要。HcmRecruitingRequest:当招聘申请与职位关联时,用于推断“招聘流程已开始”活动。SysDatabaseLog:一个可选但功能强大的实体,用于捕捉“职位属性已修改”和“职位已重新分类”等详细变更。其使用取决于是否已预先为 HcmPosition 表配置了数据库日志记录。
- 日期范围筛选:强烈建议根据“CreatedDateTime”字段对“HcmPositionV2”实体应用日期范围筛选。通常以 6 到 12 个月为起点,以确保 data 卷适中。
- 增量导出:对于持续分析,请考虑将导出项目配置为增量导出。这将仅提取自上次运行以来发生变更的记录,从而大幅缩短处理时间。
- 前提条件:执行导出的用户必须拥有足够的安全角色权限,以访问“数据管理”工作区并拥有对所有指定 data 实体的读取权限。通常需要“数据管理管理员”角色或具有特定实体权限的自定义角色。
a 查询示例 config
/*
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)”功能。确保所需的 data 实体已导出至您的 Azure SQL 数据库。关键实体包括:
HcmPositionV2、HcmPositionDetail、WorkflowTrackingStatusTable、HcmJob、OMOperatingUnit和HcmRecruitingRequest。 - 连接至 Azure SQL 数据库:使用 SQL 客户端工具(如 SSMS 或 Azure Data Studio)连接至作为 BYOD 目标的 Azure SQL 数据库。
- 识别数据库架构:连接后,熟悉数据库 schema。D365 HR 的 data 实体会复制为表。请注意,BYOD 数据库中的表名可能与实体名不完全一致,但通常非常相似。
- 加载 SQL 查询:在 SQL 客户端中打开新查询窗口,并粘贴本文档“查询”部分提供的完整 SQL 脚本。
- 自定义参数:修改查询中的占位符变量。将
@[YourCompanyId]设置为待分析的特定法人实体(如 'USMF')。调整WHERE子句中的日期范围(如CREATEDDATETIME >= '2023-01-01')以限制提取的时间段。 - 执行查询:针对 BYOD 数据库运行完整的 SQL 查询。执行时间视 data 卷和所选日期范围而定。
- 检查结果:查询完成后,检查结果窗格。确认
PositionId、ActivityName、EventTime等列已按预期填充。 - 导出为 CSV:将结果集导出为 CSV 文件。大多数 SQL 客户端支持直接保存结果,例如在 SSMS 中右键点击结果网格并选择“将结果另存为...”。
- 准备上传:确保导出的 CSV 文件采用 UTF-8 编码。确认列标题与要求的属性(
PositionId、ActivityName、EventTime等)完全匹配,以便顺利上传至 Process Mining 工具。
配置
- BYOD 数据实体:请确保所有必要的 data 实体都已从 Dynamics 365 HR 发布到您的 BYOD 实例。该流程的关键实体包括职位、职位详情、workflow 历史记录、工作、部门以及招聘申请。
- 数据延迟:请注意,BYOD 是准实时同步而非瞬时同步。在 D365 HR 中发生的交易与 Azure SQL 数据库中显示的 data 之间可能存在几分钟到一个小时的微小延迟。
- 日期范围筛选:为管理性能和 data 卷,在查询中应用日期筛选至关重要。建议初始选择 3 到 6 个月的时间范围。请在每个
UNION ALL块中针对创建或 event 的 timestamp 应用筛选器。 - 公司筛选:请务必通过
DATAREAID(法人实体或公司 ID)进行筛选,以确保分析的是正确的组织单位 data。提供的查询包含占位符@[YourCompanyId]以用于此目的。 - 前提条件:此方法需要有效的 Azure 订阅、已配置的 BYOD 实例、目标 Azure SQL 数据库的读取权限,以及用于执行查询的相应 SQL 客户端工具。
- 自定义 Workflow 步骤:查询中使用了常见的审批 workflow 步骤名称,如“Approve position request”。如果您的组织为这些 workflow 步骤使用了自定义名称,则需要更新对应
WHERE子句中的CONTEXT值。
a 查询示例 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]'