如何在DataWeave中按article汇总数组并计算ats_qty与最大po_date
DataWeave实现按article汇总数据的方案
需求说明
现有两个数组,需要按article字段进行汇总:
- 累加对应
ats_qty的值 - 取该
article对应的最大po_date值
输入数组
var array1 = [ { "marketPlaceName": "A1", "article": "XX103030AE1100M", "ats_qty": "0", "po_date": "20230302" } ] var array2 = [ { "marketPlaceName": "A1", "article": "XX103030AE1100M", "ats_qty": "1", "po_date": "20230303" }, { "marketPlaceName": "A1", "article": "XX103030AE1100L", "ats_qty": "2", "po_date": "20230302" } ]
实现代码
%dw 2.0 output application/json var array1 = [ { "marketPlaceName": "A1", "article": "XX103030AE1100M", "ats_qty": "0", "po_date": "20230302" } ] var array2 = [ { "marketPlaceName": "A1", "article": "XX103030AE1100M", "ats_qty": "1", "po_date": "20230303" }, { "marketPlaceName": "A1", "article": "XX103030AE1100L", "ats_qty": "2", "po_date": "20230302" } ] --- (array1 ++ array2) groupBy ($.article) pluck ((groupedItems, articleKey) -> { marketPlaceName: groupedItems[0].marketPlaceName, article: articleKey, ats_qty: (sum(groupedItems.ats_qty as Number)) as String, po_date: max(groupedItems.po_date) })
代码逻辑说明
- 合并数组:用
++运算符将两个输入数组合并为一个数组 - 按article分组:使用
groupBy函数,以article字段为键对合并后的数组分组 - 聚合处理每组数据:通过
pluck遍历分组结果,对每组数据做以下处理:marketPlaceName:取分组中第一个条目的值(假设同一article对应的marketPlaceName一致)article:直接使用分组的键值ats_qty:先将每组的ats_qty转为数字类型求和,再转回字符串类型,匹配预期输出格式po_date:利用max函数直接取每组中的最大值(因po_date是格式统一的日期字符串,字典序与日期顺序一致,可直接比较)
预期输出
[ { "marketPlaceName": "A1", "article": "XX103030AE1100M", "ats_qty": "1", "po_date": "20230303" }, { "marketPlaceName": "A1", "article": "XX103030AE1100L", "ats_qty": "2", "po_date": "20230302" } ]
内容的提问来源于stack exchange,提问作者maomifadacai
相关产品推荐
相关产品推荐

