LoginSignup
11
14

More than 1 year has passed since last update.

Power AppsのFilterテクニックの補足

Last updated at Posted at 2021-09-16

はじめに

Microsoft Business Applications MVPでYouTube等で人気のReza Dorraniによる、Power AppsのFilterに関するチュートリアル動画、PowerApps Multiple Filters on Gallery - YouTubeについて、
03:45 - Filter on Choice column (single-select filter)
あたりのコンボボックスの設定で、何も選択されていない時にGalleryに全てのアイテムを表示するテクニックについて補足します。

前提

  • 動画はデータベースをDataverseにしています。以下の私の説明はSharePointのリスト(Microsoft Lists)を使っています。
  • DataverseとMicrosoft Listsでは、カラム名の指定の記載方法が微妙に違うことがあります(微修正すればOK)
  • 委任の制限は以下考慮の対象外とします。

テーブルの概要

図の通りです。
image.png

テキスト入力での検索

 まずは、テキスト入力によって絞る部分です。

image.png

"OData_x30e1x30e2"は、リストの列名を最初、日本語名で作成した場合に内部名としてエンコードした文字列になっています。「メモ」の列名の内部名を確かめるには、Micrsofot Listsの右上のギアマーク > [リストの設定]から列名「メモ」を選択し、そのURLの&Field=で確認します。

image.png

コンボボックスで未選択の場合にリスト全部を表示する

 さて、本題のコンボボックスについてです。ビフォーは
image.png
となっているところのテーブル名「'YouTube タイムスタンプ'」

ビフォー
    'YouTube タイムスタンプ',

をアフターとして、Filter関数に書き換えます。

アフター
    Filter(
        'YouTube タイムスタンプ',
        IsBlank(cbGroupFilter.Selected.Value) || IsEmpty(cbGroupFilter.SelectedItems) || グループ.Value = cbGroupFilter.Selected.Value
    ),

image.png

テキストではこちら
Search(
    Filter(
        'YouTube タイムスタンプ',
        IsBlank(cbGroupFilter.Selected.Value) || IsEmpty(cbGroupFilter.SelectedItems) || グループ.Value = cbGroupFilter.Selected.Value
    ),
    txtNameFilter.Text,
    "OData__x30e1__x30e2_"
)

Filterの3つの評価される数式の3つめ

Docsの説明では

Filter(Table*, Formula1 [, Formula2, ... ] )

のFormula1です。3つの式が または(||)で並んでいます。3つめが一番わかりやすいですね。

グループ.Value = cbGroupFilter.Selected.Value

のように、リストの列名がコンボボックスで選択されたものと一致した場合です。ではもし、この3つめのみだったら、どのような結果になるでしょうか?
image.png

Galleryの結果に注目してください。1行目、2行目にあった
image.png

がリストされていません。

3つめの数式のみの場合
    グループ.Value = cbGroupFilter.Selected.Value

で、コンボボックスではまだ何も選ばれていない(=空の文字列)なので、1行目、2行目は除外され、列名「グループ」が空のものだけが表示されている状態です。

このようなことがあるので、未選択の場合に、全部を表示するために、1つめと2つめの数式の処理をまたは*で入れておきます。

1つめの数式 IsBlank

1つめの数式のみの場合
    IsBlank(cbGroupFilter.Selected.Value)

cbGroupFilter.Selected.Valueは、3つめと同じですね。要は、コンボボックスで1つも選ばれていなくて値が空の文字列になっている場合や、もし、コンボボックスの選択肢に空の文字列がある場合、IsBlankの評価結果はTrueになるので、結果として全部のアイテムが表示されます。

2つめの数式 IsEmpty

2つめの数式のみの場合
    IsEmpty(cbGroupFilter.SelectedItems)

IsEmptyは、テーブルにレコードが含まれているかどうか(Cowntrowsの結果が0かどうか)を調べていて、0ならばTrueで結果として全行でます。コンボボックスの選択をしていなければ0ですから、結果はTrueになり、こちらも1つめと同じ結果として全部のアイテムが表示されます。

以上の3つ数式がまたは||で並んでいるので、コンボボックスが未選択の初期状態では確実に全部のリストを表示する、というわけです。

image.png

使用した関数

(関連事項)委任(Delegation)に関して

 今回の説明の範囲外ですが、動画の中には委任の話がでてきます。委任については、以下のDocsや有用なブログ等をご覧ください。
- キャンバス アプリでの委任について - Power Apps | Microsoft Docs
- SharePoint の機能と操作 - Power Apps | Microsoft Docs
- Dataverse の機能と操作 - Power Apps | Microsoft Docs
- PowerApps 委任とデータ行の制限(500件~2000件)の関係を図にまとめてみた
- PowerApps SharePointリストに対して委任できる操作を色々調べてみた | 仕事のあれこれ
- 【ほぼ不要になりました】PowerAppsで遭遇する5つの委任問題とちょっと強引な回避方法(SharePointリスト利用時)その1 - Qiita

おわりに

 理解が浅く、なかなか行動が遅かった、Power AppsのFilter関係について、この動画の理解でだいぶスッキリ感がでてきました~
今回は対象外ですが、委任の考え方も大事ですね~

11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14