Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS Construction中的多个表达式_Ssis_Azure Data Factory 2 - Fatal编程技术网

SSIS Construction中的多个表达式

SSIS Construction中的多个表达式,ssis,azure-data-factory-2,Ssis,Azure Data Factory 2,我有两个变量:user::runnumber和user::recordcount 如果runnumber=1或recordcount=0任务A应该执行。 任务A是一个“执行包任务”,否则运行正常。 在任何其他场景中,都应该跳过任务 我认为使用表达式(@[User::runnumber]==1 | |@[User::record_count]!=0)将任务设置为禁用会起到作用,但事实并非如此。 有没有办法解决这个问题 runnumber = 1 recordcount = 0 --> tas

我有两个变量:user::runnumber和user::recordcount

如果
runnumber=1
recordcount=0
任务A应该执行。 任务A是一个“执行包任务”,否则运行正常。 在任何其他场景中,都应该跳过任务

我认为使用表达式
(@[User::runnumber]==1 | |@[User::record_count]!=0)
将任务设置为禁用会起到作用,但事实并非如此。 有没有办法解决这个问题

runnumber = 1 recordcount = 0 --> task A
runnumber = 1 recordcount = 100 --> task A
runnumber = 4 recordcount = 0--> task A
runnumber = 4 recordcount = 4--> skip task A


使用优先级约束来控制任务a的执行。因此,如果控制流如下所示:

双击两个任务之间的约束箭头,将求值选项设置为“表达式”,并添加以下表达式:
@[User::runnumber]==1 | |@[User::recordcount]==0

编辑: 添加优先约束的配置:

有两种方法:优先约束和禁用属性

如果没有离开任务的路径,则它们是等效的方法。如果有一个“下游”任务应该运行,而不管是否触发了Execute Package任务,那么Disabled属性可能最有意义。关闭先例约束将禁用整个逻辑分支,而设置为禁用将跳过该任务以执行

对于提供的控制流,我只希望PC成功并使用Disabled属性

残疾人的属性总是让我感到困惑,因为它的消极性

无论您采用哪种方法,我都建议创建布尔变量来跟踪是否满足“运行执行包任务”的规则。您可以独立于切换任务是否运行的逻辑进行测试

我认为您的核心问题可能是
@[User::record\u count]=0
您的业务规则是当记录计数为零时,那么它应该是“是”,但这是该值的倒数

为了简单起见,我创建了3个SSIS变量,即布尔类型的DisableExecutePackageTask,并通过表达式定义它们

  • EnableEPTRuleRunNumber
    @[User::runnumber]==1
  • EnableEPTRuleRecordCount
    @[User::record\u count]==0
  • EnableEPT
    @[User::EnableEPTRuleRunNumber]| |@[User::EnableEPTRuleRecordCount]
我还定义了两个称为labels的变量,并将两个容器的Name属性设置为它们,以便在运行包时看到发生了什么

--LabelRunNumber
“RunNumber”+(DT_WSTR,5)@[User::RunNumber]+“规则是”+(DT_WSTR,10)@[User::EnableEPTRuleRunNumber]
--LabelRecordCount
“RecordCount”+(DT_WSTR,5)@[User::record_count]+“规则是”+(DT_WSTR,10)@[User::EnableEPTRuleRecordCount]

然后,我将更改变量runnumber的值并记录_count以评估场景

既然我爱你


0
0
@[用户::runnumber]==1
@[用户::记录计数]==0
@[User::EnableEPTRuleRunNumber]| |@[User::EnableEPTRuleRecordCount]
“RunNumber”+(DT_WSTR,5)@[User::RunNumber]+“规则是”+(DT_WSTR,10)@[User::EnableEPTRuleRunNumber]
“RecordCount”+(DT_WSTR,5)@[User::record_count]+“规则是”+(DT_WSTR,10)@[User::EnableEPTRuleRecordCount]
!@[用户::EnableEPT]
@[用户::LabelRecordCount]
@[用户::LabelRunNumber]

