Canvas应用中使用Power Fx筛选多对多关系的问题求助
问题场景
我有两个表Vehicle和Vehicle Features,二者为多对多(N:N)关系。设置了一个多选组合框comFeatures用于选择Vehicle Features,点击搜索按钮后,需要筛选出具备所选特征的Vehicle并显示在availableVechilesGallery画廊中。
当前报错:Specified Column is Not Accessible in this Context(指定列在此上下文不可访问),尝试的两段Power Fx代码均无效:
// 无效代码1 ForAll(Vehicles, Collect(filteredFeatVehicles,ThisRecord.'Vehicle Features' in comFeatures.SelectedItems)); // 无效代码2 ClearCollect(filteredVech, Filter(Vehicles, 'Vehicle Features'.Name in comFeatures.SelectedItems.Name));
解决方案
多对多关系在Power Apps中不能直接像单字段那样对比,得用集合的包含逻辑处理,分两种常用场景:
1. 筛选包含所有选中特征的车辆(最常用需求)
如果要求车辆必须具备用户选的每一个特征,用这段代码:
ClearCollect(filteredVech, Filter(Vehicles, CountRows( Filter(comFeatures.SelectedItems, Not(ThisRecord in 'Vehicle Features') ) ) = 0 ) );
逻辑:对每辆车,检查选中的特征里有没有不在该车关联列表里的,要是没有(计数为0),就说明这车具备所有选中特征,留进结果集。
2. 筛选包含任意选中特征的车辆
如果只要车辆有至少一个选中特征就行,用这段代码:
ClearCollect(filteredVech, Filter(Vehicles, CountRows( Filter('Vehicle Features', ThisRecord in comFeatures.SelectedItems ) ) > 0 ) );
逻辑:对每辆车,检查它关联的特征里有没有和选中特征重叠的,重叠数大于0就说明符合条件,留进结果集。
原代码报错原因
- 第一段代码:
ThisRecord.'Vehicle Features'是集合,in运算符没法直接对比两个集合,逻辑不成立 - 第二段代码:
'Vehicle Features'.Name试图直接访问多对多关系的字段,但多对多关系返回的是集合,不能直接通过.Name取单个值,必须用集合筛选处理
内容的提问来源于stack exchange,提问作者Prashant Pokhrel
相关产品推荐
相关产品推荐

