【问题标题】:How to aggregate data with particular column using dataweave 2.0如何使用 dataweave 2.0 聚合具有特定列的数据
【发布时间】:2021-08-27 19:27:18
【问题描述】:

我有一个包含项目的有效负载和特定员工的小时数详细信息。我想编写一个数据编织来根据项目合并小时数。由于小时数格式不是数字并且具有不同的格式(例如 02:00),我无法汇总小时数。 输入:

{
    "response": {
        "result": [
            {
                "jobName": "Project1",
                "hours": "08:00"
            },
            {
                "jobName": "Project1",
                "hours": "08:00"
            },
            {
                "jobName": "Project1",
                "hours": "03:00"
            },
            {
                "jobName": "Project2",
                "hours": "08:00"
            },
            {
                "jobName": "Project2",
                "hours": "02:00"
            },
            {
                "jobName": "Project3",
                "hours": "06:00"
            }
        ]
    }
}

预期输出:

 {
        "Project1" : "19:00",
        "Project2" : "10:00",
        "Project3" : "06:00"
    }

提前致谢

【问题讨论】:

    标签: dataweave mule4


    【解决方案1】:

    分解问题。您需要将字符串转换为数字;在这种情况下,最简单的数字是总分钟数。然后你需要将它们全部相加......最后将它们转换回来,但要跳水 60,失去余数,然后进行取模。请记住将数字格式化为字符串,以便我们得到 0 填充。

    %dw 2.0
    import sumBy from dw::core::Arrays
    output application/json
    
    fun hoursToMinutes(hours: String) : Number =
        (hours[0 to 1] as Number * 60) + (hours[3 to 4] as Number)
    
    fun minutesToHours(minutes: Number) : String = 
        "$(floor(minutes / 60) as String { format: "00" }):$((minutes mod 60) as String {format: "00"})"
    
    fun sumHours(hours) : Number = 
        hours sumBy hoursToMinutes($.hours)
    ---
    payload.response.result 
        groupBy $.jobName 
        mapObject ($$): minutesToHours(sumHours($))
    

    编辑:将sumHours 更改为hours sumBy hoursToMinutes($.hours) 以提高可读性; sumBy 也在做 reduce,所以除了可读性之外没有任何好处。

    【讨论】:

    • 谢谢,迈克尔。它符合我的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2016-07-04
    • 2019-01-09
    • 2021-06-16
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多