0

我是 SSIS 的新手,并且正在经历一个用例,我想在不使用 SCD 组件(这是要求)的情况下实现 SCD 类型 2,我必须使用多个条件拆分和查找。现在,当我使用单个查找和单个条件拆分时,它就像一个魅力,但是当我引入第二个条件拆分时,它无论如何都不起作用。我提供了 dataviwer 来查看数据,但它也没有显示数据。

你能帮助我吗

我的数据流是这样的在此处输入图像描述

仍然是第一个条件拆分一切看起来都很好,但是在插入第二个和第三个条件拆分后它不起作用。

4

1 回答 1

3

记住奥卡姆剃刀。哪个更有可能是开发的产品使用 0 到 1 个组件但完全失败了 2 或者您的实施存在缺陷?

我发现以下情况最有可能违背预期,我将其翻译为“我没有阅读任何文档并且正在摸索 UI”。这并不是一种侮辱,只是包括我自己在内的许多人采用的一种方法。当然,诀窍是,当你看到一些行为相反的东西时,你会查阅精美手册。

高层设计问题

您的条件拆分并未考虑所有可能性,因此您正在“丢失”数据。您的数据流缺少的东西是行数。我从多少行开始?有多少行已到达各个接收器/目的地?在一天/数据流结束时,您必须能够考虑所有数据。如果不是,那么就出了问题,您的数据加载无效。

我也会对您缺乏有用的组件名称和 OLE DB Command 对象感到不满,但这是可维护性和可扩展性,当答案错误时这是过早的优化

可能是什么原因

言归正传,我愿意打赌您将数据丢失到数据中的以下条件

  • 无效的
  • 区分大小写

从您的路径注释中,您的第二个Conditional Split 1有 2-3 个输出。Male, Female, 并假设您没有将默认输出重命名为 Male 或 Female, Default

您声明您在此拆分时丢失了所有数据。很可能这一切都将进入默认输出。我希望您的条件拆分中有一个表达式,例如

Male := [GenderColumn] == "Male"
Female := [GenderColumn] == "Female"

但是,如果您的源数据包含男性、男性、女性、女性以及介于两者之间的所有排列,则您只能根据严格区分大小写的匹配进行匹配,而您的任何数据都不匹配。要解决此问题,您需要比较一致的值。

在这里,我任意将所有内容都转换为大写。LOWER也可以。重要的是它们需要产生相同的值。我也很懒惰,因为我正在将函数应用于常量。

Male := UPPER([GenderColumn]) == UPPER("Male")
Female := UPPER([GenderColumn]) == UPPER("Female")

但是等等,如果我有 NULL 怎么办?好问题,怎么办?NULL 值既不是男性也不是女性,应该如何处理该数据?现在,它正沿着默认输出路径前进。也许它应该被视为男性,因为我们的产品存在性别偏见。您的业​​务用户可能知道应该如何处理未知值,因此您应该咨询他们。然后,您将添加一个 OR 条件,通过||and 测试我们列的当前值是否为 NULL

Male := UPPER([GenderColumn]) == UPPER("Male") || ISNULL([GenderColumn])
Female := UPPER([GenderColumn]) == UPPER("Female")
于 2014-12-12T17:53:11.100 回答