在SSIS中慢慢改变维度变换不会更新

时间:2013-12-01 05:49:07

标签: ssis dimension scd

我使用CSV中的以下内容来测试SCD。我认为它会识别LocationID并在必要时更新记录。但事实并非如此。它只会插入新记录。

我正在使用Visual Studio 2010和带有Win身份验证的SQL Server 2012(我认为它不是权限问题,因为如果你看一下图片,它似乎根本没有确认对历史数据的更改执行包。)我也有Windows 7家庭高级版。

原始版本中有很多空值,此集也有更改,但未提交更改。另请注意,当我添加新位置时,即使LocationID相同,也会添加两个位置。

My Database

输入SSIS包。看看没有空!但上面的数据没有更新。

LocationID,Locations,Address,City,State,Zip,Phone,Country,Region
9,Pluto Disney,5000 Out this World,PlanetRock,PL,85338,(902) 504-1747,US,SolarSystem
1,Disney Lend,159 Mickey Mouse Road,Orlando,FL,58741,(201) 345-1234,US,North
2,Disney Werld,98532 Donald Duck Boulevard,Los Angelos,SA,75523,(601) 375-1345,US,South
3,Disney Pleyground,449 Smoke Mountain Lane,Atlanta,GA,24747,(804) 375-1126,US,East
4,Cajun Desney,Jazz Land Avenue,New Orleans,LA,88888,(904) 325-1237,US,West
5,Wild West Desney,Magic Kingdom Street,Somewhere West,CO,21543,(804) 346-1274,US,Northwest
3,Disney Super Playground,449 Smoke Mountain Lane,Atlanta,GA,24747,(864) 375-1526,US,East
4,Cajen Disney,Jazz Land Avenue,New Orleans,LA,88888,(904) 525-1237,US,West
6,Winter Disney,0 Ice Land Avenue,New Orleans,LA,85588,(900) 507-1297,US,North
2,Disney World,98532 Donald Duck Boulevard,Los Angelos,CA,75523,(671) 375-1345,US,South
7,Desert Disney,100 Melting Pot Way,Phoenix,AZ,85338,(902) 504-1747,US,Southwest
9,Plutian Disney,5000 Out this World,PlanetRock,PL,85338,(902) 504-1747,US,SolarSystem
10,Martian Disney,3000 Rover Drive,RedRock,M,85338,(902) 504-1747,US,SolarSystem

以下是我的SCD套餐中的图片

enter image description here

这是我将所有传入属性映射到数据库属性的地方。

My SCD Package Screen

所有数据都是历史数据,但没有更新 http://i.imgur.com/Z3OrCoB.png

对于下一个我尝试了不同的值,我选择哪一个或者我取消选择它们都没有区别。

http://i.imgur.com/5Xr3Pdv.png

我保持不变(从未改变过) 我启用并禁用了这个。没有结果 完成的屏幕

http://i.imgur.com/8wlC8s1.png

1 个答案:

答案 0 :(得分:3)

好的我明白了。我考虑了一下。

如果选择“如果检测到固定属性发生了变化,则转换失败”,如下所示,那么整个包将失败。如果取消选择它,程序包将运行,但如果SCD转换检测到固定属性的更改,它将允许所有更改通过,除非它检测到固定属性中的更改。这是什么意思,它不会像检查时那样出错或完全取消包装。但是,如果该行具有更改的固定属性,它仍然不会忽略或允许其他更改生效。

enter image description here

问题在于我建议使用Derived列在Derived Column转换的Expression列中使用GetDate()函数创建DateCreated列,以确定最初创建列的时间。然后作者建议将此列设置为固定(即使它实际上没有固定,因为它总是以当前日期输入SCD。)SCD将检测到DateCreated列的值与数据库,所以这些行将因为一次更改而无法更新。

所以这是本书的错。

enter image description here