Monitor ERP 拒收数据深度解析:18张表、5个成本子查询与完整 Tableau 查询指南

Monitor ERP 拒收数据深度解析:18张核心数据表、5个嵌套成本子查询,附完整 Tableau SQL 查询指南。制造业供应链实践案例。

大家好,我是喜乐君。在制造业数据分析领域深耕多年,今天和大家深度拆解 Monitor ERP 的拒收数据架构。

在制造业质量管理中,拒收(Rejection)是最直接影响成本和交付的关键指标之一。Monitor ERP 作为北欧领先的制造执行系统(MES),其拒收数据架构涉及 18 张核心数据表、5 个嵌套成本子查询和三维成本拆分逻辑。本文将带你深入拆解这套系统的数据结构,并提供一份可直接用于 Tableau 分析的完整 SQL 查询。

一、Monitor ERP 中的"拒收"到底是什么?

在深入技术细节之前,先厘清一个常见的概念混淆:Monitor ERP 中的"拒收" 可以是生产过程,也可以是采购到货,我们这里仅仅以生产拒收为例介绍。

📊 对比维度 | 拒收列表(ManufacturingOrderReporting)

PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"

制造订单维度的拒收列表,它直接反映生产工序的质量状况,并且具有精确的多维成本核算能力。

二、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 成本维度总览

📊 成本维度 | 来源子查询 | 计算逻辑

PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"

在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 查询中需要特别注意:

📊 时间单位 | 换算

PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"
PortableText [components.type] is missing "block"

在成本计算中,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