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

DataWeave扁平数据分组求平均值报Cannot coerce Object to String错误解决

DataWeave分组聚合代码修正方案

原有代码错误原因

  • 分组键拼接逻辑错误:key.number为数值类型,无法直接用++运算符和字符串类型的join_date拼接,触发类型转换报错
  • 聚合字段未预处理:avginqty、avgoutqty是带 qty后缀的字符串,且存在空值,无法直接传入sum函数计算
  • 输出格式不匹配:mapObject返回的是对象结构,不符合CSV输出要求的数组结构

修正后代码(DataWeave 2.0)

%dw 2.0
output application/csv header=true
// 辅助函数:将qty字符串转为数值,空值返回0
fun parseQty(qtyStr) = (qtyStr replace " qty" with "") as Number {default: 0}
// 辅助函数:计算平均值,无有效值返回空字符串
fun calcAvg(qtyList) = do {
    var validList = qtyList filter !isBlank($) map parseQty($)
    ---
    if(sizeOf(validList) == 0) "" else (sum(validList)/sizeOf(validList) as Number) ++ " qty"
}
---
payload 
// 按number+join_date分组,先转number为字符串避免类型错误
groupBy ((item) -> (item.number as String) ++ "_" ++ item.join_date)
// 分组结果转数组
pluck $
map ((group) -> {
    number: group[0].number,
    fruit: group[0].fruit,
    colour: group[0].colour,
    join_date: group[0].join_date,
    avginqty: calcAvg(group.avginqty),
    avgoutqty: calcAvg(group.avgoutqty)
})

逻辑说明

  1. 先通过parseQty函数把带 qty后缀的字段值转为可计算的数值,空值、无效值默认返回0
  2. 分组时将数值类型的number转为字符串后再和join_date拼接,避免类型转换错误
  3. 用pluck把分组后的对象转为数组,适配CSV输出的结构要求
  4. 平均值计算时先过滤掉空值,仅对有效值做平均,计算完成后拼接回 qty后缀,无有效值时返回空字符串,完全匹配预期输出格式

内容的提问来源于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 06:00:01