您的生产计划数据模板
您的生产计划数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- Microsoft Dynamics 365制造数据提取指南
生产计划属性
| 名称 | 说明 | ||
|---|---|---|---|
| 生产订单 ProductionOrderNumber | 生产订单的唯一标识符,也是跟踪所有相关计划和执行活动的主要案例ID。 | ||
| 说明 生产订单编号(在Microsoft Dynamics 365中通常称为ProdId)是核心标识符,用于关联特定制造任务涉及的所有事件、物料、资源和成本。它支持对单个工作项的生产计划和执行全周期进行端到端分析。 在流程挖掘中,此属性对于将相关事件归入同一案例至关重要。按生产订单编号分析流程,有助于识别标准生产流程中的瓶颈、延误和偏差,覆盖从初始创建、排程到完工和成本核算的各个环节。 重要性 这是基本的案例标识符,对于归集所有相关事件并还原生产计划端到端流程以供分析至关重要。 获取途径 这是Microsoft Dynamics 365 Manufacturing中“ProdTable”表的“ProdId”字段。 示例 WO-000456WO-000457WO-000458 | |||
| 事件时间 EventTime | 表示活动发生时间的精确时间戳。 | ||
| 说明 事件时间即时间戳,记录具体活动发生的准确日期和时间。这是所有基于时间的流程挖掘分析的基础,包括计算周期时间、识别步骤间的延误,以及了解流程绩效随时间的变化。 在生产计划中,此属性用于衡量计划周期、生产启动延误和订单履行总时长等指标。准确且按时间顺序排列的时间戳,是构建正确且有意义的流程模型的必要条件。 重要性 此时间戳对于排列事件顺序、计算活动间隔时长,以及开展周期时间计算和瓶颈识别等时间分析至关重要。 获取途径 可从多个交易表中获取,例如“ProdTable”中的“createdDateTime”,以及“ProdRouteTrans”“ProdJournalRoute”和“ProdJournalBOM”中的交易日期字段。 示例 2023-04-15T09:00:12Z2023-04-15T11:30:00Z2023-04-16T14:22:05Z | |||
| 数据上次更新时间 LastDataUpdate | 表示此事件的数据上次从源系统刷新或提取时间的时间戳。 | ||
| 说明 此属性提供最近一次从源系统提取数据的日期和时间。它属于元数据,对于了解分析所用数据的新鲜度和时效性至关重要。 了解数据上次更新时间,有助于分析人员和业务用户判断流程挖掘工具提供的洞察是否可信。它也能说明仪表板反映的是实时信息还是某个较早时点的数据,这对运营决策十分重要。 重要性 此属性对于数据治理至关重要,可让用户了解数据的新鲜度,并判断流程洞察是否及时。 获取途径 此时间戳会在数据提取、转换和加载(ETL)过程中生成并写入每条记录。 示例 2023-05-20T05:00:00Z2023-05-21T05:00:00Z | |||
| 活动名称 ActivityName | 生产计划流程中发生的具体业务事件或步骤的名称。 | ||
| 说明 活动名称用于描述生产计划全周期中的单个步骤,例如“生产订单已创建”“生产所需物料已拣选”或“生产已开始”。这些活动构成流程图的基本要素。 分析活动的顺序和持续时间,可以呈现流程走向、识别常见路径、发现返工循环,并衡量各阶段耗时。此属性对于了解流程各环节的实际情况至关重要。 重要性 此属性定义流程中的各个步骤,可用于构建流程图并分析流程走向、变化和瓶颈。 获取途径 此值通常来自事件日志,也可通过映射“ProdRouteTrans”“ProdJournalBOM”等表中的不同状态变更和交易类型,以及“ProdTable”状态字段的变更来生成。 示例 生产订单已创建生产订单已下达生产已开始生产已报告完工 | |||
| 源系统 SourceSystem | 提取数据的记录系统。 | ||
| 说明 此属性用于标识事件数据的来源信息系统。对于此流程视图,该值通常为“Microsoft Dynamics 365 Manufacturing”。 在集成多个系统的环境中,此字段对于追踪数据来源、排查数据质量问题,以及了解不同系统如何共同构成整体流程至关重要。它能明确所分析数据的来源。 重要性 此属性提供重要的数据来源背景信息,对于数据治理、验证以及管理来自多个企业系统的数据管道至关重要。 获取途径 这是一个静态值,应在数据提取和转换过程中添加,用于标记数据集的来源。 示例 Microsoft Dynamics 365 ManufacturingD365 F&O | |||
| 产品编号 ProductNumber | 所生产物料的唯一标识。 | ||
| 说明 产品编号(也称物料ID)用于指定生产订单要制造的成品。它将生产流程与具体产品关联起来,并关联相应的物料清单和工艺路线说明。 按产品编号分析流程,有助于发现制造周期中因产品而异的情况。例如,某些产品的周期时间可能更长、返工更多或延误更频繁。这些信息可为产品和流程工程师提供有价值的参考。 重要性 此属性支持按所生产的产品分析流程差异,有助于发现特定产品的瓶颈或质量问题。 获取途径 这是“ProdTable”表中的“ItemId”字段。 示例 FG-1001FG-2050ASSY-500B | |||
| 实际数量 ActualQuantity | 订单中成功生产并报告为完工的产品数量。 | ||
| 说明 实际数量表示特定生产订单中已完成并通过质量检查的产品数量。该值在生产“报告为完工”时记录。 此属性可用于分析生产良率和效率。将实际数量与计划数量进行比较,有助于计算废品率并了解生产损耗。它也是产出分析和容量利用率仪表板的重要组成部分。 重要性 此属性对于计算生产良率、废品率和实际产出至关重要,可帮助您了解制造效率和绩效。 获取途径 订单报告为完工时,此值通常来自“ProdTable”表或相关日记账过账表中的“QtyGood”字段。 示例 100985000 | |||
| 生产优先级 ProductionPriority | 表示生产订单紧急程度或优先级的等级。 | ||
| 说明 生产优先级是计划员和排程人员用于管理车间工作顺序的字段。高优先级订单可能会被加急处理,从而打乱其他订单的计划排程。 分析此属性有助于了解高优先级或加急订单打乱生产计划的频率。跟踪订单生命周期中的优先级变化,可以揭示需求或计划的不稳定性。此属性是“加急生产趋势”仪表板和“加急生产率”KPI的关键数据。 重要性 此属性有助于识别加急订单的频率和影响,这可能反映计划不稳定或运营管理偏于被动。 获取途径 这可能是“ProdTable”中的标准字段或自定义字段,具体配置通常因公司而异。 示例 普通高紧急 | |||
| 生产工厂 ProductionPlant | 执行生产订单的制造场所或工厂。 | ||
| 说明 生产工厂用于标识负责制造流程的实际地点或设施,是细分和比较生产绩效的重要组织维度。 在流程挖掘中,此属性可用于对不同工厂的绩效进行对标。分析人员可以比较各厂的周期时间、资源利用率和标准流程执行情况,从而发现最佳实践或需要改进运营的设施。此属性对于容量利用率分析至关重要。 重要性 此属性支持比较和对标不同制造场所的绩效,有助于发现最佳实践和特定区域的问题。 获取途径 这是“ProdTable”表中的“InventSiteId”字段。 示例 SITE-ASITE-BMain-WH | |||
| 生产类型 ProductionType | 生产订单的分类,例如标准生产、返工或项目生产。 | ||
| 说明 生产类型根据订单用途对其进行分类。例如,“标准”订单用于常规库存生产,“返工”订单用于修复先前生产的产品缺陷,“项目”订单则关联特定客户项目。 此属性有助于创建可比较的分析视图。返工订单的流程与标准订单本质上不同。按生产类型细分流程分析,可确保比较结果有意义,并帮助您了解各类型面临的独特挑战和流程走向。 重要性 此属性支持细分分析,因为“标准”和“返工”等不同订单类型通常遵循不同流程,绩效预期也各不相同。 获取途径 这是“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 | 生产订单计划开始的日期和时间。 | ||
| 说明 计划开始日期是排程流程的一项关键输出,表示订单生产活动的目标开始时间。该日期根据物料可用情况、资源产能和需求期限确定。 此属性对于分析计划执行情况至关重要。将计划开始日期与生产实际开始时间(取自“生产开始”活动的时间戳)进行比较,组织便可衡量准时率、找出延误原因,并计算生产计划执行率等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,帮助发现变更和返工过多的流程。 获取途径 这是一个派生属性,需要按每个案例统计“生产订单已调整”活动的发生次数。 示例 012 | |||
| 按时开始 ProductionScheduleAdherence | 如果生产订单在计划开始日期当天或之前开始,则此布尔标记为真。 | ||
| 说明 此计算属性以简单的二元标记表示生产启动是否符合计划。它将实际开始时间戳(“生产开始”事件)与“PlannedStartDate”属性进行比较。 此标记非常适合用于创建清晰简洁的仪表板和KPI,例如“生产计划执行率”。您可以轻松筛选和汇总数据,查看按时开始的订单占比,并分析延误订单的特征,无需在分析工具中直接比较日期。 重要性 此属性简化了计划执行情况的报告和KPI计算,便于筛选和汇总按时与延误订单。 获取途径 这是一个计算指标,逻辑为:“生产开始”事件时间≤计划开始日期。 示例 truefalse | |||
| 物料可用情况 MaterialAvailabilityStatus | 表示生产订单所需的原材料是否可用。 | ||
| 说明 此属性用于跟踪生产所需组件的准备情况,状态可能包括“可用”“已订购”或“短缺”。计划员可据此判断生产订单能否按计划开始。 在流程挖掘中,此属性对于诊断生产启动延误的根本原因至关重要。将此状态与“生产订单已下达”到“生产开始”之间的时间关联分析,分析人员便可量化物料短缺对计划执行情况和整体周期时间的影响。此属性可直接支持“物料可用性延误影响”仪表板。 重要性 此属性有助于了解并量化物料短缺导致的生产启动延误,将供应链绩效与制造效率联系起来。 获取途径 此状态通常不是单一字段,而是通过“InventSum”表检查生产订单物料清单(BOM)中所有物料的现有库存量推算得出。 示例 全部可用部分短缺不可用 | |||
| 生产启动延误 ProductionStartDelay | 从订单下达到生产实际开始之间经过的时间。 | ||
| 说明 此计算时长用于衡量车间的等待时间或排队时间,即“生产订单已下达”活动与“生产开始”活动之间的时间差。 此KPI对于“资源分配延误分析”仪表板至关重要,可定位计划完成且订单已准备执行后发生的延误。数值偏高可能表明资源可用性、物料备料或向车间传递信息方面存在问题,为运营改进明确方向。 重要性 此属性可精确衡量“准备就绪到开始生产”之间的延误,有助于定位与资源可用性或车间准备情况相关的瓶颈。 获取途径 这是一个计算指标:Timestamp('生产开始')-Timestamp('生产订单已下达')。 示例 0天4小时15分钟1天2小时0分钟0天1小时30分钟 | |||
| 生产线 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中的生产订单状态变为“Started”时记录。通常在首道工序的作业卡或工艺路线卡日记账过账后触发。 采集 检测ProdTable的ProdStatus字段变为“Started”时的时间戳。 事件类型 inferred | |||
| 生产已报告完工 | 表示指定数量的产品已完成实际生产,成品已入库。这是重要的状态更新,会触发库存交易。 | ||
| 重要性 此事件标志着实际生产结束。它对于计算按时完成率、实际生产时长和产出量至关重要。 获取途径 当ProdTable中的生产订单状态变为“Reported as finished”时记录。过账完工报告日记账后会触发此事件。 采集 检测ProdTable的ProdStatus字段变为“Reported as finished”时的时间戳。 事件类型 inferred | |||
| 生产订单已下达 | 此活动表示生产订单已获批准并授权在车间执行。这是一个重要里程碑,会下达作业卡和工艺路线卡等单据。 | ||
| 重要性 这是从计划到执行的正式交接。“Scheduled”到“Released”之间的耗时可能反映审批延误或最终检查所需时间;“Released”到“Started”之间的耗时则可衡量车间准备情况。 获取途径 当ProdTable中的生产订单状态变为“Released”时记录。此状态由用户手动操作或自动操作触发。 采集 检测ProdTable的ProdStatus字段变为“Released”时的时间戳。 事件类型 inferred | |||
| 生产订单已创建 | 此活动表示生产订单已创建,用于正式确认特定产品数量的需求。通常在计划生产订单确认后记录,系统会生成包含唯一ID的正式记录。 | ||
| 重要性 这是生产流程的主要开始事件。分析从创建到后续步骤的耗时,有助于衡量整体计划周期和效率。 获取途径 此事件根据ProdTable中生产订单记录的创建时间戳推断。初始状态通常为“Created”。 采集 记录ProdTable中新条目的创建时间戳,且ProdStatus为“Created”。 事件类型 inferred | |||
| 生产订单已排程 | 此活动表示生产订单已排程,为其作业分配具体资源、日期和时间。此步骤可能涉及工序排程,也可能涉及更详细的作业排程。 | ||
| 重要性 排程对产能规划和资源管理至关重要。分析订单排程耗时以及排程完成到订单下达之间的间隔,有助于发现计划和产能方面的限制。 获取途径 当ProdTable中的生产订单状态变为“Scheduled”时记录。用户运行排程功能后会触发此事件。 采集 检测ProdTable的ProdStatus字段变为“Scheduled”时的时间戳。 事件类型 inferred | |||
| 生产订单已结束 | 这是最后一个活动,表示生产订单已完成财务结算。所有成本均已计算并过账,之后不能再对该订单进行交易。 | ||
| 重要性 这标志着订单在实际生产和财务方面均已真正完成。“Reported as Finished”到“Ended”之间的延误,可能反映成本核算或财务结算流程存在问题。 获取途径 当“ProdTable”中的“ProdStatus”字段设为“Ended”时,系统会记录此最终状态变更。运行成本计算并结束订单后会触发此事件。 采集 检测ProdTable的ProdStatus字段变为“Ended”时的时间戳。 事件类型 inferred | |||
| 工序已完成 | 此活动表示生产路线中的某项制造工序或步骤已完成。一个生产订单通常会包含多个此类事件。 | ||
| 重要性 分析工序之间的耗时,有助于识别生产流程内部的瓶颈,并更细致地了解车间作业情况。 获取途径 此事件会从各工序的工艺路线卡日记账(ProdJournalRoute)过账记录中明确获取,表示相应步骤已完成。 采集 记录与生产订单关联的每条ProdJournalRoute记录的过账时间戳。 事件类型 explicit | |||
| 生产所需物料已拣选 | 表示生产订单所需的原材料已从仓库拣出,可供生产使用。原材料拣选作业完成或拣货单日记账过账后会记录此事件。 | ||
| 重要性 此活动是启动生产的关键关口。排程与物料拣选之间的延误,可能反映仓库作业或物料供应方面的问题。 获取途径 通常会在仓库管理表(WHSWorkTable)或与生产订单关联的库存日记账(InventJournalTrans)中明确记录此事件。 采集 记录与生产订单关联的拣货单日记账过账时间戳。 事件类型 explicit | |||
| 生产订单已估算 | 表示计算生产订单预计的物料消耗和成本。这是关键的计划步骤,可确保在继续处理前明确财务和物料需求。 | ||
| 重要性 估算延误可能成为计划阶段的重要瓶颈。跟踪此活动有助于发现成本和物料计划流程中的低效问题。 获取途径 当ProdTable中的生产订单状态变为“Estimated”时记录。用户对订单运行“Estimate”功能后会触发此事件。 采集 检测ProdTable的ProdStatus字段变为“Estimated”时的时间戳。 事件类型 inferred | |||
| 生产订单已取消 | 表示生产订单在完成前被取消。这是流程未成功完成的一种替代结束状态。 | ||
| 重要性 跟踪取消情况有助于找出流程失败的原因,例如需求变化或计划错误。取消率过高可能表明存在系统性问题。 获取途径 这是根据状态变更推断的替代结束状态。具体状态可能有所不同,但通常涉及将订单状态重置为先前状态并标记为已取消。 采集 检测表示订单取消的状态变更。可能需要分析具体系统才能确定。 事件类型 inferred | |||
| 生产订单已调整 | 表示生产订单下达后发生了重大变更,例如修改数量或日期。此事件通过比较变更前后的关键字段推断。 | ||
| 重要性 频繁调整可能表明计划不稳定或需求波动较大,进而造成低效和返工。跟踪此事件有助于量化变更频率及其影响。 获取途径 在订单状态为“Released”后,通过分析变更日志或比较ProdTable记录快照,推断“QtySched”或“SchedEnd”等字段的变更。 采集 识别“Released”事件时间戳之后ProdTable关键字段(如数量、日期)的变更。 事件类型 calculated | |||
| 质量检验已通过 | 表示与生产批次关联的质量订单已成功完成并通过验证,确认生产的物料符合所需质量标准。 | ||
| 重要性 这是质量流程中的重要里程碑。质量订单生成到检验通过之间的耗时,可反映质量保证团队的工作效率。 获取途径 根据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 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角色,或拥有访问所需数据实体权限的其他角色。
查询示例 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 for 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权限才能执行查询。
- 性能:如果数据集涵盖多家公司或数年数据且规模很大,建议在非高峰时段运行查询。您也可以按较短时间段分批提取,之后再合并结果。
查询示例 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制造数据实体。确认环境URL、法人实体或公司范围,以及获批的身份验证方式。
- 在Power BI Desktop中选择“获取数据”,然后选择获批的Dynamics 365连接器,或组织专用的OData或Dataverse连接。使用管理员配置的[您的Dynamics 365环境连接]和[您的凭据]。请勿假设所有部署环境都提供特定实体、终结点或菜单路径。
- 选择生产订单抬头实体、生产订单作业或路线实体、物料拣选或拣选清单实体、生产过账实体、质量订单实体,以及识别状态变更所需的获批审计、历史记录或变更跟踪实体。将查询中的每个数据源引用替换为您所在环境中对应的实体或查询。
- 配置提取范围。应用[开始日期参数]、[结束日期参数]和[您的公司或法人实体筛选条件]。将查询限制在所需工厂、产品、订单类型和状态范围内。保留用于区分创建、估算、排程、拣选、下达、调整、开始、作业完成、完工报告、质量检查、结束和取消的源时间戳。
- 在Power Query中统一源列名称和数据类型。将事件时间戳转换为一致的日期时间类型,并规范标识符、状态值、公司值、工厂值、产品编号、用户、数量和优先级。如果源字段不可用,请返回空值,不要编造数据。使用生产订单号作为案例标识符。
- 为每项活动创建一个事件表。每个表都必须返回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连接器和身份验证方式。将[您的Dynamics 365环境连接]和[您的凭据]替换为组织批准的值。
- 源实体:选择环境中可用的生产订单抬头、作业或路线、物料拣选或拣选清单、生产过账、质量订单,以及获批的审计或变更跟踪实体。实体名称和可用性因部署环境而异,必须在元数据浏览器中确认。
- 日期范围:先选择3至6个月的范围。尽可能在数据源端使用EventTime筛选;验证长周期生产订单或历史状态转换时,可扩大范围。
- 公司和工厂筛选:应用[您的公司或法人实体筛选条件],并在适用时添加所需的生产工厂筛选条件。如果环境中有多个法人实体且订单号可能重复,请勿使用通用公司筛选条件。
- 生产订单筛选:按所需生产订单类型、产品、工厂、状态和订单号范围筛选。若流程分析需要包含已取消或已结束的订单,请勿将其筛除。
- 事件纳入:保留重复的作业完成、物料拣选、质量和调整事件。不要将事件日志压缩为每个生产订单仅一行。
- 时区:将所有源时间戳转换为同一已记录的时区。如果源数据提供原始时间戳或时区偏移,请予以保留。
- 刷新元数据:为每一行填入LastDataUpdate,记录刷新或提取时间。如果整个数据集在一次刷新中提取,可使用同一刷新时间戳。
- 性能:尽量在数据源端应用日期、公司、工厂和订单筛选条件。仅选择必需列,避免不必要的合并,将可复用的源查询暂存;大型数据集可考虑增量刷新。
- 前提条件:需要Power BI Desktop或获批的Power Query宿主、访问Dynamics 365环境的网络权限、所选实体的有效读取权限,以及所需的Dynamics 365制造、仓库、质量、审计或变更跟踪访问权限。
- 依赖配置的数据:如果未启用必需的事件数据源,请使用[根据您的系统进行配置]并记录缺失的数据源。不要用当前状态快照替代历史事件。
查询示例 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%或以上。
无需信用卡,几分钟即可完成设置。