所以,我有我的数据仓库的两个维度:
dim_machine
-------------
machine_key
machine_name
machine_type
dim_tool
------------
tool_key
tool_name
machine_type
我想确保的是在两个维度上的计算机类型字段具有相同的数据。 我应该创建一个第三个维度的两个或有另一种替代方案之间雪花?
所以,我有我的数据仓库的两个维度:
dim_machine
-------------
machine_key
machine_name
machine_type
dim_tool
------------
tool_key
tool_name
machine_type
我想确保的是在两个维度上的计算机类型字段具有相同的数据。 我应该创建一个第三个维度的两个或有另一种替代方案之间雪花?
我不知道你要解决什么问题? 这听起来像的东西,你会简单地建成的ETL过程:两个维度,源数据映射到机器型号相同的目标名单。 如果一个新的值将出现一个没有映射,产生一个错误(或设置默认值的占位符,后来查看数据)。
一个完全不同的选择将是一个“小尺寸”(Kimball的术语),包含所有可能的机器/工具组合。 如果两个维度密切相关,往往在搜索中使用起来那么它可以整合和简化他们有用的方式。 但即便如此,我想你会检查和清理源数据符合机器的类型。
请记住,数据仓库是一个反规范化的结构,所以是正常的数据以维重复。 完整性应在运作系统和ETL工艺来提供。 假设,我们有一些像下面的模型。
该分配工具的业务流程必须知道哪些工具可以哪台机器上安装。 假设一个错误的工具是一台机器上安装莫名其妙。 这是更好地导入数据,以匹配事实,并运行一个报告,会发现在业务流程中的一个bug,而不是打破了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 ;