如何在Azure Logic Apps中高效实现数组条件分组求和与去重?
基于Azure Logic Apps原生功能的高效多字段分组求和方案
需求明确
需要对数组对象按name和condValue的组合分组,每组内累加value字段值。
输入示例:
[ { "name": "alfons", "value": 100, "condValue": "D90" }, { "name": "alfons", "value": 300, "condValue": "D10" }, { "name": "alfons", "value": 200, "condValue": "D90" }, { "name": "max", "value": 600, "condValue": "D90" }, { "name": "max", "value":100, "condValue": "D90" } ]
期望输出:
[ { "name": "alfons", "value": 300, "condValue": "D90" }, { "name": "alfons", "value": 300, "condValue": "D10" }, { "name": "max", "value": 700, "condValue": "D90" } ]
高效实现步骤
1. 生成唯一分组键(Select操作)
先通过Select把每个原始对象转换成带组合分组键的结构,用name+双竖线+condValue作为唯一标识,避免字段值本身含特殊字符导致的分组冲突。
配置细节:
- 输入源:你的原始数组
- 映射规则:
groupKey: 表达式写concat(item()?['name'], '||', item()?['condValue'])name:item()?['name']condValue:item()?['condValue']value:item()?['value']
2. 按分组键聚合求和(Group By操作)
用Logic Apps自带的Group By操作直接完成分组求和,这一步是性能核心,替代嵌套循环的低效逻辑。
配置细节:
- 输入源:步骤1输出的数组
- 分组依据:选择
groupKey字段 - 聚合设置:
- 名称填
totalValue - 操作类型选
Sum - 目标字段选
value
- 名称填
3. 整理成目标格式(Select操作)
最后用Select把分组后的结构转换成你要的输出格式,去掉临时的groupKey,把求和后的totalValue重命名为value。
配置细节:
- 输入源:步骤2输出的分组结果
- 映射规则:
name:first(item()?['items'])?['name'](同组内的name必然一致,取组内第一个对象的name即可)condValue:first(item()?['items'])?['condValue']value:item()?['totalValue']
方案优势
- 全程仅用3个原生操作,无嵌套循环,大幅减少不必要的数组遍历次数
Group By是Logic Apps内部优化的聚合逻辑,性能远优于手动循环判断- 分组键确保每个
name+condValue组合只生成一条结果,彻底避免重复输出
内容的提问来源于stack exchange,提问作者PorcoRosso
相关产品推荐
相关产品推荐

