我对SSIS
和BI一般都是新手,所以首先对不起,如果这是一个新手问题。
我在csv中有事实表的源数据,所以我想将id与查找表中的代理键进行匹配。
csv中的数据结构是这样的
... userId, OriginStationId, DestinyStationId,..
我想要完成的是将数据与我的查找表进行匹配。所以我正在做的是
这样,如果没有匹配(也就是找不到代理键),我可以将其重定向到被拒绝的csv并稍后处理。
类似的东西:
(抱歉西班牙人!)
我正在为每个维度执行此操作,因此我可以使用不同的错误代码处理每个维度。
由于OriginStationId
和DestinyStationId
是来自同一维度的两个值(它们都匹配相同的查找表),我想知道是否有办法避免从中读取两次数据table(我的意思是,不要使用两个ole db源来读取同一个表中数据的两倍)。
我尝试在排序中添加第二个输出,但我不允许这样做。从OLE DB Source
添加另一个输出也是如此。
我看到有一个“缓存选项”,是最好的方法吗? (虽然无论如何它会暗示创建另一个OLE DB source
..对吗?)
我想到的第三个选项是通过两个字段加入,但由于查找表中只有一个字段(同一个字段),当我尝试将csv中的两个列映射到同一个字段时,我收到错误我的查找表中的列
排序顺序2到2
缺少列
最好的方法是什么? 或者我在想错误的东西? 如果事情不明确,请告诉我,我会更新我的问题
答案 0 :(得分:3)
如果您希望从一个只允许一个组件的组件中获得多个输出,那么您所要做的就是使用Multicast组件跟随该组件,该组件的唯一目的是将数据流分割为多个输出。
答案 1 :(得分:0)
的Gonzalo
我刚刚使用这篇文章介绍了如何为数据仓库构建派生列: - How to Populate a Fact Table using SSIS (part 1)。
使用这个我构建了一个简单的包,它读取一个包含两列的CSV文件,这些列用于从同一个CodeTable派生单独的值。 CodeTable有两个字段Id和Description。
数据流有两个"查找"任务。第一个将Lookup1属性与Description连接,以获取其Id。第二个将属性Lookup2与Description连接,以获得不同的Id。
以下是数据流: -
注意"数据转换"需要将CSV文件中的字符串属性转换为" Unicode字符串[DT_WSTR]"所以它们可以加入表中的nvarchar(50)描述属性。
以下是数据转换: -
这是第一个查找(第二个加入"查找副本2"到描述): -
以下是带有两个派生的Ids CodeTableFirstId和CodeTableSecondId的数据查看器输出: -
希望我理解你的问题,这对你有用。
干杯约翰