繁体   English   中英

维度表主键转移到事实表不能写值

[英]Transfer of primary keys of dimension table to fact table cannot write values

我的问题是了解主键与事实表的关系。

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

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

我正在使用 SSIS 将数据从 csv 文件传输到 OLEDB(SQL server 2019 over SSMS)

实际问题是在哪里/如何在同一任务中获取值? 我试图在两个不同的任务中完成,但它一个接一个地出现在表中(这仅在我允许主键为空值时才有效,我认为不能成为解决方案。)

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

  1. 第一维表
  2. 到第二维表
  3. 到事实表。 我认为主键是在我将数据传输到数据库时生成的,所以我认为我无法在同一个任务中获得它。

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

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

数据流维度

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

数据流事实

此数据流将用于填充事实表。 删除维度表的两个分支。 我们在这里需要做的是找到给定输入的翻译后的键值。 我假设 produkt_ID 和 steuer_id 应该被定义为 NOT NULL 并且在维度中是唯一的,但这里的概念是我们需要能够使用我们文件中的值,产品 ID 3892,并在维度中找到相同的行键值为 1 的表。

用于此目的的工具是查找转换。您将需要数据流中的 2-3 个就在目的地之前。 第一个将根据 produkt_ID 查找 produktkey。 第二个将根据 steuer_id 找到标准密钥。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM