您的入职到离职流程:职位管理数据模板
您的入职到离职流程:职位管理数据模板
- 全面分析所需收集的推荐属性
- 确保准确发现流程所需跟踪的关键活动
- Microsoft Dynamics 365 Human Resources专用数据提取指南
招聘到离职:职位管理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间 EventTime | 表示活动发生时间的时间戳。 | ||
| 说明 Event Time,即时间戳,记录活动完成的准确日期和时间。它对于按时间顺序排列事件,以及计算持续时间和周期时间至关重要。 该属性几乎用于所有流程挖掘分析,从构建流程图到计算“Average Position Approval Cycle Time”等绩效KPI。它有助于定位延迟发生的时间,并了解流程每个步骤所需的时长。 为什么重要 该时间戳对于排列事件、计算所有基于时间的指标以及发现流程瓶颈至关重要。 获取位置 通常可在系统日志表中找到,也可能以“CreatedDateTime”或“ModifiedDateTime”字段的形式存在于Dynamics 365 HR的职位和工作流记录中。 示例 2023-04-15T09:00:00Z2023-04-15T14:35:10Z2023-04-18T11:21:05Z2023-05-02T16:45:00Z2024-01-10T10:00:00Z | |||
| 活动名称 ActivityName | 职位管理流程中发生的具体事件或任务的名称。 | ||
| 说明 此属性描述职位生命周期中的单个步骤,例如“已发起职位申请”“已在HR系统中创建职位”或“职位已停用”。它构成流程图的基础,用于展示事件顺序。 分析活动名称可以帮助您可视化流程路径,识别偏离标准流程的情况,并计算不同步骤之间的转换时间。它是了解发生了什么以及发生顺序的基础。 为什么重要 它定义流程中的步骤,使您能够可视化流程图,并分析流程路径及其变化。 获取位置 该属性源自Microsoft Dynamics 365 Human Resources中的业务事件、状态变更或工作流历史。它不是单一字段,而是根据数据上下文构建。 示例 职位申请已发起职位申请已获经理批准职位已在HR系统中创建职位属性已修改职位已关闭 | |||
| 职位ID PositionId | 组织中特定职位的唯一标识符。 | ||
| 说明 Position ID是主要案例标识符,用于关联单个组织职位的所有活动和数据点。借助它,您可以端到端跟踪职位的完整生命周期,从创建和修改一直到停用或关闭。 在流程分析中,该ID对于还原每个职位的完整过程至关重要。它支持构建仪表板,用于监控周期时间、识别审批瓶颈,并分析从申请到关闭的流程变体。 为什么重要 这是连接所有相关事件并形成单个流程案例的核心标识符,使您能够分析职位的端到端生命周期。 获取位置 通常对应Microsoft Dynamics 365 Human Resources中的HcmPosition.PositionId字段,也可以在HcmPositionV2Entity等数据实体中找到。 示例 POS001234MKT-0056FIN-SR-ANALYST-02HRBP-EAST-01IT-DEV-9876 | |||
| 成本中心 CostCenter | 职位相关费用所分配到的财务成本中心。 | ||
| 说明 成本中心是关键财务维度,可将职位关联到特定预算或财务责任范围。监控此属性的变化非常重要。 此属性是“职位数据一致性检查”仪表板的基础,该仪表板用于分析职位创建后关键属性的变化。它还可用于按不同财务单元分析职位相关成本和预算。 为什么重要 它将职位与财务数据关联起来,支持成本相关的流程分析,并帮助监控数据一致性。 获取位置 通常会将其配置为职位记录上的财务维度。请参阅Dynamics 365中的财务维度设置。 示例 CC-1001-FINCC-2500-ITCC-4510-SALESCC-7000-OPSCC-9002-HR | |||
| 用户名 UserName | 执行该活动的用户姓名或ID。 | ||
| 说明 此属性用于识别负责执行特定流程步骤的员工或系统用户,例如批准申请的经理,或在系统中创建职位的HR专员。 按用户分析有助于识别培训需求、比较团队成员的绩效并了解工作负载分配。这也是一致性检查的关键,可确保职责适当分离。 为什么重要 它明确了责任归属,并支持按个人或团队开展绩效分析,这对资源管理和培训至关重要。 获取位置 与Dynamics 365 HR中的工作流历史记录或审计跟踪记录关联,也可能通过HcmWorker实体中的User 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 | 与职位关联的工作名称,例如“高级会计师”。 | ||
| 说明 职位名称为职位的角色和职责提供重要背景。它不同于Position ID,因为多个职位可以使用相同的职位名称。 在分析中,此属性支持按角色类型分组和筛选。它可用于“职位重新分类趋势”仪表板,以了解哪些类型的工作最常被重新分类。 为什么重要 它补充了关键业务背景,支持按工作角色、级别或职能开展分析。 获取位置 此信息来自与Position关联的“Job”记录。请在HcmPositionV2Entity等实体中查找,或通过连接HcmJobEntity获取。 示例 高级财务分析师软件工程师II人力资源业务伙伴市场营销协调员物流经理 | |||
| 职位状态 PositionStatus | 职位当前或历史状态。 | ||
| 说明 此属性表示职位在特定时间点的状态,例如“拟议”“活跃”“冻结”或“已关闭”。状态变更通常对应流程中的活动。 跟踪状态对于了解职位经历的过程至关重要,也适用于“职位合规审查状态”和“长期未更新及未充分利用的职位”等仪表板。它可以呈现职位当前状态的快照,并帮助验证流程路径。 为什么重要 它为每个职位提供清晰的状态,这对于筛选案例和了解结果至关重要。 获取位置 请参阅Microsoft Dynamics 365 Human Resources文档。该信息可能源自核心Position记录中的状态字段。 示例 拟议审核中在职已冻结已关闭 | |||
| 部门 DepartmentName | 职位所属的部门。 | ||
| 说明 此属性用于指定与职位关联的组织部门,例如“财务部”“市场部”或“IT部”。它是筛选和汇总流程数据的主要维度。 按部门分析是“部门职位吞吐量”仪表板的基础。它有助于比较流程绩效、识别部门特有的瓶颈,并了解企业不同部门的招聘趋势。 为什么重要 它支持按业务单元细分流程分析,有助于识别部门特有的问题并比较绩效。 获取位置 此信息属于职位详细信息,通常存储在HcmPositionDetail实体中,并与运营单位维度关联。 示例 财务信息技术销售与市场营销人力资源运营 | |||
| 上次数据更新 LastDataUpdate | 源系统最近一次数据刷新的时间戳。 | ||
| 说明 该属性表示数据上次从Microsoft Dynamics 365 Human Resources提取的时间,为分析结果的新鲜度提供上下文。 在仪表板中显示此信息,可以让用户确认当前查看的是最新信息。它是任何流程挖掘项目的重要元数据。 为什么重要 它向用户说明数据的时效性,这对于基于分析结果做出决策至关重要。 获取位置 该时间戳在数据提取、转换和加载(ETL)过程中生成并存储。 示例 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| 位置 Location | 职位所在的实际或地理位置。 | ||
| 说明 此属性用于指定职位所在地,可以是办公室、城市或国家/地区。它也是筛选和细分流程数据的重要维度。 “部门职位吞吐量”仪表板会直接使用位置信息,分析不同地区的人员配置趋势和流程绩效。它有助于识别某些地点的职位创建或审批流程是否较慢。 为什么重要 它提供地理背景,支持比较不同位置的流程绩效和趋势。 获取位置 请参阅Microsoft Dynamics 365 Human Resources文档。该信息可能属于职位详细信息,也可能通过部门或法人关联。 示例 美国纽约英国伦敦德国柏林新加坡远程办公 | |||
| 审批周期时间 ApprovalCycleTime | 从职位申请发起到最终获批所需的总时间。 | ||
| 说明 此计算指标用于衡量从“发起职位申请”活动到最终审批活动的时长,最终审批活动可能是“HR批准职位申请”。它是职位管理流程前端的关键绩效指标。 此属性直接填充“职位审批周期时间”仪表板和KPI。它从整体层面衡量审批流程效率,并帮助跟踪改进计划随时间产生的影响。 为什么重要 这是衡量整个审批流程效率的关键KPI,可直接突出显示职位进入创建阶段前的延误。 获取位置 在案例层级计算:获取审批阶段开始活动和结束活动的时间戳,然后计算两者之间的差值。 示例 P3DT2H15MP10DP1DT12HP5DT6HP2W | |||
| 拒绝原因 RejectionReason | 职位申请被拒绝时提供的原因。 | ||
| 说明 经理或HR拒绝职位申请时,通常会记录原因。原因可能包括预算限制、信息错误或战略调整。 此属性对于计算“职位申请拒绝率”KPI和了解返工原因至关重要。分析最常见的拒绝原因,有助于识别上游问题,例如申请质量不高或指引不清,并据此改进流程。 为什么重要 它直接揭示申请失败的原因,支持有针对性的流程改进,从而减少返工和拒绝。 获取位置 请参阅Microsoft Dynamics 365 Human Resources文档。该信息通常记录在工作流评论中,或在拒绝时写入专用原因代码字段。 示例 预算不可用重复申请职位档案错误招聘冻结战略调整 | |||
| 是否返工 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 | 具有相似职能的一组工作,例如“工程”或“财务”。 | ||
| 说明 职位族是一种用于归类相关职位名称的分类方式。例如,“软件工程师”和“QA工程师”都可能属于“工程”职位族。 此属性是“职位重新分类趋势”仪表板的基础,可用于从更高层级分析哪些职位类别变化最频繁。与单独查看职位名称相比,它能提供更宏观的视角。 为什么重要 它支持按类别开展更宏观的职位分析,有助于战略性人力规划和趋势分析。 获取位置 这是Dynamics 365 HR职位设置的一部分。请在HcmJobEntity中查找与“职位族”或“职位职能”相关的字段。 示例 工程财务与会计销售人力资源产品管理 | |||
| 职位类型 PositionType | 将职位分类为全职、兼职、临时等类型。 | ||
| 说明 此属性根据职位的雇佣条款对职位进行分类,为人力分析和规划提供更多背景。 在流程分析中,按职位类型筛选可以发现不同类型职位是否采用不同的流程路径,或是否具有更长的周期时间。例如,与永久全职职位相比,临时职位可能采用更快、更精简的审批流程。 为什么重要 它支持分析不同雇佣类型对应的流程差异,为人力规划和流程优化提供依据。 获取位置 此信息通常可在Dynamics 365 HR的职位记录中找到。请在HcmPositionV2Entity等实体中查找相关字段。 示例 全职兼职合同工实习生临时工 | |||
| 预算是否已批准 IsBudgetApproved | 用于标识职位预算是否已获批准的标记。 | ||
| 说明 如果某个职位案例已发生“职位预算已批准”活动,此布尔属性为true。它有助于分析流程路径,并识别卡在预算等待环节的职位。 您可以使用此属性筛选流程,更有效地分析“职位预算审批周期时间”KPI。它有助于区分已通过预算审批和未通过预算审批的职位,对瓶颈分析很有帮助。 为什么重要 它为关键里程碑提供清晰标记,简化分析,并帮助单独识别和衡量预算审批阶段。 获取位置 在数据转换过程中,通过检查案例历史中是否存在“职位预算已批准”活动推导得出。 示例 truefalse | |||
招聘到离职:职位管理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 职位已停用 | 职位不再处于活动状态,并从活动组织架构中移除,通常发生在职位已有人任职之后。该事件通过状态变更为“Inactive”或类似状态来推断。 | ||
| 为什么重要 标志着职位活动生命周期结束时的关键步骤,对于分析Average Time to Position Deactivation和准确管理人员编制至关重要。 获取位置 从“RetirementDate”字段填入时间戳,或职位记录中的状态字段变更为“Inactive”时推断。 采集 依据职位的RetirementDate设置日期,或状态字段变更为“Inactive”的日期。 事件类型 inferred | |||
| 职位已关闭 | 表示职位记录已最终归档,标志着其生命周期彻底结束。该事件通过状态变更为“Closed”或类似终止状态来推断。 | ||
| 为什么重要 这是流程的终止事件,支持完整的端到端生命周期分析,并帮助识别应关闭的长期闲置职位。 获取位置 从职位记录中的状态字段变更为“Closed”来推断。由于记录通常会保留用于历史追溯,因此这种情况不如停用常见。 采集 从状态字段更新为“Closed”时的时间戳推断。 事件类型 inferred | |||
| 职位已在HR系统中创建 | 标志着职位记录已在Dynamics 365 HR中正式创建。该事件从主职位记录本身的创建时间戳获取。 | ||
| 为什么重要 这是一个基础里程碑,表示流程从申请转变为实际的组织实体,也是Position Creation Lead Time KPI的终点。 获取位置 从主职位表中的“CreatedDateTime”系统字段获取,例如HcmPosition。 采集 从HcmPosition表的CreatedDateTime系统字段提取。 事件类型 explicit | |||
| 职位已激活 | 标志着职位正式开放并可以开始招聘。通常通过职位记录中的状态字段变更为“Active”或类似状态来推断。 | ||
| 为什么重要 这是衡量招聘准备度和最终设置环节效率的关键里程碑,也是Average Time to Position Activation KPI的重要依据。 获取位置 通过跟踪职位记录中的状态字段(如“PositionStatus”)更新为“Active”或“Open”时的时间戳来推断。 采集 依据职位的ActivationDate字段填入日期,或状态字段变更为“Active”的日期。 事件类型 inferred | |||
| 职位申请已发起 | 标志着职位管理生命周期正式开始。通常,当用户通过Dynamics 365 HR中的专用表单或工作流提交新职位申请时,系统会记录此事件。 | ||
| 为什么重要 这是衡量完整职位生命周期的起点,其中包括Position Approval Cycle Time和Position Creation Lead Time等关键KPI。 获取位置 从职位申请记录的创建时间戳,或工作流历史表中的发起记录获取,例如WorkflowTrackingStatusTable。 采集 提交新的职位申请工作流后记录此事件。 事件类型 explicit | |||
| 职位申请已获HR批准 | 表示职位正式创建前已获得人力资源部门的最终批准。HR审批任务完成后,工作流系统会明确记录此事件。 | ||
| 为什么重要 这标志着审批阶段结束,是衡量Average Position Approval Cycle Time的关键里程碑。 获取位置 HR代表完成审批任务后,记录在工作流历史表中,例如WorkflowTrackingTable。 采集 HR审批步骤完成后,工作流历史会带时间戳记录此事件。 事件类型 explicit | |||
| 招聘流程已开始 | 表示流程已从职位管理交接至招聘环节。当创建新的空缺或招聘项目并将其关联至该职位ID时,可推断此事件。 | ||
| 为什么重要 将职位管理流程与最终结果连接起来,支持分析职位激活与实际招聘活动开始之间的时间。 获取位置 通过识别招聘表或空缺表中引用Position ID的记录创建日期来推断,例如HcmRecruitingRequest。 采集 通过将PositionId与招聘模块中对应记录的创建事件关联来推断。 事件类型 inferred | |||
| 职位属性已修改 | 表示职位初始创建后对其关键属性进行的任何变更,例如职位名称或部门。通常通过跟踪系统数据库日志中的变更来推断此活动。 | ||
| 为什么重要 该活动频繁发生,可能表明数据质量较差或存在流程返工。它是Position Attribute Change Frequency和Rework Rate KPI的重要依据。 获取位置 如果已为职位表启用变更跟踪,则从SysDatabaseLog表推断。否则,需要比较职位数据的历史快照。 采集 通过数据库日志检测HcmPosition表关键字段的更新操作来推断。 事件类型 inferred | |||
| 职位已冻结 | 表示职位暂时搁置,任何招聘活动均被暂停。通常通过职位记录中的状态变更为“Frozen”或“On Hold”来捕获。 | ||
| 为什么重要 用于跟踪职位生命周期中的中断,这些中断可能影响人员规划和预算,并帮助识别招聘延迟的原因。 获取位置 通过跟踪职位记录中的状态字段更新为“Frozen”或类似值时的时间戳来推断。 采集 从状态变更为“Frozen”或“On Hold”时的时间戳推断。 事件类型 inferred | |||
| 职位已完成合规审查 | 表示职位已完成正式一致性检查。该信息可以通过状态变更、已完成的检查清单任务或自定义字段更新来记录。 | ||
| 为什么重要 对于监控法规和内部政策遵循情况至关重要。该活动直接支持Position Compliance Adherence Rate KPI。 获取位置 通常可从带时间戳的状态字段(如“ComplianceReviewStatus”)或职位记录中的布尔字段“IsComplianceReviewed”推断。 采集 从合规状态字段更新为“Completed”或“Reviewed”时的时间戳推断。 事件类型 inferred | |||
| 职位已重新分类 | 表示职位基础分类发生重大更新,例如职位族或职级发生变更。通常通过职位记录中“Job”字段的变更推断。 | ||
| 为什么重要 有助于分析组织架构变化和职位定义的稳定性,是Position Reclassification Rate KPI的关键活动。 获取位置 从HcmPosition表中“JobId”字段的变更推断,可通过数据库日志捕获,或比较记录在不同时间的版本。 采集 从职位记录中职位分类字段的变更日志推断。 事件类型 inferred | |||
| 职位申请已拒绝 | 表示职位申请在某个审批阶段被拒绝。当审批人选择“Reject”操作时,工作流历史会明确记录此事件。 | ||
| 为什么重要 用于突出流程失败和返工循环。分析拒绝原因有助于提高初始申请质量,并支持Position Request Rejection Rate KPI。 获取位置 针对具体职位申请,在工作流历史表中记录为“Rejection”状态,例如WorkflowTrackingStatusTable。 采集 审批人执行拒绝操作时,从工作流日志中获取。 事件类型 explicit | |||
| 职位申请已获经理批准 | 表示招聘经理完成第一轮审批。当经理完成分配给自己的审批任务时,工作流历史会明确记录此事件。 | ||
| 为什么重要 用于确定初始审批环节的耗时,帮助识别具体经理或部门造成的瓶颈。 获取位置 作为已完成步骤记录在工作流历史表中,例如与职位申请关联的WorkflowTrackingTable。 采集 从工作流日志中经理审批步骤的完成时间戳获取。 事件类型 explicit | |||
| 职位预算已批准 | 这是关键审批里程碑,确认新职位所需资金已完成分配。通常,职位创建工作流会将其记录为独立的审批步骤。 | ||
| 为什么重要 单独呈现财务审批阶段,便于分析预算分配相关延迟,并支持Position Budget Approval Cycle Time KPI。 获取位置 作为已完成的审批任务记录在工作流历史表中,例如WorkflowTrackingTable,通常由财务角色负责。 采集 从工作流日志中预算审批任务的完成时间戳获取。 事件类型 explicit | |||
数据提取指南
步骤
- 进入数据管理工作区:登录Microsoft Dynamics 365 Human Resources。使用主搜索栏进入“Data management”工作区。
- 创建新的导出项目:在工作区中选择“Export”磁贴。在“Export”项目页面点击“New”创建项目。输入描述性名称,例如“PositionManagement_EventLog_Export”,并选择数据格式。为便于转换,建议使用“CSV”。
- 向项目添加数据实体:在新项目中点击“Add entity”。您需要添加多个实体,以完整记录职位生命周期。依次添加以下关键实体:“HcmPositionV2”、“WorkflowTrackingStatusTable”和“HcmRecruitingRequest”。如果已启用职位变更的数据库日志记录,还应添加“SysDatabaseLog”。
- 配置实体筛选器:务必为每个实体设置筛选条件,以限制数据范围。选择实体后点击“Filter”。对于“HcmPositionV2”,使用“CreatedDateTime”或“ModifiedDateTime”字段按指定日期范围筛选。对于“WorkflowTrackingStatusTable”,筛选“CONTEXTTABLENAME”,仅保留与职位相关的工作流。
- 为每个实体选择字段:确保导出后续转换所需的全部字段。对于“HcmPositionV2”,包括“PositionId”、“CreatedDateTime”、“ActivationDate”、“RetirementDate”、“ModifiedDateTime”、“JobId”和“DepartmentNumber”。对于“WorkflowTrackingStatusTable”,包括“ContextRecId”、“WorkflowTrackingStatus”、“CreatedDateTime”和“UserId”。
- 执行导出作业:配置好所有实体、字段和筛选条件后,在项目主页点击“Export”。系统将创建一个数据包,其中每个实体对应一个独立文件。
- 监控并下载数据包:您可以在“Job history”部分查看作业进度。作业成功完成后,下载数据包。该数据包为压缩文件。
- 提取并转换数据:解压下载的数据包。您会看到每个实体对应的独立CSV文件。这些文件是原始数据,并非最终事件日志。您必须使用外部脚本,例如Python配合pandas或PowerShell,处理这些文件。
- 实现转换逻辑:脚本必须执行以下操作:
- 加载“HcmPositionV2.csv”文件。使用“PositionId”和“CreatedDateTime”生成“Position Created In HR System”事件。
- 根据“HcmPositionV2.csv”中的状态字段或“ActivationDate”“RetirementDate”等日期字段,生成状态变更事件(“Position Activated”“Position Frozen”“Position Deactivated”“Position Closed”)。
- 加载“WorkflowTrackingStatusTable.csv”文件。使用记录ID将其与职位数据连接,并据此生成以下工作流事件:“Position Request Initiated”“Position Request Approved By Manager”“Position Budget Approved”“Position Request Approved By HR”和“Position Request Rejected”。您需要将工作流状态和步骤上下文映射到正确的Activity Name。
- 如果导出了“SysDatabaseLog.csv”,请根据HcmPosition表中特定字段的变更,解析该文件并生成“Position Attributes Modified”和“Position Reclassified”事件。
- 加载“HcmRecruitingRequest.csv”,查找指定职位对应的招聘请求创建时间,生成“Hiring Process Started”事件。
- 汇总最终事件日志:脚本应将不同来源生成的所有事件合并到一个CSV文件中。该文件必须包含“PositionId”“ActivityName”和“EventTime”列,以及您能够映射的其他推荐属性。
- 设置上传格式:确保最终CSV文件的表头与所需属性名称一致,并统一“EventTime”列的时间戳格式。完成后即可将文件上传到流程挖掘工具。
配置
- 关键数据实体:提取所需的主要实体包括:
HcmPositionV2:包含每个职位的核心信息,包括创建日期、激活日期,以及职位和部门等属性。WorkflowTrackingStatusTable:提供工作流实例历史,包括提交、批准和拒绝记录,是跟踪审批流程的关键。HcmRecruitingRequest:当招聘请求与职位关联时,用于推断“Hiring Process Started”活动。SysDatabaseLog:可选但功能强大的实体,用于捕获“Position Attributes Modified”和“Position Reclassified”等详细变更。是否使用取决于HcmPosition表是否已预先配置数据库日志记录。
- 日期范围筛选:强烈建议根据“CreatedDateTime”字段为“HcmPositionV2”实体设置日期范围筛选。通常可先选择6到12个月,以确保数据量可控。
- 增量导出:如需持续分析,可将导出项目配置为增量导出。系统仅提取自上次运行后发生变更的记录,从而显著缩短处理时间。
- 前提条件:执行导出的用户必须拥有足够权限的安全角色,能够访问“Data management”工作区并读取所有指定数据实体。通常需要“Data management administrator”角色,或具备相应实体权限的自定义角色。
a 示例查询 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实例已配置“Bring Your Own Database”(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中右键点击结果网格,选择“Save Results As...”。
- 准备上传:确保导出的CSV文件采用UTF-8编码,并确认列标题与所需属性(“PositionId”“ActivityName”“EventTime”等)完全一致,以便顺利上传到流程挖掘工具。
配置
- BYOD数据实体:确保所有必要的数据实体已从Dynamics 365 HR发布到您的BYOD实例。此流程的关键实体包括职位、职位详细信息、工作流历史、职位、部门和招聘请求相关实体。
- 数据延迟:请注意,BYOD是近实时复制,并非即时复制。D365 HR发生交易到数据出现在Azure SQL Database之间可能存在几分钟至一小时的延迟。
- 日期范围筛选:务必在查询中设置日期筛选,以控制性能和数据量。通常可先选择3到6个月的范围,并在每个
UNION ALL代码块中按创建时间或事件时间戳设置筛选条件。 - 公司筛选:始终按“DATAREAID”(法人实体或公司ID)筛选,确保分析正确的组织单元。提供的查询使用占位符
@[YourCompanyId]。 - 前提条件:此方法需要有效的Azure订阅、已配置的BYOD实例、目标Azure SQL Database的读取权限,以及适用的SQL客户端工具。
- 自定义工作流步骤:查询使用“Approve position request”等常见审批工作流步骤名称。如果您的组织使用自定义名称,则需要更新相应“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]' 立即优化入职到离职职位管理
将流程周期时间缩短30%,消除瓶颈。
无需信用卡,几分钟即可完成设置。