如何使用DataWeave 2.0按指定列聚合HH:MM格式的项目工时数据
DataWeave按项目汇总HH:MM格式工时解决方案
核心处理逻辑如下:
- 编写辅助函数将
HH:MM格式的字符串转换为总分钟数,用于数值聚合运算 - 按
jobName字段对所有工时记录分组 - 对每个项目分组的总分钟数求和
- 编写反向转换函数将汇总后的总分钟数转回
HH:MM格式,不足两位自动补前导零
完整DataWeave 2.0脚本
%dw 2.0 output application/json // 转换HH:MM格式为总分钟数 fun timeToMinutes(timeStr: String): Number = (timeStr splitBy ":" map ($ as Number)) reduce ((item, acc=0) -> acc * 60 + item) // 转换总分钟数为HH:MM格式,自动补前导零 fun minutesToTime(totalMinutes: Number): String = do { var hours = (totalMinutes / 60) as Number {format: "00"} var minutes = mod(totalMinutes, 60) as Number {format: "00"} --- "$(hours):$(minutes)" } --- payload.response.result groupBy $.jobName mapObject ((value, key) -> (key): minutesToTime(sum(value map timeToMinutes($.hours))) )
输出结果
运行上述脚本即可得到期望的输出:
{ "Project1": "19:00", "Project2": "10:00", "Project3": "06:00" }
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

