ナレッジベース

複数のキーワードによるワイルドカード検索でデータをフィルターする方法


発行: 09 Apr 2021
最終修正日: 19 Jun 2023

ご質問

連続していない複数のキーワードによる検索を可能にする単一のワイルドカード検索フィルターを作成する方法。

たとえば "quartz sphinx" の検索は "Sphinx of black quartz, judge my vow" が返されます。

環境

  • Tableau Desktop

回答

Tableau の既定のワイルドカード検索動作は、フレーズ完全一致であり、これはフレーズの先頭、末尾、またはその両方の不一致のテキストを許可できます。ワイルドカード検索により、ディメンションに含まれる値が多すぎてスクロールできない場合に、ユーザーがすばやくビューを特定の値にフィルターできます。パラメーターと計算を使用すると、可能性のある重複の検索など、他の使用事例でより役立つ可能性がある検索動作が異なるビューを作成できます。

添付されたサンプル ワークブック (この記事の右側のペインからダウンロード可能) では、Superstore (スーパーストア) サンプル データ セットを使用して、次の手順を示しています。
  1. 左側のデータ ペインで [Product Name (製品名)] を右クリックし、[パラメーターの作成...] を選択します。
  2. [パラメーターの作成] ダイアログで、次の操作を行い、ダイアログを閉じます。
    1. パラメーターに名前を付けます。この例では、パラメーターに "Search Product Name (製品名の検索)" という名前が付けられています。
    2. [許容値] で [すべて] を選択します。
  3. データ ペインの [Search Product Name (製品名の検索)] を右クリックし、[パラメーターの表示] を選択します。
  4. [分析] > [計算フィールドの作成] を選択します。
  5. 開いた [計算フィールド] ダイアログ ボックスで次の操作を行い、[OK] をクリックします。
    1. 計算フィールドに名前を付けます。この例では、計算フィールドに "Product Name Search Filter (製品名検索フィルター)" という名前が付いています。
    2. 式フィールドで、目的の検索動作になる計算を作成します。以下に 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 - フィルターの結果には、検索用語がスペースで区切られた少なくとも 1 つの検索用語が含まれている必要があります
      [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. [Product Name Search Filter (製品名検索フィルター)][フィルター] シェルフにドラッグします。
  7. [フィルター] ダイアログで [True] をチェックし、[OK] をクリックします。
  8. [Search Product Name (製品名の検索)] パラメーターに検索用語を入力し、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...])
この記事で問題は解決しましたか?