今回の記事では、Power Appsで作成したコレクションを複数キーワードで絞り込む(AND検索・OR検索)方法をお伝えします。
実現したいこと
AND検索・OR検索の具体的なイメージは下記の通りです。
前提・準備
データの準備
App > OnStartプロパティ に下記の式を入力します。
ClearCollect(
colRecipe,
{
RecipeTitle: "トマトとキャベツの和風サラダ",
RecipeDetails: "トマトとキャベツで作る簡単サラダです。さっぱりとした味わいで夏にぴったりです"
},
{
RecipeTitle: "キャベツのクタクタ煮",
RecipeDetails: "キャベツをじっくり煮込んだ一品です。簡単でごはんがすすみます"
},
{
RecipeTitle: "にんじんの爽やかサラダ",
RecipeDetails: "にんじんをオリーブオイルで和えたサラダです。すっぱさも病みつきになります"
}
)
開発中は、App > OnStartを実行します を押すとコレクションが作成されます。
コントロールの準備
「テキスト入力コントロール」・「空の垂直ギャラリー」・各種「テキストラベル」を配置します。
「空の垂直ギャラリー」の中のテキストラベルにはそれぞれ、「ThisItem.RecipeTitle」「ThisItem.RecipeDetails」を設定しています
OR検索
結論
「空の垂直ギャラリー」のItemsプロパティに下記の式を入力してください。
Filter(
colRecipe,
!IsEmpty(
Filter(
Split(
Substitute(
txtSearch.Text,
" ",
" "
),
" "
),
Value in RecipeTitle
)
)
)
※ ご自身のコレクションを利用する場合は、「colRecipe」(コレクション名)と「RecipeTitle」(検索する列名)を置き換えてご利用ください
解説
ざっくりとした流れは下記の通りです。
- 内側の「Split~ 」部分で、入力されたテキストを半角&全角スペースで分割して検索キーワード(複数)を取得
- 外側の「Filter~」部分で、検索キーワードのどれかが含まれている行をピックアップする
具体的には、検索キーワードが1つも含まれていない行は取得されず、1つでも含まれている行は取得されるという動きになります。
AND検索
結論
「空の垂直ギャラリー」のItemsプロパティに下記の式を入力してください。
Filter(
colRecipe,
CountRows(
Filter(
Split(
Substitute(
txtSearch.Text,
" ",
" "
),
" "
),
Value in RecipeTitle
)
) = CountRows(
Split(
txtSearch.Text,
" "
)
)
)
※ ご自身のコレクションを利用する場合は、「colRecipe」(コレクション名)と「RecipeTitle」(検索する列名)を置き換えてご利用ください
解説
ざっくりとした流れは下記の通りです。
- 内側の「Split~ 」部分で、入力されたテキストを半角&全角スペースで分割して検索キーワード(複数)を取得
- 外側の「Filter~」部分で、すべての検索キーワードが含まれている行をピックアップする
具体的には、「入力された検索キーワードの数」と「RecipeTitleに含まれている検索キーワードの数」を比較して、同数の場合のみ取得されるという動きになります。
これによって、すべての検索キーワードが含まれている行のみを取得するという動きを実現できます。
まとめ
コレクションを複数キーワード(半角&全角スペース区切り)で絞り込む方法をお伝えしました。
Filter関数とIsEmpty関数/CountRows関数を組み合わせることで、AND検索やOR検索を実現することができます。
式を見てすぐに理解するのは難しいと思いますので、手元で動かしながら確認いただければと思います。