将维度 table 的主键传输到事实 table 无法写入值

Transfer of primary keys of dimension table to fact table cannot write values

我的问题是理解主键与事实的关系 table。

这是我正在使用的结构,传输有效,但它说我设置为主键的值不能为 NULL

这是我正在使用的结构,传输有效,但它说我设置为主键的值不能为 NULL

我正在使用 SSIS 将数据从 CSV 文件传输到 OLEDB(SQL 服务器 2019 通过 SSMS)

实际问题是where/how我可以在同一个任务中获取值吗?我尝试在两个不同的任务中执行,但它一个接一个地在 table 中(这仅在我允许主键为空时才有效,我认为这不是解决方案。)

可能是我的问题从源头转了三个

  1. 第一维table

  2. 到二次元table

  3. 事实上table。我认为主键是在我将数据传输到数据库时生成的,所以我认为我无法在同一任务中获取它。

数据流 1

数据流 2

输入数据

输出数据5

我将列 salesid 添加到输入以将其用于 saleskey。您提到的第三次查找是否有更好的解决方案?

您正在尝试加载 fischspezi 事实 table 以及产品 (produkt) 和位置 (standort)。问题是,您没有来自维度的键。

我假设您维度中的“关键”列是 autogenerated/identity 值?如果是这种情况,那么您需要将单个数据流分成两个数据流。两者都将保留平面文件源和多播。

数据流维度

这是现有的数据流,减去通向事实的路径 table。

数据流事实

此数据流将用于填充事实 table。删除维度 tables 的两个 b运行ches。我们在这里需要做的是根据我们的输入找到 t运行 指定的键值。我假设 produkt_ID 和 steuer_id 应该被定义为 NOT NULL 并且在维度上是唯一的,但这里的概念是我们需要能够使用我们的文件中的值,产品 ID 3892,并在维度 table 中找到键值为 1.

的同一行

用于此目的的工具是 Lookup Transformation 您将希望数据流中的 2-3 个就在目的地之前。第一个将根据 produkt_ID 查找 produktkey。第二个将根据 steuer_id.

找到 standortkey

您希望在此处进行的第三次查找(并添加回维度加载)将在目标 table 中查找当前行。如果您 运行 现有包 10 次,您将拥有 10 倍的数据(除非您定义了唯一约束)。在这里猜测,但我假设 sale_id 是源数据中的一个值,所以我会在这里进行查找以确保我不会重复加载一行。如果 sales_id 是生成的值,那么为了保持一致性,我会将后缀重命名为 key 以与您的数据模型的其余部分保持一致。

我也鼓励大家阅读 Andy Leonard 的 Stairway to Integration Services 系列。第 3 级和第 4 级地址使用查找和确定如何更新现有行,我认为这将是您旅程中的一些后续步骤。

处理评论

I would place them just over the fact destination and then join with a union all to fact table

没有。您的事实数据流中无需全部加入联接或联合。平面文件源(获取我们的候选数据)-> 数据转换(更改数据类型以匹配预期)-> 派生列(根据需要处理数据,添加插入日期等内容)-> 查找(T运行将源值设置为目标值)-> 目标(存储新数据)。

假设源看起来像

produkt_ID steuer_id sales_id umsatz
1234 1357 2468 12
2345 3579 4680 44

维度加载后,您将拥有(简化)

产品

produktkey produkt_ID
1 1234
2 2345

位置

standortkey steuer_id
7 1357
9 3579

我们的目标是使用原始数据 + 查找得到一个像

这样的集合
produkt_ID steuer_id sales_id umsatz produktkey standortkey
1234 1357 2468 12 1 7
2345 3579 4680 44 2 9

我建议的第三个查找(暂时跳过)是检查目标中是否存在 sales_id。如果是,那么您可能希望查看该现有记录是否与我们在文件中的记录相同。如果相同,那么我们什么都不做。否则,我们可能想要更新现有行,因为我们有新信息 - 有人输入错误的数量,而我们的销售额应该是 120 而不是 12。更新超出了这个问题的范围,但它在集成服务的阶梯中很好地涵盖了。