ギャラリーにFilterを適用する際のきれいな書き方を学んだので、これまで試行錯誤してきたフィルターのかけ方とその問題点も含めてメモ。
前提
こんなリストがあって、
こんな感じのアプリで色々な要素でフィルターをかけることを考えてみる。
このとき、
ある要素のコンボボックスが空であればその要素ではフィルターをかけないこととする。
※例を単純にするため、すべてのコンボボックスは単数選択のみ(複数選択不可)にしています。
試行錯誤1:一生懸命if文
Power Apps学びたての頃からけっこう最近までこんな感じでif文を一生懸命書いてフィルターを作っていて、
※書くのが大変なので、今回は2つの要素(ユーザーと数字)まででギブアップ。。。
こんな感じでちゃんとフィルターもかかるんだけど、
問題点は言うまでもなく可読性の低さとメンテナンス性の悪さ。。。
if文がどんどん増えていくので作るのも大変だし、同じような式が色んなところに出てしまうので修正するのも大変。
¥109,800
(2024/12/25 00:00 時点)
¥289,800¥319,800
(2024/12/25 00:00 時点)
¥15,957¥21,999
(2024/12/25 00:00 時点)
¥22,800¥28,081
(2024/12/25 00:00 時点)
試行錯誤2:とりあえず変数に入れてみる
続いて考えたのが変数を使ってきれいに書けば見やすいんじゃない?的な方法。
※もちろんコレクションでもOK
画面にこんな感じで見えないボタンを作成し、そのOnSelectでこんな感じで順次フィルターをかけていく。
そのOnSelect処理を画面のOnVisibleとか、
フィルターをかける各コントロールのOnChangeで呼び出してあげて、
作成した変数をギャラリーのItemsに入れてあげれば、
こんな感じでフィルターはきちんとかかってくれる!
見やすいし修正しやすいし悪くない、そんなふうに考えていた時期が俺にもありました
改めて考えるとこの方法にも大小問題があるんだけど、一番の問題は「データ行の制限」にひっかかることかなと。
一度変数に代入しちゃっているのでギャラリーの便利な読み込み機能が使えず、たくさんレコードがあるデータソースを対象にすると(既定の設定では)上位500件のデータしか表示できない。
今回学んだ方法:Filter関数の論理式の判定方法をうまく使う
で、これらを踏まえて今回学んだ方法は、Filter関数の論理式を上手に使う方法。
実はFilter関数の第2引数以降の論理式でデータソースの値を必ずしも参照する必要はないそうで、Filter関数の仕様はある行(レコード)に対してその論理式を評価してみた結果が「true」であればその行を取得してくる、となっている。
極端に言うと、こんな感じでFilterの論理式を書けば全ての行を取得してくるし、
こんな感じで書くと行を1つも持ってこない。
※もちろんこんな論理式を書くと、きちんとデータソースの値を見なさい!と警告が出るけど
で、こんなFilter関数の仕様を使って今回のフィルターを作ってみると、こんな感じになる。
例えばUserCombobox_2でユーザーが選択されていないければ(IsBlank(UserCombobBox_2.Selected)がtrueであれば)、orの右側の式(|| UserComboBox_2.Selected.Mail = User.Email)は評価されず、すべての行の評価がtrueになってくれるので、この論理式はすべての行が突破してくれる。
この方法を使えば空であればフィルターしない!という式をFilter関数だけで書くことができるので、かなりすっきりとした式を書くことができる。
その上ギャラリーに直接データソースを指定しているので「データ行の制限」も気にする必要なし!
※もちろん委任の警告が出ないように書くこと
結果もこんな感じでフィルターがきれいにかかるので、今のところきれいにフィルターをかけるおすすめの方法はこれかなと。
おまけ:委任についての記事
Power Apps 委任とデータ行の制限(500件~2000件)の関係を図にまとめてみた
これまで委任とデータ行の制限(既定は500件)が絡まると、いまいち理解がこんがらがってしまっていたけど、改めて図にしてみるとわかりやすかったのでメモ。前提前提として今回はこんなリストがあって、このリストを、わかりやすいようにデータ行の制限を...
Power Apps SharePointリストに対して委任できる操作を色々調べてみた|Dataverseに対して委任できる操作も
委任について詳しく調べる必要が出たので、その調査内容をメモ。委任について本当にざっくりとPower Appsにおける委任(delegation)とは、FilterやLookUpなどの処理を、Power Apps側ではなくデータベース側でやっ...
Power Apps AddColumnsと委任の関係|DropColumnsやShowColumnsもギャラリーの表示は500件まで
ギャラリーに対してAddColumnsを使っているとき前々から微妙な違和感があって色々と調べてみたところ、おもしろい記事をいくつか見つけたのでメモ。今回見つけた記事今回見つけた記事がこちら。結論から言うとどうやらAddColumnsは委任で...
コメント