首页 文章

数据仓库多值属性

提问于
浏览
2

Disclaimer: 我之前从未创建过数据仓库 . 我已经阅读了Kimball数据仓库工具包的几个章节 .

Background: 工厂(工厂)管理团队需要能够以各种方式切割和切割 生产环境 信息,我们希望我们部门的制造工厂能够采用一致的报告格式 . 通过业务分析,我们得出结论,每个过程完成的事实是一行 . 完成的过程可以表示"machine"或"assemble."我称之为"Production fact" .

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

  • 过程完成后谁在工作?

  • 这个过程的周期时间是多少?

  • 该流程 生产环境 的零件序列号是多少?

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

  • 零件类型(属性:代理键,零件编号,型号,变型,零件名称)

  • 工厂(属性:代理键,工厂名称,工厂缩写)

  • Shift(属性:代理键,工厂键,开始时间24,开始分钟,结束时间24,结束分钟)

  • 过程(属性:代理键,工厂密钥, 生产环境 线,过程组,过程名称,机器类型)

  • 日期(典型日期维度属性)

  • 时间(典型时间维度属性)

无量纲的事实是:

  • 零件序列号(零件类型的实例)

  • 周期时间

  • 员工ID 多值

Problem

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

  • 允许事实表的员工列中的多个员工ID(例如逗号分隔) . 缺点:处理该流程的员工数量是可变数量 . 我是否需要创建足够大的字段以容纳多达X个员工? X应该是什么?

  • 为每位员工创建每个 生产环境 事实的记录 . 对于同一事实,这将意味着不止一个记录;那会很糟糕 . :)

  • 在员工维度表和事实表之间创建员工维度和"Process Employees"桥接表 . 问题:当时正在处理该流程的员工未在事实表中表示 .

  • 创建Employee维度,Process Employees Group表以及Process Employees Group表和Employee维度表之间的桥接表 . 员工组和桥接表需要a)预先填充所有可能的员工组合 - 这在任何级别都不实用,因为我们有数千名员工 - 或者b)在ETL期间动态填充 . 4b需要检查一个特定的团队员工是否已经存在于每个流程中;如果源记录的批处理频率超过每天几次(例如,每小时10 X的近实时报告),这可能会对DBMS / ETL系统造成负担 .

My Question(s)

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

谢谢你的任何建议 .

2 回答

  • 2

    有一个被称为缓慢变化的维度的概念 . 这些被认为是尺寸;基本上这里我称之为PartEmployee的表;

    该表的结构将是

    PartId - PK
    EmployeeId - PK
    EmployeeStartDate - PK
    EmployeeEndDate
    

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

    在PartFact表上添加员工;

    EmployeeId
    

    此栏目将保留当前员工;每当新员工开始工作时,此事实记录将更新......

    这将为您提供员工工作的历史视角以及最后工作的员工的信息 .

    希望这可以帮助...

  • 2

    我有时间考虑我的选择,而且我原来的4个选项都没有帖子是对的 . 讨论的问题似乎是一个典型的“覆盖”问题;企业需要知道哪些员工在给定时间处理哪些流程 . 如果我们掌握了这些信息,我们就会知道在给定流程完成时谁在某个特定部分工作 . 这最好表示为员工维度和 生产环境 流程维度之间的无事实事实表 .

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

相关问题