「複数ワードでの検索ボックスを追加」(Power Apps)
〜Search By multiple KeyWord〜

複数ワードでの検索ボックスを追加する。

Gellery の ItemのSearch関数を複数対応に変更しましょう。
Search(Search(Search(Search(
  データソース,
   Last(FirstN(Split(TextInput_Search.Text," "),4).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),3).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),2).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),1).Result).Result,"列1","列2","列3")

《動作イメージ》

  検索:複数対応済     非対応(Search関数1つ)

複数ワードでの検索ボックスを追加する。 詳細

上記のgif イメージで紹介しているようにSearch関数が1つしか入っていない場合は、1つの単語しかフィルターをかける事が出来ません。
Search関数が1つの場合は、スペースも含んだ1つの検索語で検索しようとする為に、該当するアイテムが無く、検索結果がブランクとなってしまいます。

この記事では、「複数のSearch関数」+「Split関数による検索ワードの分割」によって複数の検索単語によるフィルタ−を可能にします。

STEP 1. 検索をギャラリーにかける為の基本構成の構築 (入門テクニック)


①[TextInput]を挿入。
 名前;TextInput ➡︎ TextInput_Search
 Default;空白に
 HintText;”検索はこちら”

②[ギャラリー]の挿入、Itemを変更。
 Items;データソース
      ➡︎ Search(データソース,TextInput_Search.Text,列1,列2,列3)
  ※検索対象のデータソース列を「列1,列2,列3」に選び、[TextInput]に入力したワードで検索可能。

STEP 2. Search関数を複数語での検索に、 (今回の本題です。)

②[ギャラリー]
 Items;➡︎ のItemを先ほどのSearch関数から下記の数式に変更して下さい。
 元々のデータソースがSearch関数を繰り返す事で複数のキーワードに絞り込まれていきます。
※今回は4つのキーワードに対応する様に、4つのSearch()に[Last], [FirstN], [Split]関数を組み合わせています。検索語の数を4つ以上に増やしたい場合は、Searchの数と数字が合う様に増やす事で対応可能です。

Search(Search(Search(Search(
  データソース,
   Last(FirstN(Split(TextInput_Search.Text," "),4).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),3).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),2).Result).Result,"列1","列2","列3"),
   Last(FirstN(Split(TextInput_Search.Text," "),1).Result).Result,"列1","列2","列3")


以上です。 ぜひ試してみて下さい。

Split関数によるTextInputの分割処理 解説

Split関数を使用して[TextInput]の中身を分割しています。
    Split(TextInput_Search.Text," ")
今回は検索で一般的に使用される[スペース]を元に分割の処理を行っています。Power Appsの中では、Splitのリザルトとして、データ型:テーブルで一時処理されています。

[半角スペース]と[全角スペース]分けて処理が行われる為、日本語での検索が多いか、英語での検索が多いかで使い分けると良いです。
数式が複雑になりますが、[半角スペース]と[全角スペース]それぞれで分割する事で、両方に対応することも可能です。

Last関数とFirstN関数の組み合わせ処理 解説

先ほどのSplit関数によって、検索ワードが分割され、テーブル型でキーワードが保存されています。
その為、テーブルの中の値を順番にSearch関数の検索ワードとして取り出す必要があります。
    Last(FirstN([Split処理後のテーブル],2).Result).Result
FirstN([Split処理後のテーブル],カウント).Result
  FirstN関数を使用することで、カウントで指定したN番目までのキーワードまでのテーブル型として取り出す事が出来ます。
     FirstN([テーブル]).Result ⬅︎ Split関数後のテーブルがResultという列の中に保存されている為必要となります。
 例)カウント2の場合。上位2つ目までのテーブルに範囲が制限されます。

Last([FirstN後のテーブル]).Result
  Last関数はテーブルの最後のキーワードを取得出来ます。先ほどのカウント2を例にすると、②番目のキーワード「Power」が結果として取得されます。
 先ほどと同様、.Resultで括る事で、テキスト型の2番目のキーワードが取得できます。

コメント

  1. www より:

    Great post. I used to be checking continuously this blog
    and I’m impressed! Very helpful information particularly the
    final phase 🙂 I handle such information a lot. I used to be looking for this certain information for a very long time.
    Thanks and best of luck.

タイトルとURLをコピーしました