如何对非执行项使用SSIS优先表达式或约束

时间:2016-01-26 15:06:04

标签: ssis

在我的一个项目中,我有两个同步的序列容器,其中一个很少执行。

我的解决方案是使用包参数控制早年的ETL - 效果很好。

Conditional execution of earlier years' ETL

但是,在ETL加载后,我必须执行两项任务:

  1. 使用我的源系统执行“干净”注销
  2. 启动DataMart加载过程
  3. 如果'SEQ Load early years'任务执行,我必须等待两个任务,直到'SEQ Load early years'完成。但如果它不执行,任务应该仍然执行。

    我的初始解决方案是使用优先约束来解决这个问题,但是事实证明这不起作用:

    每当'SEQ Load early years'没有执行时(因为'PerformFullLoad'参数设置为False),底层任务('EPT Load Datamart'和'SCR Logout')根本不执行:< / p>

    Package execution finished: bottom containers have not executed

    当然可以将功能分成两个独立的负载(一个'实际'和一个'历史') - 但我试图看看为什么SSIS处理这种方式:我期望优先约束(设置为'表达式 Constraint')应该计算为'True':Expression已经计算为true,所以不需要等待序列容器完成..

    那么:我如何在SSIS中实现一个条件任务(在我的例子中:'SEQ Load early years'),它本身是另一个任务的条件(在我的例子中:'EPT Load Datamart'),只有它执行? / p>

    我忽略了什么吗?我使用了'错误'模式吗? (为什么?)或者这对于SSIS来说这是不可能的场景吗?

1 个答案:

答案 0 :(得分:2)

我可能会遗漏一些重要的东西。我建议为SCR和Load Current Tables之间的优先约束添加一个表达式,即Success和!@ [Package :: PerformFullLoad]。我会在预期下一步时将多个约束设置为OR。这将使您在工作流程中具有相互排他性。然后,我将在Load Earlier Years和Load Current Tables容器之间添加另一个优先约束。由于您之前的设置,这将默认为OR多重约束。

这样,当你设置$ Package :: PerformFullLoad时,包首先加载先前的数据,然后加载后面的数据;但是如果没有设置$ Package :: PerformFullLoad,那么包只会加载后来的数据。

我希望这是有道理的。

:{&GT;