我正在创建一个仪表板,它将根据用户选择的两个标准返回数据,在这种情况下,将根据他们所推荐的季度和计划返回进行推荐的机构。
棘手的是,我希望用户能够选择两个或其中一个条件进行搜索。也就是说,用户应该可以选择查看 2023 年第一季度为项目 A 推荐的所有机构,或 2023 年第一季度推荐的所有机构,或所有推荐过项目 A 的机构。由于每个时期/项目可能有多个机构,因此我使用了 FILTER 函数,而不是 V 或 XLOOKUP。
在发布我的尝试之前,让我先展示一下我最终尝试的版本:
=IF(AND($F$2<>"",$G$2<>""),(FILTER(Table4[机构],(Table4[会话]=仪表板!$F$2)*(Table4[程序]=仪表板!$G$2))),IF($F$2<>"",(FILTER(Table4[机构],(Table4[会话]=仪表板!$F$2))),IF($G$2<>"", (FILTER(Table4[机构],(Table4[程序]=仪表板!$G$2)))))
我的数据存储在一个表中以实现可扩展性,并且还有许多其他字段在其他地方被引用。
我开始
=FILTER(表 4[机构],(表 4[会话]=仪表板!$F$2)*(表 4[程序]=仪表板!$G$2))
当两个搜索词都存在时,使用 AND 逻辑来生成列表。
为了添加“或”逻辑,我认为我可以这样做:
=IFERROR((FILTER(表 4[机构],(表 4[会话]=仪表板!$F$2)*(表 4[程序]=仪表板!$G$2))), (FILTER(表 4[机构],(表 4[会话]=仪表板!$F$2)+(表 4[程序]=仪表板!$G$2)))
首先尝试过滤两个术语,然后如果两个术语都不存在,则进行“或”搜索;但是,让“或”类型搜索发挥作用很有挑战性,并导致返回大量结果,其中似乎将空白搜索词与表格的空白行进行匹配。
我的解决方案有效,但它似乎有点不稳定,我担心会对未来的可扩展性产生影响,所以我想知道是否有人有更好的解决方案。
答案1
这是实现此目的的一种方法。请考虑下表:
通过使用 VSTACK 函数堆叠简单的“*”,创建 2 个要在下拉列表中使用的列表,这些列表具有可在代理机构和会话中选择的唯一值:
通过添加链接到您创建的 2 个列表的下拉菜单,创建用户可以选择的 2 个过滤器。如果添加了新的机构/会话,您可以使用参考 $M$5# 自动扩展列表。
要使用两个过滤器过滤表格,您可以使用以下公式。在任一过滤器中选择“*”时,它将用作通配符。
=FILTER(Table[Item],ISNUMBER(SEARCH($F$2,Table[Agency])) * ISNUMBER(SEARCH($F$3,Table[Session])))
如果您需要添加另一个过滤器,只需像上面一样添加另一个 ISNUMBER() 元素即可。中间的 * 将充当“与”运算符。
此解决方案适用于任何组合,并且空过滤器也可用作通配符:
显然,您可以将列表存储在单独的隐藏工作表中。由于它们是动态的并且基于数据表的所有唯一值,因此它们会自动扩展,并且如果您添加新值,则无需进行修改。
获得过滤列表后,您还可以使用 XLOOKUP 从数据表中添加任何其他值,如下所示: