您的生产计划数据模板
您的生产计划数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- Microsoft Dynamics 365制造数据提取指南
生产计划属性
| 名称 | 说明 | ||
|---|---|---|---|
| 生产订单 ProductionOrderNumber | 生产订单的唯一标识符,用作跟踪所有相关计划和执行活动的主要案例ID。 | ||
| 说明 生产订单编号在Microsoft Dynamics 365中通常称为ProdId,是连接特定制造作业相关所有事件、物料、资源和成本的核心标识符。它支持对单个作业单元的生产计划和执行生命周期进行端到端分析。 在流程挖掘中,此属性对于将相关事件归入同一案例至关重要。按生产订单编号分析流程,有助于识别从创建、排程到完成和成本核算整个标准生产流转中的瓶颈、延误和偏差。 为什么重要 这是基础案例标识符,对于归集所有相关事件并还原端到端Production Planning流程以开展分析至关重要。 获取位置 这是Microsoft Dynamics 365 Manufacturing中ProdTable表的“ProdId”字段。 示例 WO-000456WO-000457WO-000458 | |||
| 上次数据更新 LastDataUpdate | 表示此事件数据上次从源系统刷新或提取时间的时间戳。 | ||
| 说明 此属性提供最近一次从源系统提取数据的日期和时间。它是一个元数据字段,对于了解分析结果的新鲜度和时效性至关重要。 了解数据上次更新时间,有助于分析人员和业务用户信任流程挖掘工具生成的洞察。它可以明确仪表板反映的是实时信息,还是此前某个时间点的数据,这对于运营决策十分重要。 为什么重要 此属性对数据治理至关重要,可确保用户了解数据的新鲜度,并信任流程洞察的时效性。 获取位置 此时间戳在数据提取、转换和加载(ETL)过程中生成,并写入每条记录。 示例 2023-05-20T05:00:00Z2023-05-21T05:00:00Z | |||
| 事件时间 EventTime | 表示活动发生时间的精确时间戳。 | ||
| 说明 事件时间,即时间戳,记录具体活动发生的准确日期和时间。这是所有基于时间的流程挖掘分析的基础,包括计算周期时间、识别步骤间延误,以及了解流程绩效随时间的变化。 在Production Planning中,此属性用于衡量计划周期时间、生产启动延误和订单履约总时长等指标。准确且按时间顺序排列的时间戳,是构建正确、有意义流程模型的必要条件。 为什么重要 此时间戳对于排列事件顺序、计算活动间时长,以及执行周期时间和瓶颈识别等时间分析至关重要。 获取位置 可在多个交易表中找到,例如“ProdTable”中的“createdDateTime”,以及“ProdRouteTrans”“ProdJournalRoute”和“ProdJournalBOM”中的交易日期字段。 示例 2023-04-15T09:00:12Z2023-04-15T11:30:00Z2023-04-16T14:22:05Z | |||
| 活动名称 ActivityName | Production Planning流程中发生的具体业务事件或步骤的名称。 | ||
| 说明 活动名称描述生产计划生命周期中的单个步骤,例如“Production Order Created”、“Materials Picked For Production”或“Production Started”。这些活动是流程图的基本组成部分。 分析这些活动的顺序和持续时间,可以实现流程路径可视化,识别常见路径,发现返工循环,并衡量不同阶段所耗费的时间。此属性对于了解流程各个节点的实际情况至关重要。 为什么重要 此属性定义流程中的步骤,用于构建流程图,并分析流程路径、变体和瓶颈。 获取位置 此值通常来自事件日志,或通过映射“ProdRouteTrans”“ProdJournalBOM”等表中的不同状态变更和交易类型,以及“ProdTable”状态字段的变更得出。 示例 创建生产订单发布生产订单开始生产生产报告完工 | |||
| 源系统 SourceSystem | 提取数据的记录系统。 | ||
| 说明 此属性用于标识事件数据来源的信息系统。在此流程视图中,该值应始终为“Microsoft Dynamics 365 Manufacturing”。 在多个系统集成的环境中,此字段对于追踪数据来源、排查数据质量问题,以及了解不同系统如何共同构成整体流程至关重要。它可以明确所分析数据的来源。 为什么重要 它提供有关数据来源的重要背景信息,对于数据治理、数据验证,以及管理来自多个企业系统的数据管道至关重要。 获取位置 这是一个静态值,应在数据提取和转换过程中添加,用于标记数据集来源。 示例 Microsoft Dynamics 365制造D365 F&O | |||
| 产品编号 ProductNumber | 待制造物料的唯一标识符。 | ||
| 说明 产品编号,即物料ID,用于指定生产订单计划制造的成品。它将生产流程与具体产品关联起来,同时关联该产品对应的物料清单和工艺路线说明。 按产品编号分析流程,有助于发现特定产品在制造生命周期中的差异。例如,某些产品可能周期时间更长、需要更多返工,或更容易发生延误,从而为产品和流程工程师提供有价值的依据。 为什么重要 它支持根据制造产品分析流程差异,帮助识别特定产品的瓶颈或质量问题。 获取位置 这是“ProdTable”表中的“ItemId”字段。 示例 FG-1001FG-2050ASSY-500B | |||
| 实际数量 ActualQuantity | 订单中已成功生产并报告完工的产品数量。 | ||
| 说明 Actual Quantity表示某个生产订单中已完成并通过质量检查的产品数量。该值会在生产订单执行“Reported as finished”时记录。 该属性用于分析生产良率和效率。将Actual Quantity与Planned Quantity进行比较,有助于计算报废率并了解生产损失。它也是产出分析和产能利用率仪表板的重要组成部分。 为什么重要 它对于计算生产良率、报废率和实际产出至关重要,可帮助您了解制造效率和绩效。 获取位置 订单报告完工时,该值通常来自ProdTable或相关日记账过账表中的QtyGood字段。 示例 100985000 | |||
| 生产优先级 ProductionPriority | 用于表示生产订单紧急程度或优先级的评级。 | ||
| 说明 Production Priority是计划员和排程员用于管理车间作业顺序的字段。高优先级订单可能会被加急处理,从而打乱其他订单的计划排程。 分析该属性有助于了解生产计划因高优先级或加急订单而被打乱的频率。跟踪订单生命周期中的优先级变化,可以揭示需求或计划的不稳定性。这是“Expedited Production Trends”仪表板和“Expedited Production Rate”KPI的关键数据。 为什么重要 这有助于识别加急订单的频率和影响,从而判断计划是否不稳定,或运营管理是否过于被动。 获取位置 这可能是ProdTable中的标准字段或自定义字段,具体配置通常因公司而异。 示例 正常高紧急 | |||
| 生产工厂 ProductionPlant | 执行生产订单的制造地点或工厂。 | ||
| 说明 生产工厂用于标识负责制造流程的实际地点或设施,是细分和比较生产绩效的重要组织维度。 在流程挖掘中,此属性支持对不同工厂的绩效进行基准比较。分析人员可以比较各地点的周期时间、资源利用率和标准流程遵循情况,以识别最佳实践或发现需要运营改进的工厂。它对于产能利用率分析至关重要。 为什么重要 它支持比较不同制造地点的绩效并进行基准分析,帮助识别最佳实践和区域特有问题。 获取位置 这是“ProdTable”表中的“InventSiteId”字段。 示例 SITE-ASITE-BMain-WH | |||
| 生产类型 ProductionType | 生产订单的分类,例如标准生产、返工或项目型生产。 | ||
| 说明 Production Type用于根据订单用途对订单进行分类。例如,Standard订单用于常规库存生产,Rework订单用于修复此前生产的产品缺陷,Project订单则关联特定客户项目。 该属性对于创建可比的分析视图非常重要。Rework订单的流程本质上不同于Standard订单。按Production Type细分流程分析,可确保比较结果具有实际意义,并帮助您了解每种类型的独特挑战和流程路径。 为什么重要 该属性支持对分析进行细分,因为Standard和Rework等不同订单类型通常遵循不同流程,并具有不同的绩效预期。 获取位置 这是ProdTable表中的ProdType字段。 示例 标准返工项目 | |||
| 生产订单状态 ProductionOrderStatus | 表示生产订单当前所处的生命周期状态。 | ||
| 说明 生产订单状态反映订单在制造生命周期中的进展。Dynamics 365中的常见状态包括Created、Estimated、Scheduled、Released、Started、Reported as finished和Ended。此属性可以随时概览每个订单所处的位置。 在流程挖掘中,分析状态变化是定义活动和理解流程路径的主要方式。您可以利用它筛选处于特定状态的订单,分析每种状态的停留时间,并识别停滞或延迟的订单。 为什么重要 此属性提供订单进度的高层概览,对于筛选、一致性检查以及分析不同生产阶段的耗时至关重要。 获取位置 这是“ProdTable”表中的“ProdStatus”字段。 示例 已排程已发布已开始已结束 | |||
| 用户 UserId | 执行活动或负责该活动的用户标识符。 | ||
| 说明 用户ID用于标识执行特定流程步骤的员工或系统账户,例如发布订单或报告完工。此信息可以帮助您了解流程中的工作由谁执行。 按用户分析流程,有助于了解工作负载分配、识别培训机会、比较个人或团队绩效,以及调查特定用户造成的偏差。它对于合规和审计追踪同样重要。 为什么重要 它支持按用户或团队分析流程绩效,帮助识别自动化机会,并为关键流程活动提供审计追踪。 获取位置 可在多个表的“modifiedBy”或“createdBy”等字段中找到,也可在“ProdJournalTable”等交易日志表的用户字段中找到。 示例 j.smithm.jonesAX_BATCH_SVC | |||
| 计划开始日期 PlannedStartDate | 生产订单计划开始的日期和时间。 | ||
| 说明 计划开始日期是排程流程的重要输出,表示订单开始生产活动的目标时间。该日期根据物料可用性、资源产能和需求期限确定。 此属性对于分析计划遵循情况至关重要。通过将计划开始日期与生产实际开始时间(来自“Production Started”活动时间戳)进行比较,企业可以衡量准时性、识别延误原因,并计算生产计划遵循率等KPI。 为什么重要 它是衡量计划遵循情况、识别计划与实际生产开始之间延误的基准。 获取位置 这是“ProdTable”表中的“SchedStart”字段。 示例 2023-04-18T08:00:00Z2023-04-19T08:00:00Z2023-04-20T08:00:00Z | |||
| 计划结束日期 PlannedEndDate | 生产订单计划完成的日期和时间。 | ||
| 说明 计划结束日期是排程引擎确定的生产订单目标完成时间。它会综合考虑工序时间、资源日历和周期时间,预测成品准备就绪的时间。 在流程分析中,此属性对于评估按时完成绩效至关重要。将计划结束日期与实际完成时间戳(来自“Production Reported As Finished”或“Production Order Ended”活动)进行比较,可以计算按时完成生产率KPI,并帮助识别延迟交付的系统性原因。 为什么重要 此属性是衡量按时完成率和分析生产排程准确性的基准。 获取位置 这是“ProdTable”表中的“SchedEnd”字段。 示例 2023-04-25T17:00:00Z2023-04-26T17:00:00Z2023-04-27T17:00:00Z | |||
| 修订编号 ProductionOrderRevisionNumber | 生产计划初次创建后被调整的次数。 | ||
| 说明 该属性用于跟踪生产订单在排程或发布后发生的修订或重大变更次数,例如数量、日期或路线变更。数值越高,表示计划越不稳定。 这是“Production Plan Revision Rate”KPI的直接衡量指标。分析该指标有助于识别计划不稳定的来源,例如需求频繁变化或初始计划不准确。它还可以量化返工和重新排程工作量,而这些工作通常会导致效率下降。 为什么重要 它直接衡量计划稳定性,并支持“Production Plan Revision Rate”KPI,帮助您发现变更和返工过多的流程。 获取位置 这是一个推导属性,需要针对每个case统计“Production Order Adjusted”活动的发生次数。 示例 012 | |||
| 按时开始 ProductionScheduleAdherence | 如果生产订单在计划开始日期当天或之前开始,则该布尔标记为true。 | ||
| 说明 该计算属性以简单的二元指标表示生产启动是否遵循计划。它将实际开始时间戳,即“Production Started”事件,与PlannedStartDate属性进行比较。 该标记非常适合创建清晰简洁的仪表板和KPI,例如“Production Schedule Adherence Rate”。您可以轻松筛选和汇总订单,查看按时开始的订单比例,并分析延迟订单的特征,无需在分析工具中直接执行日期比较。 为什么重要 这简化了计划执行情况的报告和KPI计算,便于筛选和汇总按时订单与延迟订单。 获取位置 这是一个计算指标,逻辑为:“Production Started”EventTime <= PlannedStartDate。 示例 truefalse | |||
| 物料可用性 MaterialAvailabilityStatus | 表示生产订单所需原材料是否可用。 | ||
| 说明 该属性用于跟踪生产所需组件的准备情况,可能反映“Available”“On Order”或“Shortage”等状态。计划员可据此判断生产订单是否能够按计划实际开始。 在流程挖掘中,该属性对于诊断生产启动延迟的根本原因至关重要。将此状态与“Production Order Released”到“Production Started”之间的时间关联起来,分析人员可以量化物料短缺对计划执行和整体周期时间的影响。这直接支持“Material Availability Delay Impact”仪表板。 为什么重要 这对于了解并量化由物料短缺导致的生产启动延迟至关重要,可将供应链绩效与制造效率联系起来。 获取位置 该状态通常不是单一字段,而是通过InventSum表检查生产订单BOM中所有物料的现有库存水平后推导得出。 示例 完全可用部分短缺不可用 | |||
| 生产启动延迟 ProductionStartDelay | 从订单发布到实际开始生产所经过的时间。 | ||
| 说明 该计算时长用于衡量车间的等待时间或排队时间,即“Production Order Released”活动与“Production Started”活动之间的时间差。 该KPI对于“Resource Allocation Delay Analysis”仪表板至关重要,因为它可以定位计划完成且订单已准备执行后发生的延迟。数值较高可能表示资源可用性、物料备料或向车间传递信息方面存在问题,为运营改进提供明确方向。 为什么重要 它精确衡量从“准备就绪”到“开始生产”的延迟,帮助您定位与资源可用性或车间准备情况相关的瓶颈。 获取位置 这是一个计算指标:Timestamp('Production Started') - Timestamp('Production Order Released')。 示例 0天4小时15分钟1天2小时0分钟0天1小时30分钟 | |||
| 生产线 ProductionLine | 分配给生产订单的具体生产线、工作中心或资源组。 | ||
| 说明 Production Line用于标识执行制造作业的具体机器、生产单元或资源组。与Production Plant相比,它提供了更细粒度的信息。 按Production Line分析流程对于详细的产能和利用率分析至关重要。它有助于识别负载过高的工作中心,比较生产同一产品的不同生产线的效率,并定位工厂层面可能无法发现的资源特定瓶颈。 为什么重要 这支持对资源利用率和绩效进行细粒度分析,帮助您识别负载过高的工作中心或效率低下的生产线。 获取位置 该信息通常位于生产路线交易记录中的WrkCtrId字段,即ProdRoute或ProdRouteTrans表。 示例 LINE-01LINE-02CNC-A | |||
| 结束时间 EndTime | 表示活动完成时间的精确时间戳。 | ||
| 说明 End Time表示特定活动的完成时间。Start Time表示活动开始时间,而End Time用于了解该步骤的实际持续时间或处理时间。 在流程挖掘中,同时记录活动的Start Time和End Time,可以更细致地区分等待时间与处理时间。这有助于区分活动实际执行所用的时间,以及等待下一步骤开始所用的时间,对于详细的瓶颈分析至关重要。 为什么重要 它支持计算活动处理时间,并将其与等待时间区分开来,从而实现更精确的瓶颈分析。 获取位置 该值通常为推导值。例如,“Production Started”的结束时间可以取“Operation Completed”的开始时间。在某些日志中,也可能直接记录结束时间戳。 示例 2023-04-15T09:30:45Z2023-04-15T12:00:00Z2023-04-16T15:00:10Z | |||
| 计划数量 PlannedQuantity | 计划生产的产品数量。 | ||
| 说明 Planned Quantity是某个生产订单计划制造的目标产品数量。该数量通常由销售订单需求、安全库存要求或主计划驱动。 该属性是良率和报废等绩效指标的基准。将Planned Quantity与实际生产的Actual Quantity进行比较,计划员可以监控生产效率和物料差异。它也是产能计划和物料需求计划的基础数据。 为什么重要 这是衡量生产良率和报废率的基准数量,需要与实际生产数量进行比较。 获取位置 这是ProdTable表中的QtySched字段。 示例 1005000250 | |||
| 质量订单编号 QualityOrderNumber | 与生产订单关联的质量控制订单标识符。 | ||
| 说明 需要质量检验时,Dynamics 365通常会生成Quality Order。该属性将生产流程与质量保证流程关联起来,并记录相关质量订单的ID。 这种关联有助于构建包含质量管理步骤的端到端流程视图。您可以据此分析质量检验对生产周期时间的影响,识别质量流程中的延迟,并了解不同产品或生产线的质量检查频率。 为什么重要 它将生产流程与质量保证流程连接起来,支持分析质量检验对整体周期时间的影响。 获取位置 该信息存储在质量管理表中,例如InventQualityOrderTable,并需要关联回生产订单。 示例 QO-00123QO-00124QO-00125 | |||
生产计划活动
| 活动 | 说明 | ||
|---|---|---|---|
| 创建生产订单 | 此活动表示创建生产订单,用于正式记录对特定数量产品的需求。通常在计划生产订单确认后记录,并在系统中生成带有唯一ID的正式记录。 | ||
| 为什么重要 这是生产流程的主要开始事件。分析从创建到后续步骤的耗时,有助于衡量整体计划周期时间和效率。 获取位置 此事件根据ProdTable中生产订单记录的创建时间戳推断得出。初始状态通常为“Created”。 采集 记录ProdTable中新条目的创建时间戳,其中ProdStatus为“Created”。 事件类型 inferred | |||
| 发布生产订单 | 此活动表示生产订单已获批准并授权在车间执行。这是一个关键里程碑,会发布作业卡和工艺路线卡等单据。 | ||
| 为什么重要 这是从计划到执行的正式交接。“Scheduled”到“Released”之间的耗时可以反映审批延误或最终检查耗时,而“Released”到“Started”之间的耗时则用于衡量车间准备情况。 获取位置 当ProdTable中的生产订单状态变为“Released”时记录此活动。通常由用户手动操作或系统自动触发。 采集 检测ProdTable中ProdStatus字段变为“Released”的时间戳。 事件类型 inferred | |||
| 开始生产 | 表示订单在车间开始实际生产作业。通常在通过车间终端启动第一道工序或过账日记账时记录。 | ||
| 为什么重要 此活动提供生产的实际开始时间,对于计算启动延误、计划遵循情况和实际周期时间至关重要。 获取位置 当ProdTable中的生产订单状态变为“Started”时记录此活动。通常由第一道工序的作业卡或工艺路线卡日记账过账触发。 采集 检测ProdTable中ProdStatus字段变为“Started”的时间戳。 事件类型 inferred | |||
| 排程生产订单 | 此活动表示对生产订单进行排程,为其作业分配具体资源、日期和时间。该步骤可能包括作业排程或更详细的工序排程。 | ||
| 为什么重要 排程对于产能计划和资源管理至关重要。分析订单排程耗时以及排程完成后到发布前的间隔,有助于发现计划和产能约束。 获取位置 当ProdTable中的生产订单状态变为“Scheduled”时记录此活动。通常由用户运行排程函数触发。 采集 检测ProdTable中ProdStatus字段变为“Scheduled”的时间戳。 事件类型 inferred | |||
| 生产报告完工 | 表示指定数量产品的制造过程已实际完成,成品已进入库存。这是一个关键状态更新,会触发库存交易。 | ||
| 为什么重要 这标志着实际生产结束,对于计算按时完成率、实际生产时长和吞吐量至关重要。 获取位置 当ProdTable中的生产订单状态变为“Reported as finished”时记录此活动。通常由过账“Report as Finished”日记账触发。 采集 检测ProdTable中ProdStatus字段变为“Reported as finished”的时间戳。 事件类型 inferred | |||
| 结束生产订单 | 这是最后一项活动,表示生产订单完成财务结算。所有成本均已计算并过账,之后不能再对该订单执行交易。 | ||
| 为什么重要 这标志着订单在实物和财务层面真正完成。“Reported as Finished”到“Ended”之间的延误,可能表明成本核算或财务结算流程存在问题。 获取位置 这是最终状态变更:当“ProdTable”中的“ProdStatus”字段设置为“Ended”时记录。通常由运行成本计算并结束订单触发。 采集 检测ProdTable中ProdStatus字段变为“Ended”的时间戳。 事件类型 inferred | |||
| 估算生产订单 | 表示计算生产订单预计的物料消耗和成本消耗。这是关键的计划步骤,可确保在继续执行前明确财务和物料需求。 | ||
| 为什么重要 估算延误可能成为计划阶段的重要瓶颈。跟踪此活动有助于识别成本和物料计划流程中的低效环节。 获取位置 当ProdTable中的生产订单状态变为“Estimated”时记录此活动。通常由用户在订单上运行“Estimate”函数触发。 采集 检测ProdTable中ProdStatus字段变为“Estimated”的时间戳。 事件类型 inferred | |||
| 取消生产订单 | 表示生产订单在完成前被取消。这是流程未成功结束的一种替代结果。 | ||
| 为什么重要 跟踪取消情况有助于识别流程失败原因,例如需求变化或计划错误。取消率过高可能表明存在系统性问题。 获取位置 这是根据状态变更推断出的另一种结束状态。具体状态可能有所不同,但通常包括将订单状态重置为之前的状态,并标记为已取消。 采集 检测表示取消的状态变更。可能需要结合具体系统进行分析。 事件类型 inferred | |||
| 完成工序 | 此活动表示生产路线中某项制造作业或步骤完成。一个生产订单通常会包含多个此类事件。 | ||
| 为什么重要 分析工序之间的耗时,有助于识别生产流程内部的瓶颈,并更细致地了解车间流转情况。 获取位置 这是从每道工序的工艺路线卡日记账(ProdJournalRoute)过账中获取的明确事件,表示该步骤已完成。 采集 记录与生产订单关联的每条ProdJournalRoute记录的过账时间戳。 事件类型 explicit | |||
| 已为生产拣配物料 | 表示生产订单所需的原材料已从仓库拣出,可以投入使用。通常在原材料拣配作业完成或拣配清单日记账过账后记录此事件。 | ||
| 为什么重要 此活动是启动生产的关键关口。排程与物料拣配之间的延误,可以反映仓库作业或物料可用性方面的问题。 获取位置 通常可在与生产订单关联的仓库管理表(WHSWorkTable)或库存日记账(InventJournalTrans)中获取这一明确事件。 采集 记录与生产订单关联的拣配清单日记账的过账时间戳。 事件类型 explicit | |||
| 生成质量订单 | 系统已创建质量订单,用于检查生产订单的产出。此事件表示已开始对生产成品执行质量保证流程。 | ||
| 为什么重要 跟踪质量流程对于了解总周期时间非常重要。质量检验延误可能导致产品无法发运或无法进入后续流程。 获取位置 这是根据InventQualityOrderTable中引用源生产订单的记录创建情况确定的明确事件。 采集 记录与生产订单ID关联的InventQualityOrderTable中质量订单的创建时间戳。 事件类型 explicit | |||
| 调整生产订单 | 表示生产订单发布后发生的重大变更,例如数量变更或日期调整。此事件通过比较变更前后的关键字段推断得出。 | ||
| 为什么重要 频繁调整通常表明计划不稳定或需求波动较大,进而导致低效和返工。跟踪此活动有助于量化变更频率及其影响。 获取位置 在订单状态为“Released”后,通过分析变更日志或比较ProdTable记录快照中的“QtySched”“SchedEnd”等字段推断得出。 采集 识别“Released”事件时间戳之后ProdTable中关键字段(例如数量和日期)的变更。 事件类型 calculated | |||
| 质量检验通过 | 表示与本次生产运行关联的质量订单已成功完成并通过验证,确认生产的产品符合要求的质量标准。 | ||
| 为什么重要 这是质量流程中的关键里程碑。质量订单生成到检验通过之间的时长,可以反映QA团队的工作效率。 获取位置 根据InventQualityOrderTable记录的状态变更为“Pass”推断得出。具体状态值可能有所不同。 采集 检测关联InventQualityOrderTable记录的状态更新为“Pass”的时间戳。 事件类型 inferred | |||
提取指南
步骤
- 导航至数据管理工作空间:登录Microsoft Dynamics 365 Finance and Operations。使用搜索栏查找并进入
Data management工作空间。 - 创建新的导出项目:在工作空间中,选择
Export磁贴,创建新的数据导出项目。为项目输入描述性名称,例如ProcessMind_Production_Orders。 - 选择导出文件格式:在项目配置中选择所需的数据导出格式,例如CSV或Excel。设置
Entity选项并指定格式详情。出于性能和兼容性考虑,建议使用CSV。 - 添加所需数据实体:将必要的数据实体添加到项目中,以捕获所有生产订单事件。您需要添加以下每个实体:
生产订单、Production order route transactions、Inventory quality orders和Production picking list journal lines。对于每个实体,请确保选择查询部分列出的所有相关字段。 - 应用数据筛选条件:对每个实体使用筛选选项限定数据导出范围。至少应按
Company筛选,以选择正确的法人实体。强烈建议针对关键日期字段应用日期范围筛选,例如在生产订单实体中按Creation date筛选,以将数据量限制在可管理的时间段内,例如最近6个月。 - 配置增量导出(可选):如需持续分析,可将项目配置为增量导出。通过跟踪源实体中的变更,只提取上次导出以来新增或修改的记录,从而显著缩短导出时间。
- 运行导出作业:项目配置完成后,点击操作窗格中的
Export启动导出。您可以立即运行,也可以将其安排为定期批处理作业。 - 下载导出文件:导出作业成功完成后,转到作业历史记录。下载导出包,该ZIP文件包含所选每个实体对应的独立数据文件。
- 将数据转换为事件日志:导出文件是原始表数据,并非格式化的事件日志。您必须使用外部工具(例如Python脚本、Excel/Power BI中的Power Query或ETL工具)处理并合并这些文件中的数据。必须应用查询部分所述的转换逻辑,将各实体中的日期和状态字段透视为单个事件日志文件,每项活动占一行。
- 整理最终事件日志:确保转换后的最终CSV文件包含以下必需列:
ProductionOrderNumber、ActivityName、EventTime、SourceSystem和LastDataUpdate,以及建议的其他属性。文件应包含表头,并准备好上传到ProcessMind。
配置
- 关键数据实体:此次提取的核心是导出多个实体并在后续进行关联。主要实体包括
生产订单(ProdTable)、Production order route transactions(ProdRouteTrans)和Inventory quality orders(InventQualityOrderTable)。 - 日期范围筛选:为控制数据量,请始终应用日期筛选。建议按
Creation date(CREATEDDATETIME)筛选生产订单实体,提取最近3到6个月的数据。这样既能获取完整的近期流程,也不会使系统负载过高。 - 公司筛选:必须针对您要分析的具体公司或法人实体设置筛选条件。在导出项目中,通过每个实体的筛选选项完成设置。
- 全量与增量推送:首次提取需要执行全量推送。后续更新强烈建议在实体上配置变更跟踪并执行增量导出,以提升性能并减少数据负载。
- 前提条件:执行导出的用户必须拥有适当的安全角色,通常包括
Data management administrator,或拥有访问所需数据实体权限的角色。
a 示例查询 sql
/*
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 Finance and Operations环境中配置“Bring your own database”功能。这包括设置Azure SQL Database,并配置从Dynamics 365导出数据。
- 发布所需实体:在“Data management”工作区中进入“Data entities”。搜索并将以下关键实体发布到BYOD数据库:ProdTable、ProdRouteTrans、InventPickingListJour和InventQualityOrderTable。确保将其配置为定期导出。
- 验证数据同步:确认已发布实体的数据正在成功、定期同步到目标Azure SQL Database。检查导出作业历史记录,确认是否存在错误。
- 连接BYOD数据库:使用SQL Server Management Studio(SSMS)或Azure Data Studio等SQL客户端,连接存储Dynamics 365数据的Azure SQL Database。
- 准备SQL查询:打开新的查询窗口,复制本文档提供的完整SQL查询。
- 设置查询参数:在查询中找到占位变量,将
{StartDate}、{EndDate}和{CompanyCode}替换为所需日期范围,以及要分析的具体公司的DataAreaId。 - 执行查询:针对BYOD数据库运行修改后的SQL查询。执行时间取决于数据量和指定的日期范围。
- 检查结果:查询完成后,检查输出,确保包含所有提取活动的预期列和数据。结果集即为事件日志。
- 导出事件日志:将查询结果导出为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 Database上的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}'; 步骤
- 确认已安装Power BI Desktop或其他包含Power Query的获批工具,并确认用户已获授权读取所需的Microsoft Dynamics 365 Manufacturing数据实体。确认环境URL、法律实体或公司范围,以及获批的身份验证方式。
- 在Power BI Desktop中选择“获取数据”,然后选择获批的Dynamics 365连接器,或组织专用的OData或Dataverse连接。使用管理员配置的[Your Dynamics 365 environment connection]和[Your credentials]。请勿假定每个部署环境都提供相同的实体、端点或菜单路径。
- 选择生产订单抬头实体、生产订单工序或路线实体、物料领料或领料单实体、生产过账实体、质量订单实体,以及识别状态变更所需的获批审计、历史或变更跟踪实体。将查询中的每个源引用替换为您所在环境中可用的对应实体或查询。
- 配置提取范围。应用[Start date parameter]、[End date parameter]和[Your company or legal entity filter]。将查询限制为所需工厂、产品、订单类型和状态下的生产订单。保留用于区分创建、估算、排程、领料、下达、调整、开始、工序完成、报告完工、质量、结束和取消的源时间戳。
- 在Power Query中统一源列名称和数据类型。将事件时间戳转换为一致的日期时间类型,并规范化标识符、状态值、公司值、工厂值、产品编号、用户、数量和优先级。如果源字段不可用,应返回null,而不是自行填充值。使用生产订单号作为案例标识符。
- 为每项活动建立一个事件表。每个表必须返回ProductionOrderNumber、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProductionOrderStatus、PlannedStartDate、PlannedEndDate、UserId、ProductionPlant、ProductNumber、ProductionType、ActualQuantity和ProductionPriority。活动名称必须是与13个必需名称之一匹配的固定值。
- 仅根据获批的变更前后历史、审计或变更跟踪源识别Production Order Adjusted。比较数量、计划日期、状态、工厂、产品和优先级等相关字段。对于每项符合条件的变更,使用记录的变更时间戳生成一行调整记录。不得仅根据当前生产订单快照推断调整。
- 使用UNION ALL合并全部13个活动表。删除缺少生产订单号或事件时间戳的行,但不要对合法重复的工序完成、调整或质量事件去重。按ProductionOrderNumber和EventTime排序;如有可用字段,还应采用确定性的次级排序。
- 将结果表加载到Power BI,或导出为CSV或其他ProcessMind支持的事件日志格式。确保导出的表头严格为ProductionOrderNumber、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProductionOrderStatus、PlannedStartDate、PlannedEndDate、UserId、ProductionPlant、ProductNumber、ProductionType、ActualQuantity和ProductionPriority。
- 上传到ProcessMind前,验证每项必需活动都以明确的事件日志行表示,时间戳使用一致的时区,ProductionOrderNumber已填充,且LastDataUpdate标识本次提取刷新时间。ProcessMind会按原样读取事件日志,不会推导缺失事件。
配置
- 连接:使用适用于Dynamics 365环境的获批Power Query连接器和身份验证方式。将[Your Dynamics 365 environment connection]和[Your credentials]替换为组织批准的值。
- 源实体:选择环境中可用的生产订单抬头、工序或路线、物料领料或领料单、生产过账、质量订单,以及获批的审计或变更跟踪实体。实体名称和可用性因部署环境而异,必须在元数据浏览器中确认。
- 日期范围:先使用3至6个月的范围。尽可能在源端使用EventTime筛选;验证长周期生产订单或历史状态转换时,再扩大范围。
- 公司和工厂筛选:应用[Your company or legal entity filter],并在适用时应用所需的生产工厂筛选。如果环境包含多个法律实体且订单号可能重复,请勿使用通用公司筛选。
- 生产订单筛选:按所需的生产订单类型、产品、工厂、状态和订单号范围筛选。若这些结果对流程分析有用,请勿排除已取消或已结束的订单。
- 事件纳入:保留重复的工序完成、物料领料、质量和调整事件。不要将日志压缩为每个生产订单一行。
- 时区:将所有源时间戳转换为一个有明确记录的时区。如果源系统提供原始时间戳或时区偏移,请予以保留。
- 刷新元数据:为每一行填充刷新或提取时间戳到LastDataUpdate。如果整个数据集在一次刷新中提取,使用同一个刷新时间戳即可。
- 性能:将日期、公司、工厂和订单筛选下推到源端。仅选择必需列,避免不必要的合并,构建可复用的源查询;对于大型数据集,可考虑增量刷新。
- 前提条件:Power BI Desktop或获批的Power Query宿主、访问Dynamics 365环境的网络权限、读取所有所选实体的有效权限,以及所需的Dynamics 365 Manufacturing、仓库、质量、审计或变更跟踪访问权限。
- 取决于配置的数据:如果必需的事件源未启用,请使用[Configure based on your system]并记录缺失的源。不要用当前状态快照替代历史事件。
a 示例查询 sql
let
StartDate = #datetime(2026, 1, 1, 0, 0, 0),
EndDate = #datetime(2026, 6, 30, 23, 59, 59),
CompanyFilter = "[Your company or legal entity filter]",
SourceSystemValue = "Microsoft Dynamics 365 Manufacturing",
RefreshTime = DateTimeZone.RemoveZone(DateTimeZone.UtcNow()),
ProductionOrderHeader = [Your production order header query],
ProductionOrderOperation = [Your production order operation or route query],
MaterialPicking = [Your material picking or picking list query],
ProductionPosting = [Your production posting query],
QualityOrder = [Your quality order query],
ProductionOrderHistory = [Your approved production order audit or change tracking query],
Header = Table.SelectRows(ProductionOrderHeader, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Operations = Table.SelectRows(ProductionOrderOperation, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Picking = Table.SelectRows(MaterialPicking, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Posting = Table.SelectRows(ProductionPosting, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Quality = Table.SelectRows(QualityOrder, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
History = Table.SelectRows(ProductionOrderHistory, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Created = Table.SelectRows(Header, each [EventType] = "Created" or [EventType] = "Firmed"),
Estimated = Table.SelectRows(Header, each [EventType] = "Estimated"),
Scheduled = Table.SelectRows(Operations, each [EventType] = "Scheduled"),
Picked = Table.SelectRows(Picking, each [EventType] = "Picked" or [EventType] = "Posted"),
Released = Table.SelectRows(Header, each [EventType] = "Released"),
Adjusted = Table.SelectRows(History, each [ChangedField] = "Quantity" or [ChangedField] = "PlannedStartDate" or [ChangedField] = "PlannedEndDate" or [ChangedField] = "Status" or [ChangedField] = "ProductionPlant" or [ChangedField] = "ProductNumber" or [ChangedField] = "ProductionPriority"),
Started = Table.SelectRows(Posting, each [EventType] = "Started"),
OperationCompleted = Table.SelectRows(Operations, each [EventType] = "Completed"),
ReportedFinished = Table.SelectRows(Posting, each [EventType] = "Reported as finished" or [EventType] = "Finished"),
QualityGenerated = Table.SelectRows(Quality, each [EventType] = "Generated" or [EventType] = "Created"),
QualityPassed = Table.SelectRows(Quality, each [EventType] = "Passed" or [EventType] = "Validated"),
Ended = Table.SelectRows(Header, each [EventType] = "Ended"),
Cancelled = Table.SelectRows(Header, each [EventType] = "Cancelled"),
ToEvent = (InputTable as table, Activity as text) as table =>
let
Selected = Table.SelectColumns(InputTable, {"ProductionOrderNumber", "EventTime", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}, MissingField.UseNull),
Named = Table.AddColumn(Selected, "ActivityName", each Activity, type text),
Source = Table.AddColumn(Named, "SourceSystem", each SourceSystemValue, type text),
Updated = Table.AddColumn(Source, "LastDataUpdate", each RefreshTime, type datetime),
Ordered = Table.ReorderColumns(Updated, {"ProductionOrderNumber", "ActivityName", "EventTime", "SourceSystem", "LastDataUpdate", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}),
Valid = Table.SelectRows(Ordered, each [ProductionOrderNumber] <> null and [ProductionOrderNumber] <> "" and [EventTime] <> null)
in
Valid,
EventsCreated = ToEvent(Created, "Production Order Created"),
EventsEstimated = ToEvent(Estimated, "Production Order Estimated"),
EventsScheduled = ToEvent(Scheduled, "Production Order Scheduled"),
EventsPicked = ToEvent(Picked, "Materials Picked For Production"),
EventsReleased = ToEvent(Released, "Production Order Released"),
EventsAdjusted = ToEvent(Adjusted, "Production Order Adjusted"),
EventsStarted = ToEvent(Started, "Production Started"),
EventsOperationCompleted = ToEvent(OperationCompleted, "Operation Completed"),
EventsReportedFinished = ToEvent(ReportedFinished, "Production Reported As Finished"),
EventsQualityGenerated = ToEvent(QualityGenerated, "Quality Order Generated"),
EventsQualityPassed = ToEvent(QualityPassed, "Quality Inspection Passed"),
EventsEnded = ToEvent(Ended, "Production Order Ended"),
EventsCancelled = ToEvent(Cancelled, "Production Order Cancelled"),
EventLog = Table.Combine({EventsCreated, EventsEstimated, EventsScheduled, EventsPicked, EventsReleased, EventsAdjusted, EventsStarted, EventsOperationCompleted, EventsReportedFinished, EventsQualityGenerated, EventsQualityPassed, EventsEnded, EventsCancelled}),
Typed = Table.TransformColumnTypes(EventLog, {{"ProductionOrderNumber", type text}, {"ActivityName", type text}, {"EventTime", type datetime}, {"SourceSystem", type text}, {"LastDataUpdate", type datetime}, {"ProductionOrderStatus", type text}, {"PlannedStartDate", type datetime}, {"PlannedEndDate", type datetime}, {"UserId", type text}, {"ProductionPlant", type text}, {"ProductNumber", type text}, {"ProductionType", type text}, {"ActualQuantity", type number}, {"ProductionPriority", type text}}),
Sorted = Table.Sort(Typed, {{"ProductionOrderNumber", Order.Ascending}, {"EventTime", Order.Ascending}, {"ActivityName", Order.Ascending}})
in
Sorted 释放高效产能:立即简化生产计划
精准定位瓶颈,将生产周期时间缩短30%或更多。
无需信用卡,几分钟即可完成设置。