如何对非执行项使用 SSIS 优先表达式或约束
How to use SSIS Precedence Expression OR Constraint for non-executing items
在我的一个项目中,我有两个同步序列容器,其中一个很少执行。
我的解决方案是使用包参数控制早些年的 ETL - 效果很好。
但是,在 ETL 加载之后我必须执行两个任务:
- 使用我的源系统执行 'clean' 注销,
- 启动数据集市加载进程
如果 'SEQ Load earlier years' 任务执行,我必须等待两个任务,直到 'SEQ Load earlier years' 完成。但如果它不执行,任务应该仍然执行。
我最初的解决方案也是用优先约束来解决这个问题,方法如下,但事实证明这行不通:
每当'SEQ Load earlier years'不执行时(因为'PerformFullLoad'参数设置为False),底层任务('EPT Load Datamart'和'SCR Logout')不执行全部:
当然可以将功能拆分为两个单独的负载(一个 'actual' 和一个 'historical')——但我想看看为什么 SSIS 会这样处理:我预计优先约束(设置为 'Expression or Constraint')应计算为 'True':表达式的计算结果已经为真,因此无需等待序列容器完成。
所以:我如何在 SSIS 中实现一个条件任务(在我的例子中:'SEQ Load earlier years'),它本身是另一个任务(在我的例子中:'EPT Load Datamart')的条件,只有当它执行时?
我是不是忽略了什么?我使用了 'wrong' 模式吗? (为什么?)或者这对于 SSIS 来说根本不可能实现?
我可能遗漏了一些重要的东西。我建议在 SCR 和加载当前表之间的优先约束中添加一个表达式,即 Success 和 !@[Package::PerformFullLoad]。我会在下一步的预期中将多重约束设置为 OR。这将使您在工作流程中互斥。然后,我将在 Load Earlier Years 和 Load Current Tables 容器之间添加另一个优先约束。由于您之前的设置,这将默认为 OR 多重约束。
这样设置$Package::PerformFullLoad时,包会先加载前面的数据,再加载后面的数据;但是如果没有设置$Package::PerformFullLoad,包只会加载后面的数据。
我希望这是有道理的。
:{>
在我的一个项目中,我有两个同步序列容器,其中一个很少执行。
我的解决方案是使用包参数控制早些年的 ETL - 效果很好。
但是,在 ETL 加载之后我必须执行两个任务:
- 使用我的源系统执行 'clean' 注销,
- 启动数据集市加载进程
如果 'SEQ Load earlier years' 任务执行,我必须等待两个任务,直到 'SEQ Load earlier years' 完成。但如果它不执行,任务应该仍然执行。
我最初的解决方案也是用优先约束来解决这个问题,方法如下,但事实证明这行不通:
每当'SEQ Load earlier years'不执行时(因为'PerformFullLoad'参数设置为False),底层任务('EPT Load Datamart'和'SCR Logout')不执行全部:
当然可以将功能拆分为两个单独的负载(一个 'actual' 和一个 'historical')——但我想看看为什么 SSIS 会这样处理:我预计优先约束(设置为 'Expression or Constraint')应计算为 'True':表达式的计算结果已经为真,因此无需等待序列容器完成。
所以:我如何在 SSIS 中实现一个条件任务(在我的例子中:'SEQ Load earlier years'),它本身是另一个任务(在我的例子中:'EPT Load Datamart')的条件,只有当它执行时?
我是不是忽略了什么?我使用了 'wrong' 模式吗? (为什么?)或者这对于 SSIS 来说根本不可能实现?
我可能遗漏了一些重要的东西。我建议在 SCR 和加载当前表之间的优先约束中添加一个表达式,即 Success 和 !@[Package::PerformFullLoad]。我会在下一步的预期中将多重约束设置为 OR。这将使您在工作流程中互斥。然后,我将在 Load Earlier Years 和 Load Current Tables 容器之间添加另一个优先约束。由于您之前的设置,这将默认为 OR 多重约束。
这样设置$Package::PerformFullLoad时,包会先加载前面的数据,再加载后面的数据;但是如果没有设置$Package::PerformFullLoad,包只会加载后面的数据。
我希望这是有道理的。
:{>