如何在Kimball样式的数据仓库中对此关系进行维度建模?

时间:2010-10-11 12:43:37

标签: data-warehouse dimensional-modeling

所以我的数据仓库中有两个维度:

dim_machine
-------------
machine_key
machine_name
machine_type


dim_tool
------------
tool_key
tool_name
machine_type

我想确定的是两个维度中的machine_type字段具有相同的数据。我应该在两者之间创建雪花的第三个维度,还是有另一种选择?

2 个答案:

答案 0 :(得分:3)

请记住,数据仓库是非规范化结构,因此数据在维度上重复是正常的。应在操作系统和ETL过程中提供完整性。假设,我们有类似下面的模型。

alt text

分配工具的业务流程必须知道哪个工具可以安装在哪台机器上。假设某台机器上安装了错误的工具。最好导入数据以匹配该事实并运行将发现业务流程中的错误的报告,而不是打破ETL过程,因为工具和机器类型不匹配。

例如,像这样的查询(报告)发现不匹配并且证明非常有用。

select
      'tool-machine mismatch' as alarm
    , full_date
    , machine_name
    , machine_type
    , tool_name
    , matching_machine_type
    , employee_full_name
from fact_installed_tools as f
join dim_machine          as m on m.machine_key  = f.machine_key
join dim_tool             as t on t.tool_key     = f.installed_tool_key
join dim_date             as d on d.date_key     = f.date_key
join dim_employee         as e on e.employee_key = f.employee_key
where machine_type != matching_machine_type ;

答案 1 :(得分:2)

我不确定你要解决的问题到底是什么?这听起来像是您只需构建到ETL过程中的内容:对于这两个维度,将源数据映射到相同的目标机器类型列表。如果出现没有映射的新值,则引发错误(或设置默认占位符值并稍后查看数据)。

完全不同的选项是“迷你尺寸”(Kimball的术语),它包含所有可能的机器/工具组合。如果两个维度密切相关并且经常在搜索中一起使用,那么它可以是合并和简化它们的有用方法。但即便如此,我认为您将检查并清理源数据以符合机器类型。