SSIS - 在将事实与查找 table 匹配两次时重用 Ole DB 源

SSIS - Reuse Ole DB source when matching Fact against lookup table twice

总的来说,我对 SSIS 和 BI 还很陌生,如果这是一个新手问题,首先很抱歉。

我在 csv 中有关于事实 table 的源数据,所以我想将 ID 与查找 tables 中的代理键进行匹配。

csv中的数据结构是这样的

... userId, OriginStationId, DestinyStationId,..

我想要完成的是将数据与我的查找相匹配 table。所以我正在做的是

  1. 正在使用 OLE DB 源读取查找数据
  2. 正在读取我的 csv 文件
  3. 按同一字段对两个输入进行排序
  4. 通过 Id 进行左连接,以获得 SK

这样,如果没有匹配项(也就是找不到代理键),我可以将其重定向到被拒绝的 csv 并稍后处理。

像这样:

(对不起西班牙语!)

我对每个维度都这样做,所以我可以用不同的错误代码处理每个维度。

由于 OriginStationIdDestinyStationId 是来自同一维度的两个值(它们都匹配相同的查找 table),我想知道是否有办法避免阅读来自 table 的两倍数据(我的意思是,不要使用两个 ole db 源从同一 table 读取两倍数据)。

我尝试在排序中添加第二个输出,但不允许这样做。从 OLE DB Source.

添加另一个输出也是如此

我看到有一个 "cache option",这是最好的方法吗? (虽然它会暗示创建另一个 OLE DB source.. 对吧?)

我想到的第三个选项是通过两个字段连接,但由于查找中只有一个字段 table(同一字段),当我尝试映射两个列时出现错误来自我的 csv 与我查找中的同一列 table

There are columns missing with the sort order 2 to 2

最好的方法是什么? 或者我想错了什么? 如果有什么不清楚,请告诉我,我会更新我的问题

任何时候您希望您可以从一个只允许一个的组件获得多个输出,您所要做的就是在该组件之后使用多播组件,其唯一目的是将数据流流拆分为多个输出。

贡萨洛

我刚刚使用了这篇关于如何为数据仓库构建导出列的文章:- How to Populate a Fact Table using SSIS (part 1)

我使用它构建了一个简单的程序包,它读取一个 CSV 文件,其中有两列用于从同一个代码表中派生不同的值。 CodeTable 有两个字段 Id 和 Description。

数据流有两个 "Lookup" 任务。第一个将属性 Lookup1 与 Description 结合起来以派生其 Id。第二个根据描述加入属性 Lookup2 以派生不同的 ID。

这是数据流:-

请注意,需要 "Data Conversion" 将字符串属性从 CSV 文件转换为 "Unicode string [DT_WSTR]",以便它们可以连接到 table 中的 nvarchar(50) 描述属性。

这是数据转换:-

这是第一个查找(第二个将 "Copy of Lookup2" 加入描述):-

这是带有两个派生 ID CodeTableFirstId 和 CodeTableSecondId 的数据查看器输出:-

希望我理解你的问题,这对你有用。

干杯约翰