2

免责声明:我以前从未创建过数据仓库。我已经阅读了 Kimball 的数据仓库工具包的几章。

背景:工厂(工厂)管理团队需要能够以各种方式对生产信息进行切片和切块,并且我们希望在我们部门的制造工厂之间具有一致的报告格式。通过业务分析,我们得出的结论是,事实粒度是每个流程完成 1 行。一个完整的过程可以意味着“机器”或“组装”。我称之为“生产事实”。

企业需要回答的问题如下:

  • 流程完成时谁在工作?
  • 该过程的周期时间是多少?
  • 该流程正在生产的零件的序列号是多少?

我的架构包括以下一级维度。我没有超出第一级的任何尺寸,但工厂尺寸与零件类型、班次和工艺尺寸之间存在一些交叉关系。

  • 零件类型(属性:代理键、零件编号、型号、变体、零件名称)
  • 植物(属性:代理键、植物名称、植物缩写)
  • Shift(属性:代理键、工厂键、开始 Hour24、开始分钟、结束 Hour24、结束分钟)
  • 流程(属性:代理键、工厂键、生产线、流程组、流程名称、机器类型)
  • 日期(典型的日期维度属性)
  • 一天中的时间(一天中的典型时间维度属性)

无量纲事实是:

  • 零件序列号(零件类型的实例)
  • 周期
  • 员工 ID *多值*

问题

我的问题是,当时可能有不止一名员工在处理这个过程。所以,我想知道是否需要更改我的模型以及如何最好地代表模型中的员工。我们不是试图保存员工信息,只是他们的公司员工 ID。我考虑了以下选项:

  1. 允许在事实表的员工列中使用多个员工 ID(例如,逗号分隔)。缺点:在流程上工作的员工数量是可变的。我是否需要创建足够大的字段以容纳最多 X 名员工?X 应该是什么?
  2. 为每个员工的每个生产事实创建一个记录。这意味着同一事实的记录不止一个;那会很糟糕。:)
  3. 在员工维度表和事实表之间创建一个员工维度和一个“流程员工”桥接表。问题:当时在流程上工作的员工并没有出现在事实表中。
  4. 创建员工维度、流程员工组表以及流程员工组表和员工维度表之间的桥接表。员工组和桥表需要 a) 预先填充所有可能的员工组合——这在任何级别上都不实用,因为我们有数千名员工——或者 b) 在 ETL 期间动态填充。4b 需要检查每个流程是否已经存在给定的员工组;如果源记录的批处理频率高于每天几次(例如,近实时报告每小时 10 次),这可能会对 DBMS/ETL 系统造成负担。

我的问题

我认为选项 3 是最可行的选项,但我有一些保留意见。是否有潜在的注意事项?我应该考虑其他替代方案吗?是否可以将参与该流程的员工从事实表中剔除?

谢谢你的任何建议。

4

2 回答 2

2

有一个概念叫做渐变维度。这些被认为是尺寸;基本上在这里我将称之为 PartEmployee 的表;

该表的结构将是

PartId - PK
EmployeeId - PK
EmployeeStartDate - PK
EmployeeEndDate

如果员工仍在处理该部分,则结束日期将为空。当新员工开始处理零件时,该零件的先前员工记录将被关闭,并为新员工的零件创建新记录。

在 PartFact 表上添加一个员工;

EmployeeId

此列将保存当前员工;每次有新员工开始从事该零件工作时,都会更新此事实记录...

这将为您提供有关哪些员工从事该零件的历史观点,以及最后从事该零件工作的员工的信息。

希望这可以帮助...

于 2014-05-17T04:06:56.870 回答
2

我有时间考虑我的选择,我原来的帖子中列出的 4 个选项都不正确。所讨论的问题似乎是一个经典的“覆盖”问题;企业需要知道在给定时间哪些员工在处理哪些流程。如果我们有这些信息,我们将知道在完成给定过程时谁在工作,谁在工作。这最好表示为员工维度和生产过程维度之间的无事实事实表。

这种方法还有助于我节省空间并提高查询能力,因为单个员工“覆盖”事实将跨越多个流程生产事实。

于 2014-05-19T14:38:31.883 回答