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