设计具有多个数据源的维度
Design a dimension with multiple data sources
我正在设计一些具有多个数据源的维度,想知道其他人做了什么来对齐每个数据源的多个业务键。
我的例子:
我有 2 个数据源——订购系统和执行系统。订购系统有关于付款的细节和应该发生的事情;执行系统详细说明了实际发生的事情(花了多长时间等,谁执行了订单)。需要来自两个系统的数据来创建一个事实。
在订购和执行系统中,它们都是一个位置 table。来自两个系统的业务键通过 esb 映射。两个系统中的属性构成了有关单个位置的完整图片。计费信息在订购系统中,纬度和经度在执行系统中。 Location Name 存在于两个系统中。
您如何设计 SCD 以适应从两个系统到维度的变化?
我们遵循相当严格的 Kimball 方法 - 仅供参考,但我愿意查看每个人的解决方案。
不一定是答案,但这是我的想法:
您已经在评论中涵盖了实物期权。或者:
一个。事先合并
您需要在分段中使用一些合并功能来匹配两个(或更多)记录,创建一个新的公共合并键并在维度中使用它。除了正常的 DW 数据之外,这还需要存储某种形式的查找或引用
或
乙。合并到维度
将这两条记录都放在维度中,并允许报告工具 'merge' 它通过,例如,按位置名称分组。这意味着您不需要事先合并逻辑,只需将其转储到维度
但是,我认为您有两个限制条件,可以使 A 和 B 之间的选择更加清晰
首先,您需要一个 SCD(我假设是 Type 2)。这意味着选项 B 可能会变得非常复杂,因为当一个源记录发生变化时,您必须找到另一条记录并进行更改 - 对于选项 B 来说非常不愉快。您仍然需要某种预存储的密钥来link他们,也就是说B选项不再简单
其次,鉴于一个属性(位置名称)有两个来源,当这些不匹配时,您需要某种暂存逻辑来选择一个名称
所以鉴于这两种情况,我建议选项 A 是最好的 - 构建一些预合并逻辑,因为您的要求的复杂性需要它。
您可能认为这是一个常见问题,但我从来没有找到一个很好的在线参考来解释以前有人如何解决这个问题。
我的想法其实很幼稚。首先,您需要能够得出关于 Geo+Location 和粒度的主数据集是什么。
我的方法是:
DIM 加载
下面说的是我的目标
Dim_Location = {Business_key, Longitude, Latitude, Location Name}
词典
Business_key = 始终从源系统(在本例中为执行系统)映射到主记录。想象一下,现在针对此 table.
组合了来自业务的唯一键(经度、纬度)
Location Name = 同样,由于我们假设 "Execution system" 是我们数据的主节点,那么它将从 Source="Execution System".[=11 托管=]
上面的 table 现在已加载用于事实查找。
事实加载
您已经在执行系统和计费系统之间集成了记录。这是一个直接的查找和加载阶段,因为它存在 geo_location.
的必要组合
具有挑战性的场景
如果执行系统有订单迟到记录怎么办?
如果相同的 geo_location 指向多个位置名称怎么办?不可能,但值得对数据进行错误分析。
我正在设计一些具有多个数据源的维度,想知道其他人做了什么来对齐每个数据源的多个业务键。
我的例子: 我有 2 个数据源——订购系统和执行系统。订购系统有关于付款的细节和应该发生的事情;执行系统详细说明了实际发生的事情(花了多长时间等,谁执行了订单)。需要来自两个系统的数据来创建一个事实。
在订购和执行系统中,它们都是一个位置 table。来自两个系统的业务键通过 esb 映射。两个系统中的属性构成了有关单个位置的完整图片。计费信息在订购系统中,纬度和经度在执行系统中。 Location Name 存在于两个系统中。
您如何设计 SCD 以适应从两个系统到维度的变化?
我们遵循相当严格的 Kimball 方法 - 仅供参考,但我愿意查看每个人的解决方案。
不一定是答案,但这是我的想法:
您已经在评论中涵盖了实物期权。或者:
一个。事先合并
您需要在分段中使用一些合并功能来匹配两个(或更多)记录,创建一个新的公共合并键并在维度中使用它。除了正常的 DW 数据之外,这还需要存储某种形式的查找或引用
或
乙。合并到维度
将这两条记录都放在维度中,并允许报告工具 'merge' 它通过,例如,按位置名称分组。这意味着您不需要事先合并逻辑,只需将其转储到维度
但是,我认为您有两个限制条件,可以使 A 和 B 之间的选择更加清晰
首先,您需要一个 SCD(我假设是 Type 2)。这意味着选项 B 可能会变得非常复杂,因为当一个源记录发生变化时,您必须找到另一条记录并进行更改 - 对于选项 B 来说非常不愉快。您仍然需要某种预存储的密钥来link他们,也就是说B选项不再简单
其次,鉴于一个属性(位置名称)有两个来源,当这些不匹配时,您需要某种暂存逻辑来选择一个名称
所以鉴于这两种情况,我建议选项 A 是最好的 - 构建一些预合并逻辑,因为您的要求的复杂性需要它。
您可能认为这是一个常见问题,但我从来没有找到一个很好的在线参考来解释以前有人如何解决这个问题。
我的想法其实很幼稚。首先,您需要能够得出关于 Geo+Location 和粒度的主数据集是什么。
我的方法是:
DIM 加载
下面说的是我的目标
Dim_Location = {Business_key, Longitude, Latitude, Location Name}
词典
Business_key = 始终从源系统(在本例中为执行系统)映射到主记录。想象一下,现在针对此 table.
组合了来自业务的唯一键(经度、纬度)Location Name = 同样,由于我们假设 "Execution system" 是我们数据的主节点,那么它将从 Source="Execution System".[=11 托管=]
上面的 table 现在已加载用于事实查找。
事实加载
您已经在执行系统和计费系统之间集成了记录。这是一个直接的查找和加载阶段,因为它存在 geo_location.
的必要组合具有挑战性的场景
如果执行系统有订单迟到记录怎么办? 如果相同的 geo_location 指向多个位置名称怎么办?不可能,但值得对数据进行错误分析。