我是SSIS的新手并且正在经历一个用例,我想在不使用SCD组件的情况下实现SCD类型2(这是要求),我必须使用多个条件拆分和查找。现在,当我使用单个查找和单个传统分割时,它就像一个魅力,但在我引入第二个条件分割的那一刻,它无论如何都无法正常工作。我提供了数据查看数据,但它也没有显示数据。
你能帮帮我吗我的数据流看起来像这个
仍然是第一个条件分割一切看起来很好但插入第二个和第三个条件分裂后它不起作用。
答案 0 :(得分:3)
记住Occam's razor。更有可能的是,开发的产品可以使用0到1个组件但是完全失败2或者您的实现存在缺陷?
我发现以下情况最有可能违背期望,我将其翻译为“我没有阅读任何文档,而且正在通过UI摸索”。这不是一种侮辱,只是包括我自己在内的许多方法。当然,诀窍是当出现相反的东西时,你可以参考精细手册。
您的条件分割不考虑所有可能性,因此您“丢失”数据。您的数据流缺乏的是行数。我开始有多少行?有多少行进入各个汇/目的地?在一天结束/数据流时,您必须能够计算所有数据。如果没有,那么就会出现问题并且数据加载无效。
我还会选择缺少有用的组件名称和OLE DB Command对象的nits,但这样的可维护性和可伸缩性在答案错误时是不成熟的优化
开始讨论,我愿意下注你的数据丢失到以下条件
从您的路径注释中,您的第二个Conditional Split 1
有2-3个输出。 Male
,Female
,并假设您没有将默认输出重命名为男性或女性,Default
。
您声明您在此拆分时丢失了所有数据。它可能都是默认输出。我希望你的条件分割中有一个表达式,如
Male := [GenderColumn] == "Male"
Female := [GenderColumn] == "Female"
但是,如果您的源数据包含male,mAle,female,FEMALE以及中间的所有排列,那么您只会根据严格区分大小写的匹配进行匹配,而这些匹配都没有匹配。要解决此问题,您需要比较一致的值。
这里我随意将所有内容转换为大写。 LOWER
同样适用。重要的是他们需要产生相同的价值。我也很懒,我正在将一个函数应用于常量。
Male := UPPER([GenderColumn]) == UPPER("Male")
Female := UPPER([GenderColumn]) == UPPER("Female")
但是等一下,如果我有NULL怎么办?好问题,扫管笏吗? NULL值既不是男性也不是女性,该如何处理这些数据?现在,它正在向下默认输出路径。也许它应该被视为男性,因为我们的产品存在性别偏见。您的业务用户可能会知道应该对未知值执行的操作,因此您应该查阅它们。然后,您将通过||
添加OR条件,并测试我们列的当前值是否为NULL
Male := UPPER([GenderColumn]) == UPPER("Male") || ISNULL([GenderColumn])
Female := UPPER([GenderColumn]) == UPPER("Female")