我一生都无法获得为映射数据流表达式创建的语法:
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
列应该用聚合函数包裹
当您在聚合转换中使用列而不包装任何聚合函数(如
first()
、avg()
、collect()
等)时,会发生上述情况。在这里,在 IN()
函数中,您直接使用了列名称 GroupingName
,这就是为什么当您删除 iif(in())
表达式时它没有给出任何错误的原因。
要检查普通列的情况,可以在聚合转换后进行。
首先从聚合转换中获取列中的
collect(KeyValuePair)
现在,在派生列中使用表达式来检查列上的条件。在这里,在原始表达式中,else 表达式将给出一个数组,if 表达式将给出一个字符串。在
iif()
中,if
和 else
的结果应给出相同的数据类型,因此您可以像下面这样修改 else
部分。
iif(in(['Item1', 'Item2', 'Item3'],GroupingName)
, replace(
unescape(
replace(
replace(toString(new)
, '[', '{'
)
, ']', '}'
)
, 'json'
)
, '""', '"'
)
, toString(new)
)
当
GroupingName
值不在提供的数组中时,您可以看到它给出了预期的结果。