您的生产计划数据模板
您的生产计划数据模板
- 建议收集的属性
- 需要追踪的关键活动
- Microsoft Dynamics 365 Manufacturing 数据提取指南
生产计划属性
| 名称 | 描述 | ||
|---|---|---|---|
| 生产订单 ProductionOrderNumber | 生产订单的唯一标识符,作为跟踪所有相关计划和执行活动的原始 Case ID。 | ||
| 描述 生产订单号(在 Microsoft Dynamics 365 中通常称为 ProdId)是连接与特定制造作业相关的所有事件、材料、资源和成本的核心标识符。它可以实现对单个作业单位的生产计划和执行全生命周期的端到端分析。 在 Process Mining 中,此属性对于将相关事件分组到单个 Case 中至关重要。按生产订单号分析流程有助于识别标准生产流(从最初创建和排产到完成和成本核算)中的瓶颈、延迟和偏差。 为何重要 这是最基础的 Case 标识符,对于将所有相关事件分组并重构端到端生产计划流程以进行分析至关重要。 获取方式 这是 Microsoft Dynamics 365 Manufacturing 中“ProdTable”表里的“ProdId”字段。 示例 WO-000456WO-000457WO-000458 | |||
| Event 时间 EventTime | 标识该活动发生时间的精确时间戳。 | ||
| 描述 事件时间 (Event Time) 或时间戳,记录了特定活动发生的精确日期和时间。该数据是所有基于时间的流程挖掘分析的基础,包括计算周期时间、识别步骤间的延迟以及了解流程绩效随时间的变化。 在生产计划的情景下,此属性用于衡量各项时长,如计划提前期、生产启动延迟以及整体订单履行时间。准确且按时间顺序排列的时间戳对于构建正确且有意义的流程模型至关重要。 为何重要 此时间戳对于事件排序、计算活动间的时长以及执行任何基于时间的分析(如周期时间和瓶颈识别)至关重要。 获取方式 可在各种交易表中找到,例如 'ProdTable' 中的 'createdDateTime',或 'ProdRouteTrans'、'ProdJournalRoute' 和 'ProdJournalBOM' 中的交易日期字段。 示例 2023-04-15T09:00:12Z2023-04-15T11:30:00Z2023-04-16T14:22:05Z | |||
| 最后数据更新 LastDataUpdate | 指示该事件数据最近一次从源系统刷新或提取的时间戳。 | ||
| 描述 此属性提供了最近一次从源系统提取数据的日期和时间。这是一个元数据字段,对于了解分析的新鲜度和时效性至关重要。 了解数据最后更新的时间有助于分析师和业务用户信任从 Process Mining 工具中得出的洞察。它明确了仪表板反映的是实时信息还是过去某个时间点的数据,这对于运营决策非常重要。 为何重要 此属性对于数据治理至关重要,可确保用户了解数据的时效性并信任流程洞察的及时性。 获取方式 此时间戳在数据提取、转换和加载 (ETL) 过程中生成并标记到每条记录上。 示例 2023-05-20T05:00:00Z2023-05-21T05:00:00Z | |||
| 活动名称 ActivityName | 生产计划流程中发生的特定业务事件或步骤的名称。 | ||
| 描述 活动名称描述了生产计划生命周期中的单个步骤,例如“已创建生产订单”、“生产领料”或“生产已启动”。这些活动是流程图的基石。 分析这些活动的顺序和持续时间,可以将流程流向可视化、识别常见路径、检测返工循环,并衡量不同阶段花费的时间。此属性对于理解流程中每个环节发生的情况至关重要。 为何重要 此属性定义了流程中的步骤,从而能够构建流程图并分析流程流向、变异和瓶颈。 获取方式 该值通常源自事件日志,或通过映射“ProdRouteTrans”、“ProdJournalBOM”等表中的不同状态更改和交易类型以及对“ProdTable”状态字段的更改而得出。 示例 生产订单已创建生产订单已下达生产已启动生产完工入库 | |||
| 源系统 SourceSystem | 提取 data 的记录系统。 | ||
| 描述 此属性识别事件数据源自的信息系统。对于此流程视图,该值始终为“Microsoft Dynamics 365 Manufacturing”。 在具有多个集成系统的环境中,此字段对于数据血缘、排查数据质量问题以及了解不同系统如何对整体流程做出贡献至关重要。它确保了所分析数据来源的清晰度。 为何重要 它提供了有关数据来源的关键上下文,这对于数据治理、验证以及管理来自多个企业系统的数据管道至关重要。 获取方式 这是一个静态值,应在数据提取和转换过程中添加,用于标记数据集的来源。 示例 Microsoft Dynamics 365 ManufacturingD365 F&O | |||
| 产品编号 ProductNumber | 所制造项目的唯一标识符。 | ||
| 描述 产品编号(或项目 ID)指定了生产订单旨在创建的成品。它将制造流程与特定产品及其关联的物料清单 (BOM) 和路线说明联系起来。 按产品编号分析流程有助于发现制造生命周期中特定于产品的差异。它可能揭示某些产品具有更长的周期时间、需要更多返工或经历更频繁的延迟,从而为产品和工艺工程师提供宝贵的参考。 为何重要 它支持根据所制造的产品分析流程变动,有助于识别特定产品的瓶颈或质量问题。 获取方式 这是“ProdTable”表中的“ItemId”字段。 示例 FG-1001FG-2050ASSY-500B | |||
| 实际数量 ActualQuantity | 成功生产并为订单报告完工的货物数量。 | ||
| 描述 实际数量代表给定生产订单中完成并通过质量检查的单位数量。该值在生产“完工入库”时记录。 此属性用于分析生产良率和效率。通过对比实际数量与计划数量,有助于计算废品率并了解生产损失。它也是吞吐量分析和产能利用率仪表板的关键组成部分。 为何重要 这对于计算生产良率、报废率和实际吞吐量至关重要,可提供对制造效率和性能的洞察。 获取方式 该值通常来自订单报告完工时“ProdTable”或相关日记账过账表中的“QtyGood”字段。 示例 100985000 | |||
| 生产优先级 ProductionPriority | 表示生产订单紧急程度或优先级的评分。 | ||
| 描述 生产优先级是计划员和排产员用于管理车间作业顺序的字段。优先级较高的订单可能会被加急,从而可能打乱其他订单的原定计划。 分析此属性有助于了解生产计划受高优先级或加急订单干扰的频率。跟踪订单生命周期内的优先级变化可以揭示需求或计划的不稳定性。这对于“加急生产趋势”仪表板和“加急生产率”KPI 至关重要。 为何重要 这有助于识别加急订单的频率和影响,这可能反映出计划的不稳定性或被动式的运营管理。 获取方式 这可能是“ProdTable”上的标准或自定义字段。配置通常特定于公司。 示例 普通高紧急 | |||
| 生产工厂 ProductionPlant | 执行生产订单的制造场所或工厂。 | ||
| 描述 生产工厂识别负责制造流程的物理位置或设施。它是对生产绩效进行细分和对比的关键组织维度。 在 Process Mining 中,此属性允许跨不同工厂进行绩效对标。分析师可以对比各场点之间的周期时间、资源利用率以及对标准流程的遵循情况,以识别最佳实践或找出可能需要运营改进的设施。这对于产能利用率分析至关重要。 为何重要 这允许跨不同制造场点进行绩效对比和对标,有助于识别最佳实践和特定区域的问题。 获取方式 这是“ProdTable”表中的“InventSiteId”字段。 示例 SITE-ASITE-BMain-WH | |||
| 生产类型 ProductionType | 生产订单的分类,例如标准、返工或基于项目。 | ||
| 描述 生产类型根据订单用途进行分类。例如,“标准”订单用于常规库存生产,“返工”订单用于修复先前产出的缺陷产品,“项目”订单则与特定的客户项目挂钩。 此属性对于创建具有可比性的分析视图非常重要。返工订单的流程与标准订单本质上不同。按生产类型对流程分析进行细分,可以确保对比具有实际意义,并有助于理解每种类型的独特挑战和流向。 为何重要 此属性允许对分析进行细分,因为“标准”和“返工”等不同的订单类型自然遵循不同的流程,并具有不同的性能预期。 获取方式 这是“ProdTable”表中的“ProdType”字段。 示例 标准返工项目 | |||
| 生产订单状态 ProductionOrderStatus | 表示生产订单当前的生命周期状态。 | ||
| 描述 生产订单状态反映了订单在制造生命周期中的进度。Dynamics 365 中的常见状态包括“已创建”、“已预估”、“已排产”、“已下达”、“已启动”、“完工入库”和“已结束”。此属性提供了每个订单在任何给定时间的快照。 在 Process Mining 中,分析状态变化是定义活动和理解流程流向的主要方式。它可以用于筛选处于特定状态的订单、分析在每个状态下花费的时间,并识别陷入停滞或延迟的订单。 为何重要 此属性提供订单进度的全局概览,对于筛选、合规性检查以及分析在不同生产阶段花费的时间至关重要。 获取方式 这是“ProdTable”表中的“ProdStatus”字段。 示例 已计划已下发已启动已结束 | |||
| 用户 UserId | 执行该活动或对该活动负责的用户标识符。 | ||
| 描述 用户 ID 识别执行特定流程步骤(如下达订单或报告完工)的员工或系统账户。此信息可让人了解谁在流程中执行工作。 按用户分析流程有助于了解工作负载分布、识别培训机会、对比个人或团队的表现,并调查特定用户执行的偏差。这对于合规和审计追踪也具有重要意义。 为何重要 它支持按用户或团队分析流程绩效,有助于识别自动化机会,并为关键流程活动提供审计追踪。 获取方式 可在各个表的 'modifiedBy' 或 'createdBy' 等字段中找到,或者在 'ProdJournalTable' 等交易日志表的用户字段中找到。 示例 j.smithm.jonesAX_BATCH_SVC | |||
| 计划开始日期 PlannedStartDate | 生产订单计划开始的日期和时间。 | ||
| 描述 计划开始日期是排产流程的关键产出,代表订单开始生产活动的目标时间。该日期是根据材料供应情况、资源产能和需求截止日期确定的。 此属性对于分析排产达成率至关重要。通过将计划开始日期与生产实际开始时间(来自“生产已启动”活动时间戳)进行对比,组织可以衡量准时性、识别延迟原因,并计算“生产计划达成率”等 KPI。 为何重要 它作为衡量排程执行力的基准,并用于识别计划与实际开始生产之间的延迟。 获取方式 这是“ProdTable”表中的“SchedStart”字段。 示例 2023-04-18T08:00:00Z2023-04-19T08:00:00Z2023-04-20T08:00:00Z | |||
| 计划结束日期 PlannedEndDate | 生产订单计划完成的日期和时间。 | ||
| 描述 计划结束日期是由排产引擎确定的生产订单目标完成时间。它结合了工序时间、资源日历和前置时间来预测成品产出的时间。 在流程分析中,此属性对于评估按时完成表现至关重要。将计划结束日期与实际完成时间戳(来自“生产完工入库”或“生产订单已结束”活动)进行对比,可以计算“生产按时完成率”KPI,并有助于识别导致交货延迟的系统性原因。 为何重要 此属性是衡量按时完成率和分析生产排产准确性的基准。 获取方式 这是“ProdTable”表中的“SchedEnd”字段。 示例 2023-04-25T17:00:00Z2023-04-26T17:00:00Z2023-04-27T17:00:00Z | |||
| 修订编号 ProductionOrderRevisionNumber | 生产计划在首次创建后被调整的次数统计。 | ||
| 描述 此属性跟踪生产订单在排产或下达后进行的修订或重大变更次数,例如对数量、日期或路线的更改。次数越多,表明计划的不稳定性越高。 这是对“生产计划修订率”KPI 的直接衡量。分析此项有助于识别计划不稳定的来源,例如频繁的需求变更或不准确的初始计划。它量化了返工和重新排产的工作量,而这些通常会导致效率低下。 为何重要 这直接衡量计划稳定性,并支持“生产计划修订率”KPI,重点标出变更和返工过多的流程。 获取方式 这是一个衍生属性,需要计算每个 Case 中“生产订单已调整”活动发生的次数。 示例 012 | |||
| 准时启动 ProductionScheduleAdherence | 一个布尔标记,如果生产订单在计划开始日期或之前开始,则为 true。 | ||
| 描述 此计算属性为生产启动的排产达成率提供了一个简单的二元指标。它将实际开始时间戳(“生产已启动”事件)与“PlannedStartDate”属性进行对比。 此标记对于创建清晰简洁的仪表板和 KPI(例如“生产计划达成率”)非常有用。它可以实现轻松的筛选和聚合,以查看按时开始与延迟订单的百分比,并分析延迟订单的特征,而无需在分析工具中直接执行日期对比。 为何重要 这简化了排产达成率的报告和 KPI 计算,可以轻松对按时与延迟订单进行筛选和聚合。 获取方式 这是一个计算指标。逻辑为:'生产已启动' 的事件时间 <= 计划开始日期。 示例 truefalse | |||
| 物料可用性 MaterialAvailabilityStatus | 表示生产订单所需的原材料是否可用。 | ||
| 描述 此属性跟踪生产所需组件的准备就绪情况。它可以反映“可用”、“订购中”或“短缺”等状态。此信息对于排产员了解生产订单能否按计划实际开工至关重要。 在 Process Mining 中,此属性对于诊断生产启动延迟的根本原因至关重要。通过将此状态与“生产订单下达”和“生产已启动”之间的时间相关联,分析师可以量化材料短缺对排产达成率和整体周期时间的影响。这直接支持“材料供应延迟影响”仪表板。 为何重要 这是理解和量化因材料短缺导致的生产启动延迟的关键,将供应链绩效与制造效率联系起来。 获取方式 此状态通常不是单个字段,而是通过“InventSum”表检查生产订单物料清单 (BOM) 中所有项目的现有库存水平推导出来的。 示例 完全可用部分短缺不可用 | |||
| 生产启动延迟 ProductionStartDelay | 订单下达与生产实际开始之间经过的时间。 | ||
| 描述 此计算时长衡量车间的等待时间或排队时间。它是“生产订单下达”活动与“生产已启动”活动之间的时间差。 此 KPI 对于“资源分配延迟分析”仪表板至关重要,因为它精准定位了计划完成且订单准备执行后发生的延迟。高数值可能表明资源供应、材料分拣或车间信息流存在问题,从而为运营改进提供了明确的目标。 为何重要 它能精确测量“准备就绪”延迟,有助于找出与资源可用性或车间就绪状态相关的瓶颈。 获取方式 这是一个计算指标:时间戳('生产已启动') - 时间戳('生产订单已下达')。 示例 0d 4h 15m1d 2h 0m0d 1h 30m | |||
| 生产周期时间 ProductionCycleTime | 生产订单从创建到最终完成的总时长。 | ||
| 描述 此指标衡量单个生产订单的端到端周期时间。它的计算方法是 Case 中第一个事件(通常是“已创建生产订单”)与最后一个事件(例如“生产订单已结束”)的时间差。 生产周期时间是评估整体流程效率的基础 KPI。分析此指标有助于识别耗时较长的订单、了解制造产品的平均时间并跟踪长期的绩效改进。它是“生产绩效概览”仪表板的关键指标。 为何重要 这是衡量整体流程效率的关键 KPI,用于识别生产订单完成所需时间中的趋势或异常值。 获取方式 这是一个计算指标,通过计算每个生产订单号的第一个事件与最后一个事件的时间戳之差得出。 示例 7d 4h 30m10d 2h 15m5d 8h 0m | |||
| 生产线 ProductionLine | 分配给生产订单的特定生产线、工作中心或资源组。 | ||
| 描述 生产线识别执行制造工序的特定机器、工作单元或资源组。这比生产工厂提供了更精细的细节。 按生产线分析流程对于详细的产能和利用率分析至关重要。它有助于识别超负荷的工作中心,对比生产同一产品的不同生产线的效率,并找出在工厂层面可能无法察觉的特定资源瓶颈。 为何重要 这实现了对资源利用率和绩效的精细分析,有助于识别超负荷的工作中心或低效的流水线。 获取方式 此信息通常位于生产路线交易(“ProdRoute”或“ProdRouteTrans”表)中的“WrkCtrId”字段。 示例 LINE-01LINE-02CNC-A | |||
| 结束时间 EndTime | 指明活动完成的确切时间戳。 | ||
| 描述 结束时间标记了特定活动的完成。虽然开始时间指明了开端,但需要结束时间来了解该单个步骤的实际持续时间或处理时间。 在流程挖掘中,同时拥有活动的开始和结束时间可以实现对等待时间与处理时间的更精细分析。这有助于区分活动被实际操作的时间与等待下一步开始所花费的时间,这对于详细的瓶颈分析至关重要。 为何重要 它支持计算活动的执行时间(与等待时间区分开),从而实现更精确的瓶颈分析。 获取方式 这通常是派生出来的。例如,“生产已启动”的结束时间可能是“工序已完成”的开始时间。在某些日志中,结束时间戳可能会被显式记录。 示例 2023-04-15T09:30:45Z2023-04-15T12:00:00Z2023-04-16T15:00:10Z | |||
| 计划数量 PlannedQuantity | 计划生产的项目数量。 | ||
| 描述 计划数量是给定生产订单准备制造的目标单位数量。该数量通常由销售订单需求、安全库存要求或主计划驱动。 此属性是良率和废品率等绩效指标的基准。通过对比计划数量与实际产出的货物数量,计划员可以监控生产效率和材料偏差。它是产能和材料需求计划的基础数据点。 为何重要 这是通过对比实际产量来衡量生产良率和废品率的基准数量。 获取方式 这是“ProdTable”表中的“QtySched”字段。 示例 1005000250 | |||
| 质量订单号 QualityOrderNumber | 与生产订单关联的质量控制订单标识符。 | ||
| 描述 当需要进行质量检测时,Dynamics 365 通常会生成一份质检单。该属性将生产流程与质检流程关联起来,并记录相关质检单的 ID。 这种关联有助于建立包含质检步骤在内的更全面的端到端流程视图。它可以帮助分析质检如何影响生产交付周期,识别质检环节的延误,并了解不同产品或生产线的质检频率。 为何重要 它将生产流程与质量保证流程联系起来,从而分析质量检验如何影响整体提前期。 获取方式 此信息存储在质量管理表(例如“InventQualityOrderTable”)中,需要链接回生产订单。 示例 QO-00123QO-00124QO-00125 | |||
生产计划活动
| 活动 | 描述 | ||
|---|---|---|---|
| 生产完工入库 | 表示指定数量产品的制造过程在物理上已完成,产成品现已入库。这是一个关键的状态更新,会触发库存交易。 | ||
| 为何重要 这标志着物理生产的结束。它对于计算按时完成率、实际生产时长和吞吐量至关重要。 获取方式 当 ProdTable 中的生产订单状态变为 “Reported as finished” 时捕获。这由过账 “完工入库” 日记账触发。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Reported as finished” 的时间戳。 事件类型 inferred | |||
| 生产已启动 | 标志着该订单在车间现场开始实际生产工作。这通常是在通过车间终端或日记账过账启动第一道工序或作业时记录的。 | ||
| 为何重要 此活动提供了生产的实际开始时间,这对于计算启动延迟、排产达成率和实际前置时间至关重要。 获取方式 当 ProdTable 中的生产订单状态变为 “Started” 时捕获。这通常由为第一道工序过账作业卡或工艺卡日记账触发。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Started” 的时间戳。 事件类型 inferred | |||
| 生产订单已下达 | 此活动表示生产订单已获批准并授权在车间执行。这是一个关键里程碑,会触发作业卡和路线卡等单据的发布。 | ||
| 为何重要 这是从计划到执行的正式交接。在“已排产”和“已下达”之间的时间可以反映审批延迟或最终检查,而从“已下达”到“已启动”的时间则衡量车间的准备就绪情况。 获取方式 当 ProdTable 中的生产订单状态更改为“已下达”时捕获。这是一种手动或自动的用户操作。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Released” 的时间戳。 事件类型 inferred | |||
| 生产订单已创建 | 此活动标志着生产订单的创建,正式确定了对特定数量产品的需求。这通常在计划生产订单被转为正式订单时捕获,并在系统中创建具有唯一 ID 的正式记录。 | ||
| 为何重要 这是生产流程的主要开始事件。分析从此次创建到后续步骤的时间有助于衡量整体计划前置时间和效率。 获取方式 此事件是根据 ProdTable 中生产订单记录的创建时间戳推导出来的。初始状态通常为“已创建”。 捕获 捕获 ProdTable 中 ProdStatus 为 “Created” 的新条目的创建时间戳。 事件类型 inferred | |||
| 生产订单已排产 | 此活动标志着生产订单的排产,它为工序分配了特定的资源、日期和时间。此步骤可能涉及工序级排产或更详尽的作业级排产。 | ||
| 为何重要 排产对于产能计划和资源管理至关重要。分析排产订单所需的时间以及下达前的间隔,可以揭示计划和产能方面的瓶颈。 获取方式 当 ProdTable 中的生产订单状态变为 “Scheduled” 时捕获。这由用户运行排程功能触发。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Scheduled” 的时间戳。 事件类型 inferred | |||
| 生产订单已结束 | 这是最后一个活动,代表生产订单的财务结案。所有成本都已计算并过账,订单不能再进行进一步交易。 | ||
| 为何重要 这标志着订单在物理和财务层面上的真正完成。在“完工入库”与“已结束”之间的延迟可能指向成本核算或财务结案流程中的问题。 获取方式 这是当“ProdTable”中的“ProdStatus”字段设为“已结束”时捕获的最终状态变更。这是通过运行成本计算并结束订单触发的。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Ended” 的时间戳。 事件类型 inferred | |||
| 操作完成 | 此活动表示生产路线中单个制造工序或步骤的完成。一个生产订单通常会有多个此类事件。 | ||
| 为何重要 分析工序之间的时间有助于识别生产流程内部的瓶颈。它为车间现场流提供了更细致的视角。 获取方式 这是一个显式事件,通过过账每个工序的路线卡日记账 (ProdJournalRoute) 来捕获,指示该步骤的完成。 捕获 捕获与该生产订单关联的每条 ProdJournalRoute 记录的过账时间戳。 事件类型 explicit | |||
| 生产物料已领用 | 表示生产订单所需的原材料已从仓库中捡取并准备好消耗。此事件在完成原材料捡取作业或领料单日记账过账时记录。 | ||
| 为何重要 此活动是开始生产的关键关口。排产与领料之间的延迟突显了仓库运营或材料供应方面的问题。 获取方式 这通常是记录在与生产订单关联的仓库管理表 (WHSWorkTable) 或库存日记账 (InventJournalTrans) 中的显式事件。 捕获 捕获与生产订单关联的领料单日记账的过账时间戳。 事件类型 explicit | |||
| 生产订单已取消 | 代表生产订单在完成前的取消。这是流程的一种非正常的替代结束状态。 | ||
| 为何重要 追踪订单取消情况有助于识别流程失败的原因,例如需求变更或计划错误。取消率过高可能表明存在系统性问题。 获取方式 这是根据状态变化推导出的另一种结束状态。具体状态可能有所不同,但通常涉及将订单状态重置回之前的状态并将其标记为已取消。 捕获 检测指示取消的状态更改。这可能需要特定的系统分析来识别。 事件类型 inferred | |||
| 生产订单已调整 | 代表生产订单下达后发生的重大变更,例如数量更改或日期修改。此事件是通过对比变更前后的关键字段推导出来的。 | ||
| 为何重要 频繁调整意味着计划不稳或需求波动,从而导致效率低下和返工。这有助于量化此类变化的频率及其影响。 获取方式 通过分析更改日志,或在订单状态为 “Released” 后对比 ProdTable 记录中 'QtySched' 或 'SchedEnd' 等字段的快照来推断。 捕获 识别在 “Released” 事件时间戳之后,ProdTable 上关键字段(例如数量、日期)的更改。 事件类型 calculated | |||
| 生产订单已预估 | 代表生产订单的预估材料和成本消耗计算。这是确保在继续操作前了解财务和材料要求的关键计划步骤。 | ||
| 为何重要 估算的延迟可能是计划阶段的一个重大瓶颈。追踪此活动有助于识别成本和物料计划流程中的低效环节。 获取方式 当 ProdTable 中的生产订单状态更改为“已预估”时捕获。这是由用户在订单上运行“预估”功能触发的。 捕获 检测 ProdTable 上的 ProdStatus 字段变为 “Estimated” 的时间戳。 事件类型 inferred | |||
| 质量检验通过 | 代表与生产运行关联的质量订单已成功完成并验证。这确认了产出的物品符合所需的质量标准。 | ||
| 为何重要 这是质量流程中的一个关键里程碑。从生成质量订单到通过检验之间的时长突显了 QA 团队的效率。 获取方式 根据 InventQualityOrderTable 记录上的状态更改为 “Pass” 推断。具体状态值可能会有所不同。 捕获 检测关联的 InventQualityOrderTable 记录上的状态更新为 “Pass” 的时间戳。 事件类型 inferred | |||
| 质量订单已生成 | 已创建质量订单以检查生产订单的产出。此事件标志着产成品质量保证流程的开始。 | ||
| 为何重要 追踪质量管理流程对于了解总交付周期至关重要。质检延误会导致货物无法及时发货,或无法进入后续生产环节。 获取方式 这是一个显式事件,基于在引用源生产订单的 InventQualityOrderTable 中创建的记录。 捕获 捕获 InventQualityOrderTable 中与该生产订单 ID 关联的质量订单的创建时间戳。 事件类型 explicit | |||
提取指南
步骤
- 导航至数据管理工作区:登录 Microsoft Dynamics 365 Finance and Operations。使用搜索栏找到并进入
Data management工作区。 - 创建新导出项目:在工作区中选择
Export图标,创建一个新的数据导出项目。为项目起一个描述性名称,例如ProcessMind_Production_Orders。 - 选择导出文件格式:在项目配置中,选择导出的数据格式,例如 CSV 或 Excel。设置
Entity选项并指定格式详情。为了性能和兼容性,建议使用 CSV。 - 添加所需数据实体:向项目添加必要的数据实体,以捕获所有生产订单事件。您需要添加以下每个实体:
Production orders、Production order route transactions、Inventory quality orders以及Production picking list journal lines。对于每个实体,请确保选择了查询部分所述的所有相关字段。 - 应用数据筛选:为每个实体使用
Filter选项来界定数据导出范围。至少要按Company筛选以选择正确的法人实体。强烈建议在关键日期字段(例如Production orders实体的Creation date)上应用日期范围筛选,以将数据量限制在可管理的范围内,例如过去 6 个月。 - 配置增量导出(可选):为了进行持续分析,请将项目配置为增量导出。这可以通过在源实体上启用更改跟踪来实现,从而只提取自上次导出以来新增或修改的记录,显著缩短导出时间。
- 运行导出作业:项目配置完成后,点击操作面板中的
Export启动导出。您可以立即运行,也可以将其安排为定期批处理作业。 - 下载导出的文件:导出作业成功完成后,进入作业历史记录。下载数据包(ZIP 文件),其中包含您包含的每个实体的独立数据文件。
- 将数据转换为事件日志:导出的文件代表原始表数据,而非格式化的事件日志 (event log)。您必须使用外部工具(如 Python 脚本、Excel/Power BI 中的 Power Query 或 ETL 工具)来处理和合并这些文件中的数据。必须应用查询部分中列出的转换逻辑,将来自不同实体的日期和状态字段透视为单个事件日志文件,每行代表一个活动。
- 构建最终事件日志:确保最终转换后的 CSV 文件包含所需的列:
ProductionOrderNumber、ActivityName、EventTime、SourceSystem和LastDataUpdate,以及任何建议的属性。文件应包含标题行,并准备好上传至 ProcessMind。
配置
- 关键数据实体:此次提取的核心在于导出多个实体并随后进行关联。主要实体包括
Production orders(ProdTable)、Production order route transactions(ProdRouteTrans) 以及Inventory quality orders(InventQualityOrderTable)。 - 日期范围筛选:为管理数据量,请务必应用日期过滤器。最佳实践是根据
Creation date(CREATEDDATETIME) 筛选过去 3 到 6 个月的Production orders实体。这能确保在不增加系统负担的情况下,捕获完整且近期的流程。 - 公司筛选:为特定的公司或法人实体设置过滤器至关重要。您可以在导出项目的每个实体中使用 “筛选 (Filter)” 选项来完成此操作。
- 全量推送 vs. 增量推送:首次提取时需要进行全量推送。对于后续更新,强烈建议在实体上配置更改跟踪并执行增量导出,以提升性能并减轻数据负载。
- 先决条件:执行导出的用户必须拥有相应的安全角色,通常包括 “数据管理管理员 (Data management administrator)” 或具有访问所需数据实体权限的角色。
a 查询示例 config
/*
This is not a runnable script but a configuration and transformation plan for the Dynamics 365 Data Management Framework.
**Step 1: Configure the Export Project**
Export the following entities with the specified fields:
1. **Entity: Production orders (ProdTable)**
* `ProductionOrderNumber` (PRODID)
* `ProductionOrderStatus` (PRODSTATUS)
* `CreationDate` (CREATEDDATETIME)
* `LastUpdateDateStatusEstimate` (LASTUPDATEDATESTATUSESTIMATE)
* `LastUpdateDateStatusScheduled` (LASTUPDATEDATESTATUSSCHEDULED)
* `ReleaseDate` (RELEASEDATETIME)
* `StartDate` (STARTEDDATETIME)
* `ReportedFinishedDate` (REPORTEDFINISHEDDATETIME)
* `LastUpdateDateStatusEnded` (LASTUPDATEDATESTATUSENDED)
* `ModifiedDateTime` (MODIFIEDDATETIME)
* `CreatedByUser` (CREATEDBY)
* `ProductionSite` (INVENTSITEID)
* `ProductNumber` (ITEMID)
* `ProductionType` (PRODTYPE)
* `Quantity` (QTYsched)
* `ActualQuantity` (QTYCALC)
* `DeliveryDate` (DLVDATE)
2. **Entity: Production order route transactions (ProdRouteTrans)**
* `ProductionOrderNumber` (PRODID)
* `OperationNumber` (OPRNUM)
* `TransactionDate` (TRANSDATE)
* `TransactionTime` (TRANSTIME)
* `CreatedDateTime` (CREATEDDATETIME)
* `CreatedByUser` (CREATEDBY)
3. **Entity: Inventory quality orders (InventQualityOrderTable)**
* `QualityOrderNumber` (INVENTQUALITYORDERID)
* `ReferenceType` (REFTYPE)
* `ReferenceNumber` (PRODID)
* `QualityOrderStatus` (STATUS)
* `CreationDate` (CREATEDDATETIME)
* `ModifiedDateTime` (MODIFIEDDATETIME)
4. **Entity: Production picking list journal lines (ProdJournalBOM)**
* `JournalId` (JOURNALID)
* `ProductionOrderNumber` (PRODID)
* `PostedDateTime` (POSTEDDATETIME)
* `CreatedByUser` (CREATEDBY)
**Step 2: Apply Transformation Logic (Post-Export)**
Use a script or ETL tool to transform the exported files into a single event log CSV. For each row in the source files, generate events as described below.
*/
-- Production Order Created
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
CREATEDDATETIME AS EventTime,
PRODSTATUS AS ProductionOrderStatus,
DLVDATE AS PlannedStartDate,
-- [Logic to calculate PlannedEndDate] AS PlannedEndDate,
CREATEDBY AS UserId,
INVENTSITEID AS ProductionPlant,
ITEMID AS ProductNumber,
PRODTYPE AS ProductionType,
QTYCALC AS ActualQuantity,
-- [Your field for Production Priority] AS ProductionPriority
FROM ProdTable
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Estimated
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
LASTUPDATEDATESTATUSESTIMATE AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSESTIMATE IS NOT NULL
UNION ALL
-- Production Order Scheduled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
LASTUPDATEDATESTATUSSCHEDULED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSSCHEDULED IS NOT NULL
UNION ALL
-- Materials Picked For Production (based on the first picking list journal posting)
SELECT
PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
MIN(POSTEDDATETIME) AS EventTime, -- Use the earliest posting time for a given order
-- Other attributes from ProdTable...
FROM ProdJournalBOM
WHERE POSTEDDATETIME IS NOT NULL
GROUP BY PRODID
UNION ALL
-- Production Order Released
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
RELEASEDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE RELEASEDATETIME IS NOT NULL
UNION ALL
-- Production Order Adjusted (inferred from modification after release)
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE MODIFIEDDATETIME > RELEASEDATETIME AND PRODSTATUS NOT IN ('Ended', 'Cancelled') -- Example logic
UNION ALL
-- Production Started
SELECT
PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
STARTEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE STARTEDDATETIME IS NOT NULL
UNION ALL
-- Operation Completed
SELECT
PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM ProdRouteTrans
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Reported As Finished
SELECT
PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
REPORTEDFINISHEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE REPORTEDFINISHEDDATETIME IS NOT NULL
UNION ALL
-- Quality Order Generated
SELECT
PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND CREATEDDATETIME IS NOT NULL
UNION ALL
-- Quality Inspection Passed
SELECT
PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND STATUS = 'Pass' AND MODIFIEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Ended
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
LASTUPDATEDATESTATUSENDED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSENDED IS NOT NULL
UNION ALL
-- Production Order Cancelled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE PRODSTATUS = 'Stopped' -- Or the equivalent 'Cancelled' status enum value in your system 步骤
- 在 Dynamics 365 中配置 BYOD:确保您的 Dynamics 365 for Finance and Operations 环境已配置“自带数据库 (Bring your own database)”功能。这包括设置 Azure SQL 数据库并配置来自 Dynamics 365 的数据导出。
- 发布所需实体:在“数据管理”工作区中,导航到“数据实体”。搜索并将以下关键实体发布到您的 BYOD 数据库:ProdTable、ProdRouteTrans、InventPickingListJour 和 InventQualityOrderTable。确保已将它们配置为定期导出。
- 验证数据同步:确认已发布的实体数据已成功且定期地同步到目标 Azure SQL 数据库。检查导出作业历史记录以查看是否有错误。
- 连接到 BYOD 数据库:使用 SQL 客户端(如 SQL Server Management Studio (SSMS) 或 Azure Data Studio)连接到存储 Dynamics 365 数据的 Azure SQL 数据库。
- 准备 SQL 查询:打开一个新的查询窗口。复制本文档中提供的完整 SQL 查询语句。
- 设置查询参数:在查询语句中找到占位符变量。将 '{StartDate}'、'{EndDate}' 和 '{CompanyCode}' 替换为您想要的日期范围以及您希望分析的特定公司的 DataAreaId。
- 执行查询:在 BYOD 数据库上运行修改后的 SQL 查询。执行时间取决于数据量和指定的日期范围。
- 查看结果:查询完成后,查看输出结果,确保其包含所有提取活动所需的列和数据。该结果集即为事件日志 (event log)。
- 导出事件日志:将查询结果导出为 CSV 文件。大多数 SQL 客户端都具有将结果直接保存到文件的内置功能。
- 为 ProcessMind 格式化:确保导出的 CSV 文件采用 UTF-8 编码,并且列标题与 ProcessMind 要求的属性名称(如 CaseId、Activity 和 Timestamp)匹配。提供的查询语句已经使用了正确的别名。
配置
- 关键数据实体:该查询主要依赖于导出到您的 BYOD 实例的以下实体:
PRODTABLE:包含生产订单的主要标题信息和状态。PRODROUTETRANS:提供单个生产工序及其完成情况的详细信息。INVENTPICKINGLISTJOUR:记录生产订单的物料领料情况。INVENTQUALITYORDERTABLE:追踪与生产关联的质量保证订单。
- 日期范围:建议从较短的日期范围开始(例如 3 到 6 个月的数据),以确保查询性能可控。查询使用生产订单的创建日期(来自
PRODTABLE的CREATEDDATETIME)进行筛选。 - 公司代码筛选:
DATAREAID字段用于筛选特定法人实体或公司的数据。您必须将'{CompanyCode}'占位符替换为相应的 ID,例如 “usmf”。 - 先决条件:此方法需要拥有 Dynamics 365 Finance and Operations 的系统管理员访问权限以配置 BYOD,并拥有 Azure SQL 数据库的参与者 (Contributor) 权限以执行查询。
- 性能:对于跨越多年或涉及多家公司的超大型数据集,请考虑在非高峰时段运行查询。您也可以将提取过程拆分为较短的时间段,随后再合并结果。
a 查询示例 sql
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
p.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity, -- Using calculated quantity at creation
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
p.COSTCALCDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.COSTCALCDATETIME IS NOT NULL AND p.PRODSTATUS >= 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
p.SCHEDDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.SCHEDDATE IS NOT NULL AND p.PRODSTATUS >= 3 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
pl.LEDGERVOUCHERPOSTEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
pl.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTPICKINGLISTJOUR pl
JOIN PRODTABLE p ON pl.INVENTREFID = p.PRODID AND pl.DATAREAID = p.DATAREAID
WHERE pl.LEDGERVOUCHERPOSTEDDATETIME IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
p.RELEASEDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.PRODSTATUS >= 4 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.MODIFIEDDATETIME > p.RELEASEDATE AND p.PRODSTATUS IN (4, 5) AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
p.STARTEDUPDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.STARTEDUPDATETIME IS NOT NULL AND p.PRODSTATUS >= 5 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
prt.PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
prt.TRANSDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
prt.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODROUTETRANS prt
JOIN PRODTABLE p ON prt.PRODID = p.PRODID AND prt.DATAREAID = p.DATAREAID
WHERE prt.POSTINGTYPE = 8 AND prt.TRANSDATE IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 6 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
qo.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
qo.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND qo.STATUS = 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 7 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 0 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'; 步骤
- 导航至数据管理工作区:登录 Microsoft Dynamics 365 Finance and Operations。使用搜索栏找到并进入
Data management工作区。 - 创建新导出项目:在工作区中选择
Export图标,创建一个新的数据导出项目。为项目起一个描述性名称,例如ProcessMind_Production_Orders。 - 选择导出文件格式:在项目配置中,选择导出的数据格式,例如 CSV 或 Excel。设置
Entity选项并指定格式详情。为了性能和兼容性,建议使用 CSV。 - 添加所需数据实体:向项目添加必要的数据实体,以捕获所有生产订单事件。您需要添加以下每个实体:
Production orders、Production order route transactions、Inventory quality orders以及Production picking list journal lines。对于每个实体,请确保选择了查询部分所述的所有相关字段。 - 应用数据筛选:为每个实体使用
Filter选项来界定数据导出范围。至少要按Company筛选以选择正确的法人实体。强烈建议在关键日期字段(例如Production orders实体的Creation date)上应用日期范围筛选,以将数据量限制在可管理的范围内,例如过去 6 个月。 - 配置增量导出(可选):为了进行持续分析,请将项目配置为增量导出。这可以通过在源实体上启用更改跟踪来实现,从而只提取自上次导出以来新增或修改的记录,显著缩短导出时间。
- 运行导出作业:项目配置完成后,点击操作面板中的
Export启动导出。您可以立即运行,也可以将其安排为定期批处理作业。 - 下载导出的文件:导出作业成功完成后,进入作业历史记录。下载数据包(ZIP 文件),其中包含您包含的每个实体的独立数据文件。
- 将数据转换为事件日志:导出的文件代表原始表数据,而非格式化的事件日志 (event log)。您必须使用外部工具(如 Python 脚本、Excel/Power BI 中的 Power Query 或 ETL 工具)来处理和合并这些文件中的数据。必须应用查询部分中列出的转换逻辑,将来自不同实体的日期和状态字段透视为单个事件日志文件,每行代表一个活动。
- 构建最终事件日志:确保最终转换后的 CSV 文件包含所需的列:
ProductionOrderNumber、ActivityName、EventTime、SourceSystem和LastDataUpdate,以及任何建议的属性。文件应包含标题行,并准备好上传至 ProcessMind。
配置
- 关键数据实体:此次提取的核心在于导出多个实体并随后进行关联。主要实体包括
Production orders(ProdTable)、Production order route transactions(ProdRouteTrans) 以及Inventory quality orders(InventQualityOrderTable)。 - 日期范围筛选:为管理数据量,请务必应用日期过滤器。最佳实践是根据
Creation date(CREATEDDATETIME) 筛选过去 3 到 6 个月的Production orders实体。这能确保在不增加系统负担的情况下,捕获完整且近期的流程。 - 公司筛选:为特定的公司或法人实体设置过滤器至关重要。您可以在导出项目的每个实体中使用 “筛选 (Filter)” 选项来完成此操作。
- 全量推送 vs. 增量推送:首次提取时需要进行全量推送。对于后续更新,强烈建议在实体上配置更改跟踪并执行增量导出,以提升性能并减轻数据负载。
- 先决条件:执行导出的用户必须拥有相应的安全角色,通常包括 “数据管理管理员 (Data management administrator)” 或具有访问所需数据实体权限的角色。
a 查询示例 config
/*
This is not a runnable script but a configuration and transformation plan for the Dynamics 365 Data Management Framework.
**Step 1: Configure the Export Project**
Export the following entities with the specified fields:
1. **Entity: Production orders (ProdTable)**
* `ProductionOrderNumber` (PRODID)
* `ProductionOrderStatus` (PRODSTATUS)
* `CreationDate` (CREATEDDATETIME)
* `LastUpdateDateStatusEstimate` (LASTUPDATEDATESTATUSESTIMATE)
* `LastUpdateDateStatusScheduled` (LASTUPDATEDATESTATUSSCHEDULED)
* `ReleaseDate` (RELEASEDATETIME)
* `StartDate` (STARTEDDATETIME)
* `ReportedFinishedDate` (REPORTEDFINISHEDDATETIME)
* `LastUpdateDateStatusEnded` (LASTUPDATEDATESTATUSENDED)
* `ModifiedDateTime` (MODIFIEDDATETIME)
* `CreatedByUser` (CREATEDBY)
* `ProductionSite` (INVENTSITEID)
* `ProductNumber` (ITEMID)
* `ProductionType` (PRODTYPE)
* `Quantity` (QTYsched)
* `ActualQuantity` (QTYCALC)
* `DeliveryDate` (DLVDATE)
2. **Entity: Production order route transactions (ProdRouteTrans)**
* `ProductionOrderNumber` (PRODID)
* `OperationNumber` (OPRNUM)
* `TransactionDate` (TRANSDATE)
* `TransactionTime` (TRANSTIME)
* `CreatedDateTime` (CREATEDDATETIME)
* `CreatedByUser` (CREATEDBY)
3. **Entity: Inventory quality orders (InventQualityOrderTable)**
* `QualityOrderNumber` (INVENTQUALITYORDERID)
* `ReferenceType` (REFTYPE)
* `ReferenceNumber` (PRODID)
* `QualityOrderStatus` (STATUS)
* `CreationDate` (CREATEDDATETIME)
* `ModifiedDateTime` (MODIFIEDDATETIME)
4. **Entity: Production picking list journal lines (ProdJournalBOM)**
* `JournalId` (JOURNALID)
* `ProductionOrderNumber` (PRODID)
* `PostedDateTime` (POSTEDDATETIME)
* `CreatedByUser` (CREATEDBY)
**Step 2: Apply Transformation Logic (Post-Export)**
Use a script or ETL tool to transform the exported files into a single event log CSV. For each row in the source files, generate events as described below.
*/
-- Production Order Created
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
CREATEDDATETIME AS EventTime,
PRODSTATUS AS ProductionOrderStatus,
DLVDATE AS PlannedStartDate,
-- [Logic to calculate PlannedEndDate] AS PlannedEndDate,
CREATEDBY AS UserId,
INVENTSITEID AS ProductionPlant,
ITEMID AS ProductNumber,
PRODTYPE AS ProductionType,
QTYCALC AS ActualQuantity,
-- [Your field for Production Priority] AS ProductionPriority
FROM ProdTable
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Estimated
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
LASTUPDATEDATESTATUSESTIMATE AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSESTIMATE IS NOT NULL
UNION ALL
-- Production Order Scheduled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
LASTUPDATEDATESTATUSSCHEDULED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSSCHEDULED IS NOT NULL
UNION ALL
-- Materials Picked For Production (based on the first picking list journal posting)
SELECT
PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
MIN(POSTEDDATETIME) AS EventTime, -- Use the earliest posting time for a given order
-- Other attributes from ProdTable...
FROM ProdJournalBOM
WHERE POSTEDDATETIME IS NOT NULL
GROUP BY PRODID
UNION ALL
-- Production Order Released
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
RELEASEDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE RELEASEDATETIME IS NOT NULL
UNION ALL
-- Production Order Adjusted (inferred from modification after release)
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE MODIFIEDDATETIME > RELEASEDATETIME AND PRODSTATUS NOT IN ('Ended', 'Cancelled') -- Example logic
UNION ALL
-- Production Started
SELECT
PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
STARTEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE STARTEDDATETIME IS NOT NULL
UNION ALL
-- Operation Completed
SELECT
PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM ProdRouteTrans
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Reported As Finished
SELECT
PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
REPORTEDFINISHEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE REPORTEDFINISHEDDATETIME IS NOT NULL
UNION ALL
-- Quality Order Generated
SELECT
PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND CREATEDDATETIME IS NOT NULL
UNION ALL
-- Quality Inspection Passed
SELECT
PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND STATUS = 'Pass' AND MODIFIEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Ended
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
LASTUPDATEDATESTATUSENDED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSENDED IS NOT NULL
UNION ALL
-- Production Order Cancelled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE PRODSTATUS = 'Stopped' -- Or the equivalent 'Cancelled' status enum value in your system