数据仓库多值属性

时间:2014-05-15 21:16:39

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

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

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

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

  • 过程完成后谁在工作?
  • 这个过程的周期时间是多少?
  • 该流程正在生产零件的序列号是什么?

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

  • 零件类型(属性:代理键,零件编号,型号,变体,零件名称)
  • 植物(属性:代理键,植物名称,植物缩写)
  • Shift(属性:代理键,植物键,开始时间24,开始分钟,结束时间24,结束分钟)
  • 流程(属性:代理键,工厂密钥,生产线,流程组,流程 名称,机器类型)
  • 日期(典型日期维度属性)
  • 时间(典型时间尺寸属性)

非维度事实是:

  • 零件序列号(零件类型的实例)
  • 周期时间
  • 员工ID * MULTI-VALUED *

问题

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

  1. 在事实表的员工列中允许多个员工ID(例如逗号分隔)。缺点:处理该流程的员工数量是可变数量。我是否需要创建足够大的领域以容纳多达X名员工? X应该是什么?
  2. 为每位员工创建每个生产事实的记录。对于同一事实,这将意味着不止一个记录;那会很糟糕。 :)
  3. 创建员工维度和"流程员工"员工维度表和事实表之间的桥接表。问题:当时正在处理该流程的员工未在事实表中表示。
  4. 创建Employee维度,Process Employees Group表以及Process Employees Group表和Employee维度表之间的桥接表。员工组和桥接表需要a)预先填充所有可能的员工组合 - 这在任何级别都不实用,因为我们有数千名员工 - 或者b)在ETL期间动态填充。 4b需要检查一个特定的团队员工是否已经存在于每个流程中;如果源记录的批处理频率高于每天几次(例如,每小时10 X&s近乎实时报告),这可能会对DBMS / ETL系统造成负担。
  5. 我的问题

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

    感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

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

该表的结构将是

PartId - PK
EmployeeId - PK
EmployeeStartDate - PK
EmployeeEndDate

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

在PartFact表上添加员工;

EmployeeId

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

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

希望这会有所帮助......

答案 1 :(得分:2)

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

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