4

我有一个带有常用事实和维度表的 SQL Server 2005 数据集市星型模式。这是通过基于 SSIS 的 ETL 包部署和填充的。到目前为止一切都很好。

客户刚刚向我提出了一个新要求。从来没有,我听到你说!这个要求意味着我需要在数据集市中添加一个新的维度表来衡量传入事实的新方面,这些方面恰好是财务方面的。

为了能够通过这个新维度“切片”事实,我需要在链接到新维度的事实表中添加一个新的外键列。

我不清楚最好的方法来做到这一点。我应该如何处理已经捕获的数据?只需使新列可以为空并接受旧事实将具有 NULL 吗?实际上,当我打字时,我突然意识到我也可以更新旧事实。或者也许我应该创建一个单独的(子?)事实表,它只包含一个指向每个新(父)事实的链接和一个指向新维度的链接。

我无法找到有关此类更改的最佳实践的任何信息。

任何帮助将非常感激。

顺便一提。尚未使用任何分析服务。

谢谢,马丁

4

3 回答 3

9
  1. 添加新的维度表。

  2. 填充它。

  3. 在现有事实上添加可为空的引用。

    并非所有事实都可以与新维度联系起来。当您有新信息时,这很常见。如果您拥有所有原始文件,则您可能拥有更新所有事实所需的所有信息。

    如果无法将所有事实映射到新维度,则向维度添加“N/A”行。有时,根据您对事实的了解,有几个 N/A 行是有充分理由的。

  4. 更新您的事实,以便它们都引用新维度——正确的维度值或特殊的 N/A 行。

理想情况下,您将修改事实表以使该列不可为空。有时这会花费很长时间,而且导出数据、重新定义表和重新加载数据会更容易。

于 2009-12-09T15:42:49.373 回答
2

好吧,S.Lot 回答了大部分问题,我只想补充一点,如何处理旧事实是一个商业决策。确保你问他们并以书面形式获得。

于 2009-12-10T13:07:28.430 回答
1

S.Lott 有一个很好的答案,如果您将它与您对“子”事实表的建议结合起来,您可以将另一个事实表作为具有新维度和所有其他相同维度的“桥表”,但请考虑一下- 如果您遇到麻烦,您可以制作一个与旧事实表相同的新事实表设计,但不可为空 new dimension (the only expense over your bridge table would be the space of the facts anyway). Populate the history appropriately into the new table - linking either to a valid dimension or the N/A dimension for history as S.Lott suggested. Then start populating new data. You never have to go back and change the nullable to non-nullable. Then you can just deprecate the old fact table - or swap your presentation layer views (if you have those, this gives you a lot mofr freedom underneath with your facts and dimensions).

于 2009-12-10T20:22:13.987 回答