设计包含多个数据源的维度

时间:2016-07-26 22:51:36

标签: etl data-warehouse scd

我正在设计一些包含多个数据源的维度,并想知道其他人为处理多个代理商务密钥所做的工作。

我的例子: 我有2个数据源 - 订购系统和执行系统。订购系统有关于付款和应该发生的事情的详细信息;执行系统详细说明实际发生的事情(花了多长时间等,谁在订单上执行)。两个系统的数据都需要创建一个事实。

在订购和执行系统中,它们都是位置表。两个系统的业务键都通过esb映射。两个系统中都有属性构成了关于单个位置的完整图像。结算信息在订购系统中,纬度和经度在执行系统中。并且两个系统都存在位置名称。

如何设计SCD以适应从系统到维度的变化?

我们遵循相当严格的Kimball方法 - fyi,但我愿意看着每个人的解决方案。

2 个答案:

答案 0 :(得分:1)

不一定是答案,但这是我的想法:

您已经涵盖了评论中的实际选项。之一:

一个。事先合并

您需要在暂存中使用一些与两个(或更多)记录匹配的合并功能,创建一个新的公共合并密钥并在维度中使用它。除了普通的DW数据之外,这还需要存储某种形式的查找或引用

OR

B中。将其合并到维度

将两个记录放在维度中,并允许报告工具“合并”它,例如,按位置名称分组。这意味着您不需要先将合并逻辑转储到维度

然而,你有两个限制,我觉得在A& A之间做出选择。 B更清楚

首先,您需要一个SCD(我假设为Type 2)。这意味着选项B可能变得非常复杂,因为当一个源记录发生变化时你必须找到另一个记录并改变它 - 对选项B来说非常不愉快。你仍然需要某种预先存储的密钥来链接它们,这意味着选项B不再简单

其次,假设您有一个属性(位置名称)的两个来源,那么当这些属性不匹配时,您需要某种分段逻辑来选择单个名称

因此,鉴于这两种情况,我建议选项A最好 - 建立一些预合并逻辑,因为您的要求的复杂性需要它。

你认为这是一个常见问题,但我从来没有找到一个很好的在线参考资料来解释某人之前是如何解决这个问题的。

答案 1 :(得分:0)

我的想法实际上很琐碎。首先,您需要能够得出关于地理位置+粒度的主数据集。

我的方法将是:

DIM加载

下面说的是我的目标

Dim_Location = {Business_key, Longitude, Latitude, Location Name}

词典

Business_key =始终映射到源系统中的主记录(在这种情况下,它是执行系统)。想象一下,现在此表的业务唯一键已合并(经度,纬度)。

位置名称 =再次,因为我们假设“执行系统”是我们数据的主表,所以它将从Source =“ Execution System”托管。

现在已加载上表以进行事实查找。

实际加载

您已经在执行系统和计费系统之间集成了记录。因为它与geo_location的必要组合存在,所以这是在阶段中的直接查找和负载。

具有挑战性的场景

如果执行系统的订单记录较晚怎么办? 如果相同的geo_location指向多个位置名称怎么办?不可能,但值得分析数据中的错误。