【问题标题】:Data warehouse multivalued attributes数据仓库多值属性
【发布时间】:2014-07-04 12:35:44
【问题描述】:

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

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

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

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

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

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

无量纲事实是:

  • 部件序列号(部件类型的实例)
  • 循环时间
  • 员工 ID *多值*

问题

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

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

我的问题

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

感谢您的建议。

【问题讨论】:

    标签: data-warehouse dimensional-modeling star-schema


    【解决方案1】:

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

    这个表的结构是

    PartId - PK
    EmployeeId - PK
    EmployeeStartDate - PK
    EmployeeEndDate
    

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

    在 PartFact 表中添加一个员工;

    EmployeeId
    

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

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

    希望这会有所帮助...

    【讨论】:

    • 谢谢。您的回复帮助我找到了最合适的解决方案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2010-10-09
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多