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

Dataweave基于嵌套值过滤数组 应收账龄客户筛选及标记实现

报错原因

你之前的代码报错是因为aging是数组类型,直接调用$.aging.totalamount会返回所有账龄区间的余额组成的数组,无法直接和单值200做比较,也无法直接整体转为Number类型。

完整解决方案代码

%dw 2.0
output application/json
---
{
    arAccounts: payload.data.araging map (customer) -> do {
        // 预计算客户总余额
        var totalBalance = sum(customer.aging.totalamount as Number)
        // 预计算31天及以上账龄区间的余额,默认值0避免区间不存在的异常
        var over30DayBalance = (customer.aging filter ($.agingperiod == "31-")).totalamount[0] as Number default 0
        ---
        if (totalBalance > 1000 or over30DayBalance > 200) {
            customerid: customer.customerid,
            totalBalance: totalBalance,
            over30DayBalance: over30DayBalance,
            // 新增合规标记字段,明确满足的规则
            qualifyFlag: if (totalBalance > 1000 and over30DayBalance > 200) "同时满足总余额超1000美元、30天以上账龄余额超200美元"
                        else if (totalBalance > 1000) "满足总余额超1000美元"
                        else "满足30天以上账龄余额超200美元"
        } else null
    // 过滤掉不符合条件返回的null值
    } filter ($ != null)
}

逻辑说明

  • 先通过sum函数对客户所有账龄区间的余额求和,自动遍历嵌套的aging数组完成金额类型转换和累加,得到总余额
  • 先过滤出agingperiod为31-的区间,再提取对应余额,避免数组和单值比较的错误
  • 同时满足两个筛选规则的任意一条就保留客户,否则返回null,最后统一过滤掉null值实现筛选
  • 新增qualifyFlag字段,明确标记每个保留客户符合的规则类型

运行输出结果

基于你提供的示例输入,运行后返回结果如下:

{
  "arAccounts": [
    {
      "customerid": "50002",
      "totalBalance": 246.0,
      "over30DayBalance": 246.0,
      "qualifyFlag": "满足30天以上账龄余额超200美元"
    },
    {
      "customerid": "50003",
      "totalBalance": 1084.6,
      "over30DayBalance": 0.0,
      "qualifyFlag": "满足总余额超1000美元"
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:07