-2

首先提前感谢。

在发布此之前,我已经搜索并尝试了来自多个来源的一些指南。但是,构造公式字符串没有成功。使用 Query + 其他功能过滤 Google 表格 (GS) 中的数据对我来说是新事物,我仍在学习。

目标: 使用下拉菜单和 2 种类型的复选框(数据类型:文本和真/假)。用户可以选择一个或多个复选框来过滤数据。

问题: 未能成功构造公式字符串以组合下拉和复选框

我的 GS 示例取自一个解决方案,该解决方案使用简单的公式字符串作为复选框(数据类型:True/False)来创建过滤器,并希望我可以从中开发。

我的 Google 表格链接

再次感谢!

4

2 回答 2

0

这似乎可以满足您的要求。在结果表的 E6 中尝试以下公式。或者查看我添加到您工作表中的标签 Answer-GK。

=iferror(if(or(C5:C13),
            QUERY ('Test string DB'!A3:H12, "Select * WHERE "  &
                           IF(B2="","C <>'' "," C = '"&B2&"'") &
                           IF(C5,   " and D matches '" & B5    & "' ",) &
                           IF(C6,   " and D matches '" & B6    & "' ",) & 
                           IF(C7,   " and D matches '" & B7    & "' ",) &  
                           IF(C8,   " and E matches '" & B8    & "' ",) &  
                           IF(C9,   " and E matches '" & B9    & "' ",) &  
                           IF(C10,  " and E matches '" & B10   & "' ",) &  
                           IF(C11, " and F=TRUE", )            &
                           IF(C12, " and G=TRUE", )            &
                           IF(C13, " and H=TRUE", )),
            QUERY ('Test string DB'!A3:H12,"select * " & if(B2=""," "," where C = '"&B2&"'") ,0)),
  "No results - Reduce your selected criteria")

有什么要注意的。由于您的某些数据元素具有专用列,而其他数据元素是共享列,因此它限制了您可以过滤的内容。例如,您找不到一个有海滩和湖泊的露营地,因为您的数据只允许您拥有一个或另一个元素。

访问相同 - 它不能同时是步行和 4WD。因此,如果您选中两个或多个复选框,无论是功能还是可访问者,都不会得到任何结果。Ammenities 没有这个问题,因为您有一个单独的列(数据元素)用于每个淋浴、厕所和插头。我希望这是有道理的,我假设您可能希望扩展您的数据结构以允许多个元素,就像您对便利设施所做的那样。在这种情况下,需要修改公式。

但除此之外,我认为它正在按您的预期工作。

让我们知道这方面的任何问题。

更新:

为了改善外观,我修改了“TRUE”值以显示为“Y”,使用 J 到 L 中的隐藏列,以及 M5 中的以下公式。还有其他方法可以做到这一点。

={"Toilet","Shower","Plugpoint";
  arrayformula(if(J6:L,"Y",""))}

这将添加三个标题标签,然后在列 J、K、L 中查找 TRUE 值,并将它们作为“Y”返回。

在此处输入图像描述

于 2020-10-27T21:01:42.650 回答
0

我假设您希望“功能”和“无障碍”复选框具有包容性,而“便利设施”则具有独占性。这是一个工作示例:

https://docs.google.com/spreadsheets/d/1AqQCKRrhTzJyLWldcpeFAv1o4sLvphv3F52VCgpa4rE/edit?usp=sharing

这是E6中的公式:

=iferror(QUERY(QUERY('Teststring DB'!A3:H12,"select * where C = """&B2&""" AND (D =  """& if(C5 = true,B5,"")&""" OR D = """& if(C6 = true,B6,"")&""" OR D =  """& if(C7 = true,B7,"")&""") OR (E =  """& if(C8 = true,B8,"")&""" OR E = """& if(C9 = true,B9,"")&""" OR E =  """& if(C10 = true,B10,"")&""") ",0),"select * " & if(C11 = true,"where Col6 = true","")&" " & if(C12 = true,if(C11 = true,"AND Col7 = true","where Col7 = true"),"")&" " & if(C13 = true,if(or(C11 = true,C12 = true),"AND Col8 = true","where Col8 = true"),"")&" ",0),QUERY('Teststring DB'!A3:H12))
于 2020-10-27T22:14:38.837 回答