知识库

如何使用多个关键字按通配符搜索筛选数据


发布时间: 09 Apr 2021
上次修改日期: 19 Jun 2023

问题

如何创建单个通配符搜索筛选器,以允许按多个不连续的关键字进行搜索。

例如,在“quartz sphinx”上搜索应该返回“Sphinx of black quartz, judge my vow.”

环境

  • Tableau Desktop

答案

Tableau 中默认的通配符搜索行为是精确的短语匹配,这允许在短语的开头和/或结尾出现不匹配的文本。当维度包含太多值而无法滚动时,通配符搜索允许用户更快地将视图筛选为特定值。使用参数和计算,可以创建具有不同搜索行为的视图,这在其他用例中可能更有帮助,例如搜索潜在的重复项。

随附的示例工作簿(可从本文的右侧窗格下载)使用示例数据集 Superstore 来演示以下指导:
  1. 右键单击左侧数据窗格中的产品名称,然后选择创建参数...
  2. 在“创建参数”对话框中,执行以下操作,然后关闭对话框:
    1. 为参数命名。在本例中,该参数名为“搜索产品名称”
    2. 对于“允许的值”,选择“全部”
  3. 在数据窗格中右键单击搜索产品名称,然后选中显示参数
  4. 选择“分析”>“创建计算字段”
  5. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“产品名称搜索筛选器”
    2. 在公式字段中,创建将导致所需搜索行为的计算。下面是两个例子。

      AND - 筛选结果必须包括所有搜索词,其中搜索词由空格分隔
      [Search Product Name]=""
      //show everything if the parameter is blank, aka everything is TRUE
      OR (
          CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",1)))
          //if [Product Name] contains the first typed search term
          AND ( 
              SPLIT([Search Product Name]," ",2) = ""
              //if there isn't a second search term, just return TRUE
              OR CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",2)))
              //check that the second search term is also in [Product Name]
          )
          AND (SPLIT([Search Product Name]," ",3)="" OR CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",3))))
          AND (SPLIT([Search Product Name]," ",4)="" OR CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",4))))
          AND (SPLIT([Search Product Name]," ",5)="" OR CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",5))))
      )

      OR - 筛选结果必须包括至少一个搜索词,其中搜索词由空格分隔
      [Search Product Name]=""
      OR CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",1)))
      OR (
          NOT SPLIT([Search Product Name]," ",2)=""
          AND CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",2)))
      ) //If the 2nd search term is NOT blank and is contained in [Product Name] then return TRUE
      
      OR (NOT SPLIT([Search Product Name]," ",3)="" AND CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",3))))
      OR (NOT SPLIT([Search Product Name]," ",4)="" AND CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",4))))
      OR (NOT SPLIT([Search Product Name]," ",5)="" AND CONTAINS(LOWER([Product Name]),LOWER(SPLIT([Search Product Name]," ",5))))
      
  6. 产品名称搜索筛选器拖到筛选器功能区上。
  7. 在“筛选器”对话框中,选中“True”并单击“确定”
  8. 搜索产品名称参数中键入搜索词,然后按 Enter 来筛选视图。

其他信息

  • 该计算必须包括用户可以输入的搜索词数量的条件。在上面的例子中,如果用户输入超过 5 个搜索词,那么其他的搜索词将被忽略
  • 对于一些支持正则表达式的数据源,正则表达式计算可以自动检测搜索词的数量;但是正则表达式更复杂,Tableau 技术支持部门不支持它。一些可能有效的正则表达式计算如下:
    • [Regex String (OR)]   "(" + REGEXP_REPLACE([Search Product Name], ',', '|') + ")"
    • [Regex String (AND)]   "(?=.*" + REPLACE([Search Product Name], ',', ")(?=.*") + ").*"
    • [Regex Filter]   REGEXP_MATCH([Product Name], [Regex String...])
此文章是否已解决问题?