1

在 2 个或 3 个或更多维度合并以形成新维度的数据集市中。如何管理 scd 以跟踪历史上的所有合并并呈现与这些维度相关的趋势事实?

一个具体的例子是三个商店(业务 ID 8897、8965、9135)合并以创建一个新的商店业务 ID 9700。如何从事实表中获取历史销售数据以显示直到给定日期 8897、8965 和 9135是单独的商店,现在都是新的商店 9700。

此外,如果新店的营业编号不是 9700,但新店采用以前的商店营业 ID 之一怎么办。因此,新的合并商店业务 ID 不是 9700,而是 8897。

SurrogateKey -------- StoreBusinessID---------- StoreName
=============== ============== ===== ===================

          1                8897   Alpha Electronic  
          2                8965   Beta Electronics  
          3                9135   Gamma Electronic  
          4                9700   Mega Electornics  

=================================================== ==

4

2 回答 2

1

您需要使用“Type 6”渐变维度。本质上,它是类型 2 和类型 1 变化的组合。

它的工作方式:要捕获“类型 2”更改,您需要为“存储”表中的每条记录设置“开始日期”和“结束日期”。对于当前记录,结束日期通常是某个遥远的未来日期,例如 2999-12-31。当您将此类表连接到事实表时,您需要在自然键 (StoreBusinessID) 和开始日期和结束日期之间的事实日期上连接维度和事实。

要捕获“类型 1”更改,您必须在“商店”表中添加一个字段以跟踪“最新业务 ID”。此字段将包含最新版本的业务密钥。如果没有更改,Store Business ID 和 Latest Business ID 将包含相同的密钥。如果商店合并,则记录 8897、8965、9135 和 9700 都将包含“最新业务 ID”9700。

因此,您既可以“及时旅行”(再现任何时期的准确历史),也可以按商店的最新版本进行分组。

于 2018-03-17T02:58:44.860 回答
0

事实表已经包含与具有 SK 1、2 和 3(ID 8897、8965 和 9135)的商店相关的数据,因此您可以保留事实表,并且您将始终拥有这些商店过去表现的数据,直到它们被终止的日期。

当该新商店 (ID 9700) 出现时,您可以将其添加为商店维度中的新行 (SK 4),将其设置为活动行并将“停止”的商店行设置为非活动(您可以使用布尔列例如“isActive”或“version”)。从这个时间点开始,加载到事实表中的所有数据都将指向具有 SK 4 (ID 9700) 的存储。

在此之前,它只有 SK 1、2 和 3(ID 8897、8965 和 9135)的数据。出于这个原因,当您将其与事实表(使用 SK)连接时,您将始终能够通过使用 Store 维度中的 isActive 字段来查看过去商店和/或当前商店的数据。

这被称为渐变维度类型 2

此方法通过为维度表中的给定自然键创建多个记录来跟踪历史数据,这些记录具有单独的代理键和/或不同的版本号。每次插入都会保留无限的历史记录。

编辑:关于您问题的第二部分,“所需的灵活性是我可以通过合并 SK 1、2 和 3 在历史上存在 9700 之前将其拉到 9700

一个简单的选择是将层次结构(父商店 -> 商店)引入到商店维度中,并且对于每个其他商店,将“父商店 ID”字段设置为 9700。这样您就可以专门为每个商店探索销售数据过去的商店,通过使用他们的 ID,或者只是探索父商店的数据(父 ID = 9700),这将提供父 9700 下所有商店的所有数据的聚合视图。

这样做的另一个好处是可以使 Store 维度中的数据准确地描述发生的情况:商店被合并到一个实体中,并且没有任何历史数据丢失(如果我们覆盖它们的 ID 可能会发生这种情况)。

于 2018-03-14T11:53:49.687 回答