如何用Power Automate查找SharePoint列重复值并更新最新重复项
我有一个SharePoint列表,其中某列存在重复数值(包括同时创建的重复项),需要通过Power Automate查询该列所有重复值,并更新最新创建的重复项的值,目标是获取最新重复项的ID并修改其值。

已尝试的操作步骤
- 步骤1:执行
Get items操作获取列表数据 - 步骤2:使用
Select操作尝试排序数据:sort(body('Select'),'sortby'))
- 步骤3:使用
Compose操作生成索引范围:range(0,length(outputs('Compose_2')))
- 步骤4:使用
Select 2操作标记重复项:addProperty( outputs('Compose_2')?[item()], 'IsDuplicate', if( equals( outputs('Compose_2')?[item()]?['concat'], outputs('Compose_2')?[sub(item(),1)]?['concat']), 'T','F' ) )
当前问题
上述操作中,即使是非重复项,IsDuplicate字段也会返回'T',无法正确标记重复项。
问题根源与解决方案
核心问题
- 索引越界无判断:当索引为0时,
sub(item(),1)会得到-1,此时outputs('Compose_2')?[-1]?['concat']返回null,若当前项的concat值为null或逻辑异常,会误判为重复。 - 排序逻辑不完整:未按重复列分组后再按创建时间排序,无法保证相同值的项集中且最新项处于可识别位置。
修正方案(推荐)
步骤1:提取关键字段
执行Get items后,添加Select操作提取所需字段(需包含重复列、ID、Created):
{ "目标列": item()?['目标列内部名称'], "ID": item()?['ID'], "Created": item()?['Created'] }
步骤2:按重复列分组
添加Compose操作,用groupBy函数分组:
groupBy(body('Select'), '目标列', 'Items')
步骤3:筛选重复分组
添加Filter array操作,筛选出包含多个项的分组:
length(item()?['Items']) > 1
步骤4:处理重复组并更新
添加Apply to each遍历筛选后的分组:
- 对组内项按
Created降序排序(确保最新项在首位):sort(item()?['Items'], 'Created', descending) - 筛选出除最新项外的重复项(或直接取最新项ID,根据需求调整):
not(equals(indexOf(outputs('排序后的组项'), item()), 0)) - 执行
Update item操作,用筛选出的项ID修改目标列值。
原有逻辑快速修复
若想保留原有思路,需在Select 2中添加索引边界判断:
addProperty( outputs('Compose_2')?[item()], 'IsDuplicate', if( and( greater(item(), 0), // 排除第一个项(索引0) equals( outputs('Compose_2')?[item()]?['concat'], outputs('Compose_2')?[sub(item(),1)]?['concat'] ) ), 'T', 'F' ) )
同时确保Compose_2中的数据先按重复列排序,再按创建时间降序排序,保证相同值的项集中且最新项在每组最前。
内容的提问来源于stack exchange,提问作者adc
相关产品推荐
相关产品推荐

