【问题标题】:SSIS 2 Conditional Split not working as ExpectedSSIS 2 条件拆分未按预期工作
【发布时间】:2014-12-12 09:11:54
【问题描述】:

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

你能帮帮我吗

我的数据流是这样的

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

【问题讨论】:

  • 有条件拆分是否有任何限制,单个数据流中只允许一个或两个
  • 你是如何设置条件的?
  • 在第一个条件中,我检查了两列是否有任何来自源和目标的变化......在第二个拆分中检查了男性和女性......并在第三个条件中检查了姓氏。 . 因为只有当性别是女性时才需要检查姓氏
  • 它没有显示任何错误但也没有显示输出
  • 向 SSIS 数据流添加任意数量的组件没有任何限制。条件拆分会将输出发送到条件匹配的路径或默认输出。好像没有满足你的条件。能否请您提供表达式?您还可以通过添加将默认输出发送到的组件来解决此问题,这样您就可以查看哪些数据符合条件,哪些不符合。

标签: sql ssis sql-server-2008-r2 msbi


【解决方案1】:

记住Occam's razor。哪种情况更有可能是开发的产品使用 0 到 1 个组件但使用 2 个组件完全失败,或者您的实现存在缺陷?

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

高级设计问题

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

我也会对您缺乏有用的组件名称和 OLE DB 命令对象挑剔,但这是可维护性和可伸缩性,当答案错误时这是过早的优化

可能是什么原因

言归正传,我敢打赌,您的数据会因以下情况而丢失数据

  • 空
  • 区分大小写

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

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

Male := [GenderColumn] == "Male"
Female := [GenderColumn] == "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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2016-05-20
    • 1970-01-01
    • 2021-12-13
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多