映射数据流 Expresson(IIF 和 IN)

问题描述 投票:0回答:1

我一生都无法获得为映射数据流表达式创建的语法:

iif(in(GroupingName, ['Item1', 'Item2', 'Item3'])
,   replace(
        unescape(
            replace(
                replace(toString(collect(KeyValuePair))
                , '[', '{'
                )
            , ']', '}'
            )
        , 'json'
        )
    , '""', '"'
    )
,   collect(KeyValuePair)
)

问题似乎是

iif
in
的语法。我得到的错误是
columns should be wrapped in an aggregate function

azure-data-factory
1个回答
0
投票

列应该用聚合函数包裹

当您在聚合转换中使用列而不包装任何聚合函数(如

first()
avg()
collect()
等)时,会发生上述情况。在这里,在
IN()
函数中,您直接使用了列名称
GroupingName
,这就是为什么当您删除
iif(in())
表达式时它没有给出任何错误的原因。

要检查普通列的情况,可以在聚合转换后进行。

首先从聚合转换中获取列中的

collect(KeyValuePair)

enter image description here

现在,在派生列中使用表达式来检查列上的条件。在这里,在原始表达式中,else 表达式将给出一个数组,if 表达式将给出一个字符串。在

iif()
中,
if
else
的结果应给出相同的数据类型,因此您可以像下面这样修改
else
部分。

iif(in(['Item1', 'Item2', 'Item3'],GroupingName)
,   replace(
        unescape(
            replace(
                replace(toString(new)
                , '[', '{'
                )
            , ']', '}'
            )
        , 'json'
        )
    , '""', '"'
    )
,   toString(new)
)

enter image description here

GroupingName
值不在提供的数组中时,您可以看到它给出了预期的结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.