向数据仓库添加新维度(向事实表添加新列)

时间:2014-08-27 17:36:07

标签: sql-server ssis olap

我正在构建一个OLAP数据库,但遇到了一些困难。我已经设置了一个事实表,其中包括销售数据的列,如数量,销售额,成本,利润等。我目前的维度是日期,位置和产品。这意味着我还拥有事实表中包含的这些维度表的外键列。我已经用这些数据加载了事实表。

我现在正在尝试为销售人员添加维度。我创建了维度,其中包含销售人员的ID及其名称和位置。但是,我无法编辑事实表以添加将充当销售人员维度的外键的新列。

我想使用SSIS来执行此操作,方法是查看事实表所基于的销售数据库以及销售员ID,但我首先需要将Salesperson列添加到我的事实表中。当我尝试这样做时,我得到一个错误,说它无法创建新列,因为它将填充NULL。

2 个答案:

答案 0 :(得分:2)

我会猜测你遇到的问题,但这只是一个猜测:你的问题有点难以理解。

我将假设您创建了一个包含x列的Fact表,包括指向Date,Location和Product维度的链接。然后,您已使用数据加载该事实表。

您现在正在尝试向该表添加新列SalesPerson_SK(或ID)。您不希望在数据库中允许NULL值,因此清除'allow NULL'复选框。但是,当您尝试保存您的工作时,该表会出错,因为它无法将NULL插入SalesPerson_SK列。

这种限制有几种方法。如果您还处于开发阶段,那么可能是最好的一个是发出以下命令:

TRUNCATE TABLE dbo.FactMyFact

将删除表中的所有数据,允许您进行更改并重新加载包含新列的表。

如果由于某种原因,你不能这样做,你可以alter the table to add the column but include a default constraint放一个default value into your fact table,基本上是一个虚拟记录,上面写着“我不知道这是什么”

ALTER TABLE FactMyFact
ADD Salesperson_SK INT NOT NULL 
CONSTRAINT DF_FactMyFact_SalesPersonSK DEFAULT 0

如果您不希望将默认值放入表中,只需通过选中设计页面上的框或发出以下命令来创建列并允许NULL值:

ALTER TABLE FactMyFact
ADD Salesperson_SK INT NULL 

这个答案是根据我认为你的问题给出的:让我知道它是否有帮助。

答案 1 :(得分:-2)

使用事实表对内部联接进行维度,从维度中获取值并插入事实...

或者创造事实更少的事实方式