使用以下输入
number,fruit,colour,join_date,avginqty,avgoutqty
282,apple,red,today,3,2
282,apple,red,today,3,
282,banana,yellow,yesterday,,
282,banana,yellow,yesterday,1,
并使用以下脚本
%dw 2.0
output application/csv
import * from dw::core::Arrays
---
(payload groupBy (key,index) ->(key.number ++ key.join_date)) mapObject {
a: {
number: $[0].number,
fruit: $[0].fruit,
colour: $[0].colour,
join_date:$[0].join_date,
avginqty: ($.avginqty sumBy (if($ == "") 0 else $))/sizeOf($.avginqty) ++ " qty",
avgoutqty: ($.avgoutqty sumBy (if($ == "") 0 else $))/sizeOf($.avgoutqty) ++ " qty"
}
} pluck $
你会得到输出
number,fruit,colour,join_date,avginqty,avgoutqty
282,apple,red,today,3 qty,1 qty
282,banana,yellow,yesterday,0.5 qty,0 qty
在您之前的一个问题中(我已经回答了 4 个变体(其中一个场景确实解决了您的最后一个问题(如果输入有 qty 字符串作为数量的一部分)..但是您可以使用以下内容
输入
number,fruit,colour,join_date,avginqty,avgoutqty
282,apple,red,today,3 qty,2 qty
282,apple,red,today,3 qty,3 qty
282,banana,yellow,yesterday,2 qty,2 qty
282,banana,yellow,yesterday,1 qty,1 qty
脚本
%dw 2.0
output application/csv
import * from dw::core::Arrays
---
(payload groupBy (key,index) ->(key.number ++ key.join_date)) mapObject {
a: {
number: $[0].number,
fruit: $[0].fruit,
colour: $[0].colour,
join_date:$[0].join_date,
avginqty: ($.avginqty sumBy (if(($ splitBy " ")[0] == "") 0 else ($ splitBy " ")[0] as Number ))/sizeOf($.avginqty) ++ " qty",
avgoutqty: ($.avgoutqty sumBy (if(($ splitBy " ")[0] == "") 0 else ($ splitBy " ")[0] as Number))/sizeOf($.avgoutqty) ++ " qty"
}
} pluck $
输出
number,fruit,colour,join_date,avginqty,avgoutqty
282,apple,red,today,3 qty,2.5 qty
282,banana,yellow,yesterday,1.5 qty,1.5 qty
如果您想跳过 qty 为 "" 的行进行平均计算。虽然这可能会导致在边缘情况下除以零错误,其中所有行的数量之一为“”
avginqty: ($.avginqty sumBy (if($ == "") 0 else $))/(sizeOf($.avginqty filter $ != "")) ++ " qty",
avgoutqty: ($.avgoutqty sumBy (if($ == "") 0 else $))/(sizeOf($.avgoutqty filter $ != "")) ++ " qty"
避免DBZ错误
avginqty: if((sizeOf($.avginqty filter $ != "")) != 0) ($.avginqty sumBy (if($ == "") 0 else $))/(sizeOf($.avginqty filter $ != "")) ++ " qty" else "",
avgoutqty: if((sizeOf($.avgoutqty filter $ != "")) != 0) ($.avgoutqty sumBy (if($ == "") 0 else $))/(sizeOf($.avgoutqty filter $ != "")) ++ " qty" else ""
配置了不同输入的屏幕截图。 (所有值)