Есть несколько способов, которыми вы можете сделать это.
1) Вот гибкий, процессный, но не компактный способ сделать это:
%dw 2.0
output application/dw
var data = [{
"receiptId": 11000134453,
"amountCollected": 11,
"paymentMode": "Cash"
}, {
"receiptId": 1105444723,
"amountCollected": 12,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434763,
"amountCollected": 13,
"paymentMode": "DD"
},{
"receiptId": 11000134457,
"amountCollected": 14,
"paymentMode": "Cash"
}, {
"receiptId": 1105444728,
"amountCollected": 15,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434769,
"amountCollected": 16,
"paymentMode": "DD"
}]
---
do {
var byPaymentMode = data groupBy $.paymentMode
---
{
summary: (byPaymentMode mapObject {
(lower($$) ++ "Receipt"): sizeOf($),
(lower($$) ++ "ReceiptAmount"): sum($.*amountCollected)
}),
receipt: data
}
}
2) Вот не гибкий, компактный, но не эффективный процесс, чтобы сделать это с помощью встроенного модуля dw::core::Arrays
.
%dw 2.0
output application/dw
var data = [{
"receiptId": 11000134453,
"amountCollected": 11,
"paymentMode": "Cash"
}, {
"receiptId": 1105444723,
"amountCollected": 12,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434763,
"amountCollected": 13,
"paymentMode": "DD"
},{
"receiptId": 11000134457,
"amountCollected": 14,
"paymentMode": "Cash"
}, {
"receiptId": 1105444728,
"amountCollected": 15,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434769,
"amountCollected": 16,
"paymentMode": "DD"
}]
---
{
summary: {
TotalAmountCollected: data dw::core::Arrays::sumBy (e) -> e.amountCollected,
cashReceipt: data dw::core::Arrays::countBy (e) -> e.paymentMode == "Cash",
cashReceiptAmount: data dw::core::Arrays::sumBy (e) -> if (e.paymentMode == "Cash") e.amountCollected else 0,
checkReceipt: data dw::core::Arrays::countBy (e) -> e.paymentMode == "Cheque",
checkReceiptAmount: data dw::core::Arrays::sumBy (e) -> if (e.paymentMode == "Cheque") e.amountCollected else 0,
ddReceipt: data dw::core::Arrays::countBy (e) -> e.paymentMode == "DD",
ddReceiptAmount: data dw::core::Arrays::sumBy (e) -> if (e.paymentMode == "DD") e.amountCollected else 0
},
receipt: data
}
Это последнее решение также можно сделать довольно гибким, чтобы вы не жестко программировали paymentMode
с.
Выберите тот, который вам нравится.