如何在事件表“已经部署和填充”之后添加一个列?

时间:2009-12-09 15:36:08

标签: sql-server-2005 data-warehouse business-intelligence

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

我刚刚接到客户的要求。从来没有,我听到你说!这个要求意味着我需要向数据集市添加一个新的维度表来衡量恰好是财务状况的新事实。

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

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

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

非常感谢任何帮助。

顺便说一下。尚未使用Analysis Services。

谢谢, 马丁

3 个答案:

答案 0 :(得分:7)

  1. 添加新维度表。

  2. 填充它。

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

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

    如果无法将所有事实映射到新维度,请在维度中添加“N / A”行。根据您对事实的了解,有时候有很多N / A行是有充分理由的。

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

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

答案 1 :(得分:2)

好的S.Lot回答了大部分内容,我只想补充说,如何处理旧事实是一项商业决策。确保你问他们并以书面形式得到它。

答案 2 :(得分:1)

S.Lott有一个很好的答案,如果你将它与你对“子”事实表的建议结合起来,你可以将另一个事实表作为“桥表”与新维度和所有其他相同的维度,但想一想 - 如果你遇到那个麻烦,你可以制作一个与旧的相同的新事实表设计,但是有一个不可空的新维度(桥接表上的唯一费用就是无论如何都是事实的空间)。将历史记录适当地填充到新表中 - 链接到有效维度或历史记录的N / A维度,如S.Lott建议的那样。然后开始填充新数据。你永远不必返回并将可空的nullable更改为non-nullable。然后你可以弃用旧的事实表 - 或者交换你的表示层视图(如果你有这些视图,这可以为你提供很多自由的事实和维度)。