这个问题已经得到解答,但是有一种更简单的方法可以在这样的聚合情况下收集唯一值,而不需要另一个分组依据。在我们的场景中,我们的数据如下
|订单号 |品牌 |
| -------- | -------------- |
| ORD001 |示例品牌1 |
| ORD001 |示例品牌1 |
| ORD001 |示例品牌2 |
我们希望将每个 ORDER_NO 排成一行,并列出独特的品牌。示例输出如下
|订单号 |品牌 |
| -------- | -------------- |
| ORD001 |示例品牌 1、示例品牌 2 |
因此,我们在 ORDER_NO 上添加了聚合转换(group by),并使用collect(BRAND)来收集名为 BRANDS_ARR 的数组中的所有 BRAND 值。
在此之后,我们添加了派生列转换,并将 BRAND 字符串数组转换为唯一字符串 BRANDS,如下
栏目名称:品牌
表达:
toString(reduce(BRANDS_ARR, '', iif((instr(#acc, #item) > 0), #acc, #acc + #item + ',') , #result))
请注意,我们使用reduce函数与iif和instr函数来决定是否应该累积下一个值。这样重复项就会被过滤,并且您会获得类似“集合”的功能。
Nit:上面的代码片段最后有一个额外的逗号,可以使用替换功能轻松删除。
没有collectDistinct()函数,所以你无法通过数据流中的函数来实现这一点。
你可以试试这个: 创建两个聚合转换。
首先按基础型号和modelDocId进行分组,然后添加一列(DModelDocId),表达式为
first(modelDocId)
。
其次,按基础型号分组,然后添加一列(modelDocIds),表达式为
collect(DModelDocId)
。
希望这可以帮助你。
或者您可以使用ADF内置的collectUnique()。 或者您可以同时使用collect()和distinct()方法。这样你就不必聚合两次。例如:distinct(collect(column_name))