在您关闭并重新打开包之前,任务的名称并不总是更新的,因为随着变量的变化,它们不会得到重新评估自己的脉冲,但它确实起作用。

我就是这么想的。但它不会触发。它分别在两种情况下触发。但不是在两个组合使用| |哦。。。你在描述中说或。如果需要逻辑和,请使用
&&
。如果我理解正确,请告诉我。如果runnumber=0或recordcount=0,我会触发它。但它不会那样做。如果我让它在runnumber==1上运行,它会做它需要做的事情。如果我将其设置为recordcount==0,则它仅在recordcount=0时运行。但是,如果我使用| |将两者结合起来,它不会在任何一个上触发……我对任务应该在什么条件下运行感到困惑。您是否介意在问题中添加一个表,显示不同的值和预期的结果?添加了一个表,其中包含可能的结果和预期的结果。哦,我们是使用先决条件(如Mark所示)还是使用表达式来控制任务的Disable(d)属性?两者都有。上一个任务应已成功完成。(约束)表达式控制是否执行任务A。(表情)我如何上传图片?喜欢你的解决方案!尤其是BIML部分。从中学到了很多。然而,在阅读您的帖子时,我发现只有一种情况下任务会被执行,所以我使用了disabled属性并将其设置为:@[User::runnumber]=1&&@[User::record\u count]=0
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
<!-- 
EPT should be ON when 
record count is non zero
or run number is 1

It should be OFF when
record count is zero
and run number is not 1 
-->
        <Package Name="SO_62518244">
            <Variables>
                <Variable Name="runnumber" DataType="Int32">0</Variable>
                <Variable Name="record_count" DataType="Int32">0</Variable>
                <Variable Name="EnableEPTRuleRunNumber" DataType="Boolean" EvaluateAsExpression="true">@[User::runnumber]==1</Variable>
                <Variable Name="EnableEPTRuleRecordCount" DataType="Boolean" EvaluateAsExpression="true">@[User::record_count]==0</Variable>
                <Variable Name="EnableEPT" DataType="Boolean" EvaluateAsExpression="true">@[User::EnableEPTRuleRunNumber] || @[User::EnableEPTRuleRecordCount]</Variable>
                <Variable Name="LabelRunNumber" DataType="String" EvaluateAsExpression="true">"RunNumber " + (DT_WSTR, 5) @[User::runnumber] + " rule is " + (DT_WSTR, 10) @[User::EnableEPTRuleRunNumber]</Variable>
                <Variable Name="LabelRecordCount" DataType="String" EvaluateAsExpression="true">"RecordCount " + (DT_WSTR, 5) @[User::record_count] + " rule is " + (DT_WSTR, 10) @[User::EnableEPTRuleRecordCount]</Variable>
            </Variables>
            <Tasks>
                <Container Name="Before"/>
                <Container Name="EPT Placeholder">
                    <Expressions>
                        <Expression ExternalProperty="Disable">!@[User::EnableEPT]</Expression>
                    </Expressions>
                    <PrecedenceConstraints>
                        <Inputs>
                            <Input OutputPathName="Before.Output" />
                        </Inputs>
                    </PrecedenceConstraints>
                </Container>
                <Container Name="After">
                    <PrecedenceConstraints>
                        <Inputs>
                            <Input OutputPathName="EPT Placeholder.Output" />
                        </Inputs>
                    </PrecedenceConstraints>
                </Container>
                <Container Name="Debug RecordCount">
                    <Expressions>
                        <Expression PropertyName="Name">@[User::LabelRecordCount]</Expression>
                    </Expressions>
                </Container>
                <Container Name="Debug RunNumber">
                    <Expressions>
                        <Expression PropertyName="Name">@[User::LabelRunNumber]</Expression>
                    </Expressions>
                </Container>
            </Tasks>
        </Package>
    </Packages>
</Biml>