Sql server 2005 如何将列添加到事实表';在'之后;它已经部署和填充了吗?

Sql server 2005 如何将列添加到事实表';在'之后;它已经部署和填充了吗?,sql-server-2005,data-warehouse,business-intelligence,Sql Server 2005,Data Warehouse,Business Intelligence,我有一个SQLServer2005数据集市星型模式,带有通常的事实和维度表。这是通过基于SSIS的ETL包部署和填充的。到目前为止一切都很好 客户刚向我提出一项新要求。从来没有,我听你说!这一要求意味着我需要向数据集市添加一个新的维度表,以度量恰好是财务方面的传入事实的一个新方面 为了能够通过这个新维度“切片”事实,我需要在事实表中添加一个链接到新维度的新外键列 我不清楚最好的方法是什么。我应该如何处理已捕获的数据?只需将新列设为null,并接受旧事实将具有null?事实上,当我打字时,我意识到

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

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

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

我不清楚最好的方法是什么。我应该如何处理已捕获的数据?只需将新列设为null,并接受旧事实将具有null?事实上,当我打字时,我意识到我也可以更新旧的事实。或者我应该创建一个单独的(子?)事实表,其中只包含指向每个新(父)事实的链接和指向新维度的链接

我还没有找到任何关于这种改变的最佳实践的信息

任何帮助都将不胜感激

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

谢谢, 马丁

  • 添加新的维度表

  • 填充它

  • 在现有事实上添加可为空的引用

    并非所有的事实都能与新的维度相结合。当您有新信息时,这是很常见的。如果您拥有所有原始文件,您可能拥有更新所有事实所需的所有信息

    如果无法将所有事实映射到新维度,请向维度添加“不适用”行。有时,根据您对事实的了解程度,有一个很好的理由可以有几个N/a行

  • 更新事实,使它们都引用新维度——正确的维度值或特殊的N/A行


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

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

    S.Lott有一个很好的答案,如果你把它与你的“儿童”事实表的建议结合起来,你可以有另一个事实表作为“桥牌表”,具有新的维度和所有其他相同的维度,但是想想看——如果你遇到麻烦,您可以只使用与旧事实表相同的新事实表设计,但使用不可为空的新维度(桥接表的唯一开销就是事实的空间)。将历史记录适当地填充到新表中-按照S.Lott的建议链接到有效维度或历史记录的N/a维度。然后开始填充新数据。您永远不必返回并将可为null的值更改为不可为null的值。然后,您可以弃用旧的事实表,或者交换您的表示层视图(如果您有这些视图,这将为您提供更多关于事实和维度的自由)。

    这非常全面。非常感谢。这可能是我一直在努力的方向,但对这些事情进行理智的检查总是很好的。我发现BI有一个陡峭的学习曲线。我一直在其他维度中使用N/A列,并且喜欢这种方法,而不是使用空值。我喜欢导出数据并重新加载的建议。干杯@OctPlasm:Nulls是一件坏事,因为它们会破坏任何合理的汇总行为。行从结果集中“有点消失”。您几乎总是希望看到“其他”或“不适用”,即使报告将其从显示中过滤出来并发送给用户。