大量データマスタ プルダウン表示について(コンボボックス)

はじめに

今回は他のマスタテーブルのデータをプルダウン系で表示する際のTipsです。
少量マスタの場合は対して気にせずよいですが、大量データのマスタを参照する際は制限が出てくるので
そのあたりの実装のサンプルをご紹介します。

大量のマスタデータ(サンプルでは5万件)

ではさっそく大量のマスタデータを用意します。
この点は既存のマスタがあればいいですが、検証用にエクセルから入れるPowerShellから入れる、普通に入れるなどご用意ください。

今回検証した際のエクセルからインポートは備忘録として記事を書きましたので、そちらもご参考ください。

サンプル用に用意した大量データ5万件のSPOリストが以下です。内容は適当です。

ドロップダウンで表示は500件まで

上記をドロップダウンコントロールで表示してみます。
ドロップダウンだと入力指定がコントロール単体ではないので、そのまま適用する場合は上位500件が表示されます。以下は表示されません。

TIPS他の情報を絡めてフィルターしたデータを表示ということであればOKです。
上記の場合、フィルターなしにそのまま適用した例です。

500件までしか表示されない

データ行制限を500から2000まで上げても500までしか取れません

「アイテムの最大数に達しました。」となります。

データ行制限をあげても500までしか取れない

ドロップダウンはそもそも検索機能もないので500以下が現実的

そもそもドロップダウンは検索機能がないので、500以上あってもスクロールして探さなければいけません。
あくまでデータが少ない場合、他のコントロールの指定値でフィルターしたものを少数出すなどに適しています。

大量データマスタからの直接検索はコンボボックス

コンボボックスの場合は検索機能、複数選択機能もあるので大量マスタに対して検索して参照するにはこちらが適しています。

そのままの場合委任警告が表示されます。

NOTEただこの場合も注意が必要です。そのまま適用すると委任警告が表示されます。
データ行数制限の500~2000までしか取ってこれません。

TIPS委任警告が出るのは注意としてなので、データ件数が上限を越えないのであれば無視するでOKです!

コンボボックスを追加して上記の大量データマスタをItemsに指定してみます。
すると委任警告が出ます。表示させるとデータ行制限を2000までにしているとそこまでは取ってきてくれていますが、それ以上は出てきません。大量マスタの場合はこれだと正しく取得が出来ませんね。

委任警告が出ている

検索なしでスクロールすると2000件までは出てくれる。
検索も2000ならヒットしたが、それ以上はヒットしない。

データ行制限の2000までの取得で検索範囲のもの範囲

コンボボックスへの独自フィルターを実装する

上記の通りデータ行制限を超える件数の場合は影響があります。
その場合は通常のコンボボックスの検索機能をそのまま使わずにカスタムしてあげればフィルターしての取得が可能です。

Self.SearchTextでフィルターする

以下のようにコンボボックスのサーチテキスト(検索エリアへの入力値)がSelf.SearchTextで取れますので、
それでフィルターします。

※また例ではSPOですので、委任対象の前方一致を使っています。DataverseならSearchやInが使えるかと思います。

CodeFilter(LargeMaster,StartsWith(Tilte,Self.SearchText))

この状態でフィルターします。そうすると出てこなかった2000件以上先のデータもちゃんと取得出来ます。
最後の50000,50001までちゃんと取れていますね!

検索ワードにヒットするものをフィルターして取ってこれている。

NOTEStartswith関数なので前方一致の対応となっています。
もともとのコンボのフィルター機能だと部分一致に対応してくれてましたが、SPO版だとここはやむなしですね。

まだ警告が出ている(検索が空の場合に取ってきているから)

この状態でもまだ警告アイコンは出ています。検索エリアに未入力の場合には上位2000件まで取ってきているからですね。この分も無駄ですので調整します。

Code//検索が空の場合以外にフィルターして取ってくる実装に調整
If(!IsBlank(Self.SearchText),
Filter(LargeMaster,StartsWith(Tilte,Self.SearchText)))

そうすると以下のように警告が消えます。
検索未入力の状態だと何も表示されないようになります。
※上位の項目が出てくるのはもともと無駄なのでその分のパフォーマンスも低減する

検索エリアに入力すると検索が出来る状態となります。

おまけ:検索要素を増やすなど

基本上記で完了ですが、他の記事でもやった拡張を適用してさらに使いやすくすることも可能です。

・検索対象列を増やす

上記ではタイトルの乱していますが、表示を2列にしてユーザーアドレス(user列)も出します。
そして検索ワードにユーザーアドレスでもヒットするよう追加します。

・レイアウトを2重線にする
・副次的なテキストにuser(メールアドレス)を指定する
※SearchFieldはここでは一つしか指定できないのでプロパティから追加

プロパティでSearchFieldを選択して以下のようにuserも配列に含める

コンボボックスのItemsをタイトル、userどちらかに前方一致する実装に調整する

■そうすると以下のようにuser列にあるアドレスでも検索できますね。
※サンプルなので別の列(カテゴリとか)に変更してもらってOKです。

どちらでも検索ヒットするようになります。
複数許可をオンの場合も特に動作は問題ありません。

その他にも拡張は可能

上記はユーザー検索列のカスタムの記事で記載した内容ですが、
同様に副次的なテキスト列に値を増やす、や、さらに別の条件でフィルターするなど調整も可能です。

上記の実装周りについては以下の記事をご参考ください。
キャンバスアプリ Tips ユーザー検索の調整 ① 表示情報量を増やす | Power Apps Tips ログ (youseibubu.com)
キャンバスアプリ Tips ユーザー検索の調整 ② 検索対象項目を増やす | Power Apps Tips ログ (youseibubu.com)
キャンバスアプリ Tips ユーザー検索の調整 ③ 特定の条件でフィルター制御する | Power Apps Tips ログ (youseibubu.com)

おまけ:モダンだと怪しい動きだった(2024年2月時点)

モダンのコンボボックスで同実装を試したところ、近い動きはしたのですが、SearchTextの判定タイミングがおかしいのがずれて出てきたり、表示位置が変わったり、そもそもSearchFieldプロパティもないので他の列に対してのフィルターも出来ませんでした。表示列も1つのみだし。。

なので上記対応はあくまで従来のコンボボックスへの対応とご認識ください。

おわりに

今回は大量マスタのデータをどうやってコンボボックスに取ってくるの?についてでした。
結構ありそうな要件かなーと思いますし、ちょっと工夫すれば対応可能な範囲なので、この記事が困っている方への参考となれば幸いです。それでは!

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS