我有一个与它关联的五个维度表的事实表。通常,事实表包含每个维度的代理键,并且没有业务/代理键。我正在尝试使用暂存事实表的数据加载事实表,即插入新记录。但是,我注意到事实表还可以处理其他操作,例如对数据的更新或删除。为此目的,在 SSIS 包中使用了条件拆分来检查所有代理键是否为 0,然后进行新插入。我的问题是,我可以在更新或删除方面使用代理键吗?
我在事实表上进行了插入,只是为了了解数据的外观。
我有一个与它关联的五个维度表的事实表。通常,事实表包含每个维度的代理键,并且没有业务/代理键。我正在尝试使用暂存事实表的数据加载事实表,即插入新记录。但是,我注意到事实表还可以处理其他操作,例如对数据的更新或删除。为此目的,在 SSIS 包中使用了条件拆分来检查所有代理键是否为 0,然后进行新插入。我的问题是,我可以在更新或删除方面使用代理键吗?
我在事实表上进行了插入,只是为了了解数据的外观。
答案是肯定的,你可以。但是,是否会出现一名员工在同一天从同一供应商向同一客户销售相同产品的情况?也许同一天有不同的订单?(这是基于您在问题中提供的数据)
如果所有代理键一起可以唯一标识一条记录,请将事实记录更新为您的心声。但是,如果不是这种情况,您最终可能会在不打算更新时更新记录。
我倾向于在我设计的事实表中包含一个订单号以帮助避免这种情况,但您的实际事实表中可能没有这个。包括订单号是指事实表中退化维度的模式。我发现它非常方便。
无论如何,答案都是一样的。您可以根据代理键更新事实记录,只要它们一起可以唯一标识您要更新的行。
不要大惊小怪,请确保您的数据仓库的设计使得您可以在需要时执行此操作。与删除和替换相比,能够就地更新事实可能会很好,因为 ETL 过程中的步骤可能会更少。