Informatica PC:如何根据标量查询结果在流程中做出决定?
Informatica PC: how do I make a decision in the flow upon scalar query result?
我正在为似乎最简单的事情而苦苦挣扎:为映射变量分配一个值,我稍后会在我的流程中使用它来做出决定......以我的 MS SSIS 背景,这是一个10 秒的任务,但是在 Informatica PowerCenter 中,它花了我几个小时...
所以我有一个映射变量 $$V_FF 和一个工作流变量 $$V_FF。起初名称不同,但在尝试时,我改变了它。但这应该无关紧要,对吧?
在映射中,我有一个视图作为源 returns -1、0 或 1。映射变量聚合函数设置为 MIN。
在我为此映射创建的会话中,我在 wf 变量和映射变量之间有一个 post 会话分配。
在此映射中,我在 Extrans 块中使用了 setvariable 函数。
每次我 运行 wf 时,我都会在日志中看到它使用持久值而不是每次流量 运行ning 时都分配新值...
我在这里错过了什么?
提前致谢!
好吧,这里的变量确实以有点不同的方式工作。所以想出一个好的答案会更容易,或者你会解释整个场景:你用变量做什么?
无论如何,正如您所注意到的,变量值会保存在存储库中并重复使用。对于您的场景,您可以在会话之前将分配任务添加到工作流中。设置一些较低的值(例如 -1,如果您希望变量在映射 运行 之后具有一些正值)并使用 PreSession 变量分配将值传递给映射。这将覆盖持久存储库值的使用。当然,在这种情况下,您将需要使用 Max 聚合。
最终,我也实现了当年的愿望。可能有更好的方法,但此解决方案易于维护且易于理解。
- 在您的工作流程中创建一个变量,假设 $$FailureFlag 类型为整数。
- 在您的数据库中创建一个视图,其中 returns 1 行的整数值介于 0 和 x 之间,其中 x 是正整数值。
- 使用我们刚刚创建的视图作为源并使用虚拟 table 作为目标创建映射。
- 在此映射中,您还创建了一个变量,假设为 $$MYVAR,类型为整数和聚合 "Count"。在 "Expression Transformation" 中,我使用 SETVARIABLE($$MYVAR,FF).
将视图的结果列 FF 分配给此变量 $$MYVAR
- 根据这个映射,在您的工作流程中创建一个会话。在“组件”选项卡的 "Postsession_success_variable_mapping" 部分中,添加一行和 link 工作流变量 $$FailureFlag 以及会话变量 $$MYVAR.
- 在刚刚创建的会话之后添加一个决策组件,并测试工作流变量的内容,例如 $$V_FAILURE_FLAG_IMX = 1.
- 然后将您的决定与您的目的地联系起来并添加一个测试条款,例如:
"$MyDecision.Condition = true AND $MyDecision.PrevTaskStatus = succeeded"
瞧,就是这样。
我正在为似乎最简单的事情而苦苦挣扎:为映射变量分配一个值,我稍后会在我的流程中使用它来做出决定......以我的 MS SSIS 背景,这是一个10 秒的任务,但是在 Informatica PowerCenter 中,它花了我几个小时...
所以我有一个映射变量 $$V_FF 和一个工作流变量 $$V_FF。起初名称不同,但在尝试时,我改变了它。但这应该无关紧要,对吧?
在映射中,我有一个视图作为源 returns -1、0 或 1。映射变量聚合函数设置为 MIN。
在我为此映射创建的会话中,我在 wf 变量和映射变量之间有一个 post 会话分配。 在此映射中,我在 Extrans 块中使用了 setvariable 函数。
每次我 运行 wf 时,我都会在日志中看到它使用持久值而不是每次流量 运行ning 时都分配新值...
我在这里错过了什么?
提前致谢!
好吧,这里的变量确实以有点不同的方式工作。所以想出一个好的答案会更容易,或者你会解释整个场景:你用变量做什么?
无论如何,正如您所注意到的,变量值会保存在存储库中并重复使用。对于您的场景,您可以在会话之前将分配任务添加到工作流中。设置一些较低的值(例如 -1,如果您希望变量在映射 运行 之后具有一些正值)并使用 PreSession 变量分配将值传递给映射。这将覆盖持久存储库值的使用。当然,在这种情况下,您将需要使用 Max 聚合。
最终,我也实现了当年的愿望。可能有更好的方法,但此解决方案易于维护且易于理解。
- 在您的工作流程中创建一个变量,假设 $$FailureFlag 类型为整数。
- 在您的数据库中创建一个视图,其中 returns 1 行的整数值介于 0 和 x 之间,其中 x 是正整数值。
- 使用我们刚刚创建的视图作为源并使用虚拟 table 作为目标创建映射。
- 在此映射中,您还创建了一个变量,假设为 $$MYVAR,类型为整数和聚合 "Count"。在 "Expression Transformation" 中,我使用 SETVARIABLE($$MYVAR,FF). 将视图的结果列 FF 分配给此变量 $$MYVAR
- 根据这个映射,在您的工作流程中创建一个会话。在“组件”选项卡的 "Postsession_success_variable_mapping" 部分中,添加一行和 link 工作流变量 $$FailureFlag 以及会话变量 $$MYVAR.
- 在刚刚创建的会话之后添加一个决策组件,并测试工作流变量的内容,例如 $$V_FAILURE_FLAG_IMX = 1.
- 然后将您的决定与您的目的地联系起来并添加一个测试条款,例如: "$MyDecision.Condition = true AND $MyDecision.PrevTaskStatus = succeeded"
瞧,就是这样。