大家好,我是喜乐君。在制造业数据分析领域深耕多年,今天和大家深度拆解 Monitor ERP 的拒收数据架构。
在制造业质量管理中,拒收(Rejection)是最直接影响成本和交付的关键指标之一。Monitor ERP 作为北欧领先的制造执行系统(MES),其拒收数据架构涉及 18 张核心数据表、5 个嵌套成本子查询和三维成本拆分逻辑。本文将带你深入拆解这套系统的数据结构,并提供一份可直接用于 Tableau 分析的完整 SQL 查询。
一、Monitor ERP 中的"拒收"到底是什么?
在深入技术细节之前,先厘清一个常见的概念混淆:Monitor ERP 中的"拒收" 可以是生产过程,也可以是采购到货,我们这里仅仅以生产拒收为例介绍。
📊 对比维度 | 拒收列表(ManufacturingOrderReporting)
制造订单维度的拒收列表,它直接反映生产工序的质量状况,并且具有精确的多维成本核算能力。
二、18 张数据表:拒收查询的完整数据模型
一条拒收记录看似简单——"某道工序拒收了多少件、什么原因"——但背后需要关联 18 张数据表才能还原完整的信息。我们可以将它们分为四个层级:
2.1 第一层:报工主链(4 张表)
这是数据的入口,从报工动作开始逐级下钻:
2.2 第二层:工序与物料定义(5 张表)
定义"在哪个工作中心、做哪道工序、用哪些物料":
2.3 第三层:成本核算引擎(4 张表)
这是最复杂的部分,负责将拒收数量转化为可量化的成本:
2.4 第四层:辅助信息(5 张表)
借助于E-R,我们可以把这些表的关系勾勒出来,如下所示:
2.5 SQL查询
下面是基于以上数据模型的完整 SQL 查询,专为 Tableau 分析设计。查询包含:
核心SELECT结构:查询的 SELECT 部分输出以下 10 个信息区块:
以下是简化的查询骨架(完整查询代码较长,建议从本文附带的 SQL 文件获取):
__BLOCK_p__ 注:子查询5因包含大量嵌套逻辑,此处为简化展示。完整代码请参考附带的 SQL 文件。
2.6、在 Tableau 中的应用建议
三维成本拆分是这套查询最大的亮点——它让你不仅能看到"拒了多少件",还能量化"每件拒收损失了多少钱",并且知道这笔损失具体来自材料、加工还是外协。
基于这样的查询,喜乐君使用 #Tableau 快速完成了客户分析。
接下来,我尝试分解一下这个sql逻辑。
三、5 个成本子查询:拒收成本的精妙计算
拒收列表查询的核心价值在于 成本核算。
Monitor ERP 使用 5 个 OUTER APPLY 子查询(SQL Server 的横向连接),将拒收数量拆分为三个成本维度:
3.1 成本维度总览
📊 成本维度 | 来源子查询 | 计算逻辑
在Monitor ER P 背后的数据库中,我们可以看到有多个成本字段,它们没有明确的名称,取决于系统的设置:
基于此,就可以用一个查询完成:
3.2 五个子查询的分工
子查询1 — 本工序直接材料成本(采购件)
取当前工序号(=)的采购件物料。计算公式:
子查询2 — 累计材料成本(采购件,不含本工序)
与子查询1逻辑相同,但取工序号 < 之前的所有工序。这代表了本工序拒收时,已经投入的材料成本——这些沉没成本需要计入拒收损失。
子查询3 — 累计加工成本
取本工序及之前工序(<=)的加工工时成本。这里需要特别注意 Monitor 的时间单位:
子查询4 — 累计外协加工成本
只筛选 IsSubcontractor = 1 的外协工序,计算外协成本并加上仓储加价(Type=1 或 2)。
子查询5 — 自制件材料成本(最复杂的一个)
这个子查询处理自制件(PartType = 1)的场景,通过 PartCalculation 表中的成本比例进行分摊。它还包含两个嵌套的子查询:
优先使用注册日期之前的计算,若无则用注册日期之后的。这种"时间锚定"机制确保了成本数据的时间一致性。
3.3 一个容易被忽略的细节:自动退料
材料成本的计算中有一个条件分支:只有当拒收代码设置了 AutomaticWithdrawalOfMaterial = 1 时,才会将子查询1的本工序直接材料成本计入总材料成本。
逻辑是:如果拒收代码标记了"自动退料",说明材料已经被领出并投入生产,拒收意味着这部分材料报废,需要计入损失。如果未标记自动退料,则材料可以退回仓库,不构成沉没成本。
四、Monitor ERP 的几个技术细节
4.1 时间单位:100 纳秒(Ticks)
Monitor 内部所有时间字段都使用 100 纳秒为单位,这在 SQL 查询中需要特别注意:
📊 时间单位 | 换算
在成本计算中,PlannedSetupTime / 36000000000 就是将准备时间转换为小时数。
4.2 多语言引擎:DynamicPhrase
Monitor 使用 DynamicPhrase 表作为统一的多语言文本存储。几乎所有需要显示为人类可读文本的字段(工序描述、拒收原因、单位代码等),都不直接存储文本,而是存储一个 DescriptionId,通过关联 DynamicPhrase 获取对应语言的描述。
这意味着一条拒收记录可能关联 4-5 个 DynamicPhrase 实例,分别提供工序描述、拒收原因描述、单位代码等不同维度的多语言文本。
4.3 扩展字段(ExtraField)机制
Monitor 支持用户自定义扩展字段,字段名格式为 ExtraField_{实体类型}_{字段ID}_switch,值为 SMALLINT(0 或 6),对应开关类型。零件和工作中心各有独立的扩展字段集。
五、总结
Monitor ERP 的拒收数据架构体现了制造执行系统在质量管理上的深度思考:
希望本文能帮助使用 Monitor ERP 的数据分析师和 BI 开发者更好地理解拒收数据的底层结构。
如果你也在使用 Monitor ERP 进行数据分析,欢迎交流!
本文基于 Monitor ERP 官方 API 文档(v2.22 – v24.5)整理,所有表结构和字段含义均来自官方文档。
No comments yet