0

私は Mule でかなりトリッキーなデータセットを扱っており、DataWeave を使用して、配列で返された多数のレコードに対していくつかの計算を行う必要があります。私が扱っている配列は次のようになります。

[
  {
    "id": "1",
    "type": "AAA",
    "metadata": {
      "balance": "500"
    }
  },
  {
    "id": "2",
    "type": "BBB",
    "metadata": {
      "total": "200"
    }
  },
  {
    "id": "3",
    "type": "AAA",
    "metadata": {
      "balance": "-100"
    }
  }
]

私が達成しようとしている結果は次のようになります。

{
  "X": 200, //sum (all metadata/balance where type=AAA) - (all metadata/total where type=BBB) ** in this case, (500 + -100)-(200)=400
  "Y": 500, //sum all +ve metadata/balance where type=AAA
  "Z": 300 //sum (all metadata/total where type=BBB) + (all -ve metadata/balance where type=AAA * -1) ** in this case, (200)+(-100 * -1)=300
}

できるだけ多くのドキュメントをクロールしましたが、答えを見つけるのに苦労しています。さらに厄介なことに、合計する必要がある値はstring、受信メッセージの形式で表示さintegerれ、送信メッセージの形式で表示される必要があります。

任意のガイダンスをいただければ幸いです。

4

2 に答える 2

0

これを試してください:

%dw 1.0
%output application/json
%function getMetadataByType(type) (payload[?($.type == type)].metadata)
%function sumPositiveBalance(type) ((sum getMetadataByType(type).balance[?($ > 0)]) default 0)
%function sumNegativeBalance(type) ((sum getMetadataByType(type).balance[?($ < 0)]) default 0)
%function sumAllBalance(type) ((sum getMetadataByType(type).balance) default 0)
%function sumTotal(type) ((sum getMetadataByType(type).total) default 0)
%var valueOfX = sumAllBalance("AAA") - sumTotal("BBB")
%var valueOfY = sumPositiveBalance("AAA")
%var valueOfZ = sumTotal("BBB") + (sumNegativeBalance("AAA") * -1)
---
{
    X: valueOfX,
    Y: valueOfY,
    Z: valueOfZ
}
于 2016-03-01T14:04:15.807 に答える