如何筛选SharePointList,在Gallery中仅显示各采购订单的未完成最小工序
需求说明
我有一个大型SharePoint列表,包含PurchaseOrder(采购订单)、WorkingStep(工序)、Technology(工艺)、**Completed(完成状态)**字段。每个采购订单对应多个工序,多数订单已完成(Completed = true)。需要在Power Apps的Gallery控件Items属性中实现以下筛选逻辑:
- 只展示未完成的工序(
Completed = false) - 每个采购订单仅保留未完成工序里最小WorkingStep对应的条目(同一最小工序下的多工艺条目全部保留)
举个例子:采购订单3的工序1已完成,未完成的工序里最小的是2,所以只保留工序2的两个条目,工序3不显示;采购订单1的未完成工序最小是1,仅保留工序1的条目。
解决方案
可以用以下两种Power Apps公式实现,直接复制到Gallery的Items属性中即可:
写法一:嵌套查询
Filter( SharePointList, Completed = false, WorkingStep = LookUp( GroupBy( Filter(SharePointList, Completed = false), "PurchaseOrder", "OrderSteps" ), PurchaseOrder = ThisRecord.PurchaseOrder, Min(OrderSteps, WorkingStep) ) )
写法二:用With优化性能(推荐)
With( { // 先筛选所有未完成工序,按采购订单分组 UnfinishedGroups: GroupBy( Filter(SharePointList, Completed = false), "PurchaseOrder", "GroupedItems" ), // 计算每个订单的最小未完成工序号 OrderMinSteps: ForAll( UnfinishedGroups, { PurchaseOrder: PurchaseOrder, MinStep: Min(GroupedItems, WorkingStep) } ) }, // 最终筛选:未完成 + 工序号等于对应订单的最小未完成工序号 Filter( SharePointList, Completed = false, LookUp(OrderMinSteps, PurchaseOrder = ThisRecord.PurchaseOrder, MinStep) = WorkingStep ) )
公式解释
- 第一步:筛选未完成工序
用Filter(SharePointList, Completed = false)先过滤出所有待完成的工序条目,减少后续计算量。 - 第二步:计算每个订单的最小待完成工序
通过GroupBy按采购订单分组,再用Min函数提取每组中最小的WorkingStep,得到每个订单对应的首个待完成工序号。 - 第三步:最终筛选
再次过滤原列表,只保留未完成且工序号等于对应订单最小待完成工序号的条目,正好匹配需求中的加粗显示条目。
结果验证
按公式筛选后,Gallery将只展示以下条目:
| PurchaseOrder | WorkingStep | Technology | Completed |
|---|---|---|---|
| 1 | 1 | milling | false |
| 2 | 2 | drilling | false |
| 3 | 2 | cutting | false |
| 3 | 2 | milling | false |
内容的提问来源于stack exchange,提问作者question12
相关产品推荐
相关产品推荐

