Merge 使用SSIS查找引用外键

Merge 使用SSIS查找引用外键,merge,ssis,lookup,data-warehouse,ssis-2019,Merge,Ssis,Lookup,Data Warehouse,Ssis 2019,我在以下主题上寻求帮助。我试图用两个Excel数据源(S1~300行和S2~7000行)创建一个ETL流程。S1包含项目信息和员工详细信息,S2包含每个员工在某个时间戳的项目中工作的小时数 我想通过引用维度表中现有的主键,将每个员工在每个项目中工作的时间戳插入到事实表中。如果维度表中还没有条目,我想先添加一个新条目并使用新生成的id。目标表结构如下所示(数据仓库、星型架构): 在SSIS中,我首先创建了三个数据流任务,用不同的值填充维度表(项目、员工和时间)(使用group by,因为S1和S2

我在以下主题上寻求帮助。我试图用两个Excel数据源(S1~300行和S2~7000行)创建一个ETL流程。S1包含项目信息和员工详细信息,S2包含每个员工在某个时间戳的项目中工作的小时数

我想通过引用维度表中现有的主键,将每个员工在每个项目中工作的时间戳插入到事实表中。如果维度表中还没有条目,我想先添加一个新条目并使用新生成的id。目标表结构如下所示(数据仓库、星型架构):

在SSIS中,我首先创建了三个数据流任务,用不同的值填充维度表(项目、员工和时间)(使用group by,因为S1和S2包含大量重复行),然后创建了第四个数据流任务(见下图)插入FactTable数据,这就是我遇到问题的地方:

我使用三个查找函数从维度表(使用项目名称、员工编号和时间戳)中检索foreignKeys项目id、员工id和时间id。如果找到id,它将一直传递到合并Join 1,如果没有,则创建一个新的维度条目(比如project),并传递生成的project_id。员工和时间也一样

这有两个问题:

1) 最终结果中的“小时数”(通过多播4传递,见上图)不匹配()

2) 插入的行数一直在增加(我相信是由于合并联接)

我所尝试的:

  • 我以前使用过一个并集而不是三个合并联接,但这导致外键分别位于单独的行中,而不是合并在一起
  • 我使用了Merge(而不是Merge-Join)并在所有可能的方式中组合了连接和排序条件
我理解这个场景可能会让其他人感到困惑,但感谢您花时间来研究它!非常感谢您的帮助

解决了它

对于任何有类似问题的人:

将填充维度表的数据流与填充事实表的数据流分开就可以了。 这是一个干净的解决方案,更容易调试

另外:不要并行运行查找函数,而是一个接一个地运行并传递属性。还可以保存不必要的合并

综上所述: 四个数据流任务,三个仅用于填充维度表,一个仅用于填充事实表

onupdatecascade发布的答案基本上是这样的


祝你好运

在我们帮助您之前,您可能需要添加更多详细信息。您的查找、合并联接和脚本任务是如何配置的?我怀疑您在这里是否有无休止的联接。我猜您的合并联接#3与记录不匹配,您最终创建的交叉联接将产生约4000万条记录(9855 x 4062=40031010)。感谢您的评论。是的,这并不是一个无休止的加入,但它感觉是这样的:-)我的方法有点像从一开始,我把我的解决方案贴在下面。