You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4 DataWeave 2 嵌套数组按join_date分组求平均qty实现问询

解决方案

你可以直接使用如下DataWeave 2代码实现需求:

%dw 2.0
output application/csv header=true
// 提取全局共用的number字段值
var globalNumber = payload.number
---
payload.topic map (item) -> {
    number: globalNumber,
    fruit: item.fruit,
    colour: item.colour,
    // 转为小写匹配预期输出格式
    join_date: lower(item.join_date),
    avginqty: do {
        // 过滤出in方向有qty的有效记录
        var validInRecords = item.quality.*in filter ($.qty?)
        // 提取qty数值部分求和
        var totalIn = sum(validInRecords.*qty map (substringBefore($, " qty") as Number))
        var countIn = sizeOf(validInRecords)
        ---
        if(countIn > 0) (totalIn / countIn) as String ++ " qty" else ""
    },
    avgoutqty: do {
        // 过滤出out方向有qty的有效记录
        var validOutRecords = item.quality.*out filter ($.qty?)
        // 提取qty数值部分求和
        var totalOut = sum(validOutRecords.*qty map (substringBefore($, " qty") as Number))
        var countOut = sizeOf(validOutRecords)
        ---
        if(countOut > 0) (totalOut / countOut) as String ++ " qty" else ""
    }
}

逻辑说明

  1. 用*in/*out选择器批量提取quality数组下所有in、out方向的对象,过滤掉无qty字段的记录,符合你要求的无qty不纳入统计的规则
  2. 通过substringBefore提取qty的数值部分做算术运算,计算完成后再拼接 qty后缀,和预期输出格式匹配
  3. 自动适配quality为空数组的场景,此时有效记录数为0,对应平均字段返回空值
  4. 对join_date做小写转换,匹配预期输出的yesterday格式要求

如果需要控制平均qty的小数精度,可以在数值转字符串时增加格式参数,例如(totalIn / countIn) as String {format: "0.##"}即可保留最多2位小数。

内容的提问来源于stack exchange,提问作者poppp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:36:04