【发布时间】:2020-07-17 03:43:52
【问题描述】:
我想使用 collect(column1) 函数来收集 Agg 中的 group By column2 的所有行值。转型。但由于 column1 具有重复值,因此我在返回的数组中得到重复值。我想要一个收集所有不同值的函数。
【问题讨论】:
标签: azure-data-factory dataflow collect
我想使用 collect(column1) 函数来收集 Agg 中的 group By column2 的所有行值。转型。但由于 column1 具有重复值,因此我在返回的数组中得到重复值。我想要一个收集所有不同值的函数。
【问题讨论】:
标签: azure-data-factory dataflow collect
没有collectDistinct()函数,所以不能通过数据流中的函数来实现。
你可以试试这个: 创建两个聚合转换。
首先,按基本型号和modelDocId分组,然后添加一列(DModelDocId),表达式为first(modelDocId)。
其次,按基本型号分组,然后添加一列(modelDocIds),表达式为collect(DModelDocId)。
希望对你有帮助。
【讨论】:
已经回答了这个问题,但是在这样的聚合情况下,有一种更简单的方法可以收集唯一值,而无需另一个 group by。在我们的场景中,我们有如下数据
| ORDER_NO |品牌 |
| -------- | -------------- |
| ORD001 | ExampleBrand1 |
| ORD001 | ExampleBrand1 |
| ORD001 | ExampleBrand2 |
我们希望每个 ORDER_NO 占一行,并在其中列出独特的品牌。示例输出如下
| ORDER_NO |品牌 |
| -------- | -------------- |
| ORD001 | ExampleBrand1,ExampleBrand2 |
所以我们确实在 ORDER_NO 上添加了一个聚合转换(分组依据),并使用 collect(BRAND) 将所有 BRAND 值收集到一个名为 BRANDS_ARR 的数组中。
在此之后,我们添加了派生列转换,并将 BRAND 字符串数组转换为唯一字符串 BRANDS,如下所示
栏名:品牌
表达式:
toString(reduce(BRANDS_ARR, '', iif((instr(#acc, #item) > 0), #acc, #acc + #item + ',') , #result))
请注意,我们使用带有 iif 和 instr 函数的 reduce 函数来决定是否应该累积下一个值。这样一来,重复项就会被过滤,并且您会获得类似“Set”的功能。
Nit:上面的 sn-p 后面多了一个逗号,可以很容易地用 replace 函数去掉。
【讨论】: