Data warehouse 数据仓库多值属性

Data warehouse 数据仓库多值属性,data-warehouse,dimensional-modeling,star-schema,Data Warehouse,Dimensional Modeling,Star Schema,免责声明:我以前从未创建过数据仓库。我已经阅读了Kimball的数据仓库工具包的几个章节 背景:工厂(工厂)管理团队需要能够以各种方式对生产信息进行切分,我们希望在我们部门的所有制造工厂中采用一致的报告格式。通过业务分析,我们得出的结论是,每完成一个流程,粒度为1行。一个完整的过程可以是“机器”或“组装”,我称之为“生产事实” 业务部门需要回答的问题如下: 流程完成时,谁在工作 这个过程的周期是多少 该工艺生产的零件的序列号是多少 我的模式包括以下第一级维度。我没有第一级以外的任何尺寸,但工

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

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

业务部门需要回答的问题如下:

  • 流程完成时,谁在工作
  • 这个过程的周期是多少
  • 该工艺生产的零件的序列号是多少
我的模式包括以下第一级维度。我没有第一级以外的任何尺寸,但工厂尺寸与零件类型、班次和工艺尺寸之间存在一些交叉关系

  • 零件类型(属性:代理键、零件号、型号、变型、零件名称)
  • 植物(属性:代理键、植物名称、植物首字母缩写)
  • 班次(属性:代理关键点、工厂关键点、开始时间24、开始分钟、结束时间24、结束分钟)
  • 过程(属性:代理密钥、工厂密钥、生产线、过程组、过程 名称、机器类型)
  • 日期(典型的日期维度属性)
  • 时间(典型的时间维度属性)
无量纲事实包括:

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

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

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

    我认为方案3是最可行的方案,但我有一些保留意见。是否存在潜在的警戒?我还有其他的选择吗?将参与该流程的员工从事实表中删除可以吗


    谢谢你的建议。

    有一个概念叫做缓慢改变尺寸。 这些被认为是维度;基本上在这张桌子上,我称之为PartEmployee

    此表的结构将是

    PartId - PK
    EmployeeId - PK
    EmployeeStartDate - PK
    EmployeeEndDate
    
    如果员工仍在处理零件,则结束日期将为空。当新员工开始处理零件时,零件的上一个员工记录将被关闭,并与新员工一起为零件创建一个新记录

    在PartFact表中添加员工

    EmployeeId
    
    此列将保存当前员工;每次新员工开始处理零件时,都会更新此事实记录

    这将为您提供哪些员工在零件上工作的历史视角,以及上次在零件上工作的员工的信息


    希望这有帮助…

    有一个概念叫做缓慢改变维度。 这些被认为是维度;基本上在这张桌子上,我称之为PartEmployee

    此表的结构将是

    PartId - PK
    EmployeeId - PK
    EmployeeStartDate - PK
    EmployeeEndDate
    
    如果员工仍在处理零件,则结束日期将为空。当新员工开始处理零件时,零件的上一个员工记录将被关闭,并与新员工一起为零件创建一个新记录

    在PartFact表中添加员工

    EmployeeId
    
    此列将保存当前员工;每次新员工开始处理零件时,都会更新此事实记录

    这将为您提供哪些员工在零件上工作的历史视角,以及上次在零件上工作的员工的信息


    希望这能有所帮助……

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

    这种方法也有助于我节省空间和提高效率