1

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

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

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

数据流任务事实表

我正在使用三个 LookUp 函数从维度表中检索 foreignKeys project_id、employee_id 和 time_id(使用项目名称、员工编号和时间戳)。如果找到了 id,它将一直传递到Merge Join 1,如果没有,则创建一个新的 Dimension Entry(比如说项目)并传递生成的 project_id 。同样适用于员工和时间。

这有两个问题:

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

2) 插入的行数不断增加(Endless Join,我相信由于 Merge 连接)。

我试过的:

  • 我之前使用了一个 UNION 而不是三个 Merge Joins,但这导致外键分别位于单独的行中,而不是合并在一起。
  • 我使用了 Merge(而不是 Merge Join),并在所有可能的方式中组合了连接和排序条件。

我知道这种情况可能会让其他人感到困惑,但感谢您抽出宝贵时间查看它!任何帮助是极大的赞赏。

4

1 回答 1

1

解决了

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

用于填充维度表的单独数据流与填充事实表的数据流将起到作用。它是一个干净的解决方案,更易于调试。

另外:不要并行运行查找函数,而是一个接一个地运行并传递属性。也节省了不必要的合并。

总结一下:四个数据流任务,三个仅用于填充维度表,一个仅用于填充事实表。

使用保持外键关系的 SSIS 加载多个表onupdatecascade 发布的答案基本上就是它。

祝你好运!

于 2020-02-18T10:05:09.543 回答