免责声明:我以前从未创建过数据仓库。我已经阅读了 Kimball 的数据仓库工具包的几章。
背景:工厂(工厂)管理团队需要能够以各种方式对生产信息进行切片和切块,并且我们希望在我们部门的制造工厂之间具有一致的报告格式。通过业务分析,我们得出的结论是,事实粒度是每个流程完成 1 行。一个完整的过程可以意味着“机器”或“组装”。我称之为“生产事实”。
企业需要回答的问题如下:
- 流程完成时谁在工作?
- 该过程的周期时间是多少?
- 该流程正在生产的零件的序列号是多少?
我的架构包括以下一级维度。我没有超出第一级的任何尺寸,但工厂尺寸与零件类型、班次和工艺尺寸之间存在一些交叉关系。
- 零件类型(属性:代理键、零件编号、型号、变体、零件名称)
- 植物(属性:代理键、植物名称、植物缩写)
- Shift(属性:代理键、工厂键、开始 Hour24、开始分钟、结束 Hour24、结束分钟)
- 流程(属性:代理键、工厂键、生产线、流程组、流程名称、机器类型)
- 日期(典型的日期维度属性)
- 一天中的时间(一天中的典型时间维度属性)
无量纲事实是:
- 零件序列号(零件类型的实例)
- 周期
- 员工 ID *多值*
问题
我的问题是,当时可能有不止一名员工在处理这个过程。所以,我想知道是否需要更改我的模型以及如何最好地代表模型中的员工。我们不是试图保存员工信息,只是他们的公司员工 ID。我考虑了以下选项:
- 允许在事实表的员工列中使用多个员工 ID(例如,逗号分隔)。缺点:在流程上工作的员工数量是可变的。我是否需要创建足够大的字段以容纳最多 X 名员工?X 应该是什么?
- 为每个员工的每个生产事实创建一个记录。这意味着同一事实的记录不止一个;那会很糟糕。:)
- 在员工维度表和事实表之间创建一个员工维度和一个“流程员工”桥接表。问题:当时在流程上工作的员工并没有出现在事实表中。
- 创建员工维度、流程员工组表以及流程员工组表和员工维度表之间的桥接表。员工组和桥表需要 a) 预先填充所有可能的员工组合——这在任何级别上都不实用,因为我们有数千名员工——或者 b) 在 ETL 期间动态填充。4b 需要检查每个流程是否已经存在给定的员工组;如果源记录的批处理频率高于每天几次(例如,近实时报告每小时 10 次),这可能会对 DBMS/ETL 系统造成负担。
我的问题
我认为选项 3 是最可行的选项,但我有一些保留意见。是否有潜在的注意事项?我应该考虑其他替代方案吗?是否可以将参与该流程的员工从事实表中剔除?
谢谢你的任何建议。