Adding new dimensions to data warehouse (adding new columns to fact table)

I am building an OLAP database and am running into some difficulty. I have already setup a fact table that includes columns for sales data, like quantity, sales, cost, profit, etc. The current dimensions I have are Date, Location, and Product. This means I have the foreign key columns for these dimension tables included in the fact table as well. I have loaded the fact table with this data.

I am now trying to add a dimension for salesperson. I have created the dimension, which has the salesperson's ID and their name and location. However, I can't edit the fact table to add the new column that will act as a foreign key to the salesperson dimension.

I want to use SSIS to do this, by using a look up on the sales database which the fact table is based on, and the salesperson ID, but I first need to add the Salesperson column to my fact table. When I try to do it, I get an error saying that it can't create a new column because it will be populated with NULLs.


I'm going to take a guess as to the problem you're having, but this is just a guess: your question is a little difficult to understand.

I'm going to make the assumption that you have created a Fact table with x columns, including links to the Date, Location, and Product dimensions. You have then loaded that fact table with data.

You are now trying to add a new column, SalesPerson_SK (or ID), to that table. You do not wish to allow NULL values in the database, so you clear the 'allow NULL' checkbox. However, when you attempt to save your work, the table errors out with the objection that it cannot insert NULL into the SalesPerson_SK column.

There are a few ways around this limitation. One, which is probably the best if you are still in the development stage, is to issue the following command:

TRUNCATE TABLE dbo.FactMyFact

which will remove all data from the table, allowing you to make your changes and reload the table with the new column included.

If, for some reason, you cannot do so, you can alter the table to add the column but include a default constraint that will put a default value into your fact table, essentially a dummy record that says, "I don't know what this is"

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

If you do not wish to put a default value into the table, simply create the column and allow NULL values, either by checking the box on the design page or by issuing the following command:

ALTER TABLE FactMyFact
ADD Salesperson_SK INT NULL 

This answer has been given based on what I think your problem is: let me know if it helps.


Dimension inner join with fact table, get the values from dimensions and insert into fact...

or else create the fact less fact way

链接地址: http://www.djcxy.com/p/24724.html

上一篇: 如何在新创建的数据库列上将Access列值设置为0(默认值)? C#

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