PowerApps には、データのフィルター処理、並べ替え、およびテーブルの整形を行う強力な一連の関数が用意されています。たとえば、FilterSortAddColumns 関数があります。 これらの関数を使用すると、ユーザーが必要とする情報に絞り込んでアクセスするようにすることができます。 データベースに関する知識がある方にとっては、これらの関数の使用はデータベース クエリの記述に似ています。

効率的なアプリを構築する鍵は、デバイスに取り込む必要があるデータの量を最小限に抑えることにあります。 おそらく、何百万件ものレコードがあっても必要なレコードはごく一部です。また、1 つの集計値で何千件ものレコードを表すことができます。 さらに、先頭のレコード セットのみを取得し、残りはユーザーが要求したときに取得することもできます。 レコードを絞り込むことで、アプリに必要な処理能力、メモリ、およびネットワーク帯域幅を大幅に削減できます。その結果、携帯ネットワークで接続している電話でも、ユーザーへの応答時間が短縮されます。

委任 では、PowerApps の数式の表現力により、ネットワーク経由で移動するデータを最小限に抑えるというニーズに対応できます。 つまり、委任とは、PowerApps がデータをアプリに移動してローカルで処理せずに、データの処理をデータ ソースに委任することです。

委任が複雑であり、この記事が存在する理由は、PowerApps の数式で表現できるすべての処理をすべてのデータ ソースに委任できるわけではないからです。 PowerApps 言語は Excel の数式言語によく似ており、さまざまな数値操作関数やテキスト操作関数を使用して、メモリ内のブック全体に完全かつ瞬時にアクセスできるように設計されています。 そのため、SQL Server などの強力なデータベース エンジンを始め、ほとんどのデータ ソースよりも機能が充実しています。

大規模なデータ セットを操作するには、委任できるデータ ソースと数式を使用する必要があります。 これが、アプリの高いパフォーマンスを維持し、ユーザーが必要とするすべての情報にアクセスできるようにする唯一の方法です。 委任できない箇所を示す青い点の修正候補に注意してください。 小規模なデータ セット (500 件未満のレコード) を操作する場合は、数式を委任できなければ処理をローカルで実行できるため、どのデータ ソースと数式でも使用できます。

委任可能なデータ ソース

委任をサポートしているソース データとサポート範囲の完全な一覧については、委任の一覧を参照してください。

今後も既存のデータ ソースへの委任のサポートを追加するだけでなく、データ ソースも追加していきます。

インポートされた Excel ブック ("静的データをアプリに追加します" データ ソースを使用)、コレクション、およびコンテキスト変数に格納されたテーブルには、委任が不要です。 これらのデータはすべてメモリ内に既にあり、PowerApps 言語をすべて適用できます。

委任可能な関数

次の手順では、委任できる数式のみを使用します。 ここに含まれるのは、委任できる数式の要素です。 ただし、データ ソースはすべて異なっており、すべてのデータ ソースでこれらの要素がすべてサポートされているわけではありません。 数式を作成する際は、青い点の修正候補の有無を確認してください。

この一覧は随時変更されます。 より多くの関数と演算子で委任がサポートされるよう取り組んでいます。

フィルター関数

Filter Search、および LookUp は委任できます。

Filter 関数と LookUp 関数内では、以下をテーブルの列と組み合わせて使用して、適切なレコードを選択できます。

すべてのレコードで 1 つの定数値に評価される数式の一部を使用することもできます。 たとえば、Left( Language(), 2 ) は、レコードのどの列にも依存していないため、すべてのレコードに対して同じ値を返します。 実質的には定数です。 コンテキスト変数、コレクション、および信号を使用した場合は、定数でない可能性があるため、Filter および LookUp は委任できなくなります。

上記の一覧に記載されていない重要な項目:

並べ替え関数

SortSortByColumns は委任できます。

Sort の数式には、1 つの列の名前のみを指定できます。他の演算子や関数を含めることはできません。

集計関数

SumAverageMin、および Max を委任できます。 現時点では、限定された数のデータ ソースがこの委任をサポートしています。詳細については、委任一覧に関するページをご覧ください。

CountRowsCountA、および Count などのカウント関数は委任できません。

StdevP および VarP などの他の集計関数についても委任できません。

その他の関数

以下の関数を含むその他すべての関数では、委任がサポートされません。

一般的なパターンでは、AddColumnsLookUp を使用して、1 つのテーブルの情報を別のテーブルにマージします。これは、データベース用語では一般に結合と呼ばれます。 例:

  • AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

LookUp は委任可能な関数ですが、ProductsSuppliers が委任可能なデータ ソースであっても、AddColumns 関数は委任できません。 数式全体の結果は、Products データ ソースの先頭部分に制限されます。

LookUp とそのデータ ソースは委任可能なため、大規模でも、データ ソース内のどこかで Suppliers の一致が見つかる可能性があります。 潜在的な欠点は、LookUp により、Products の先頭の各レコードについて個別にデータ ソースへの呼び出しが行われるため、ネットワーク上でのやり取りが大量に発生することです。 Suppliers が十分小さく、頻繁に変更されない場合は、代わりに、アプリの起動時に Collect 呼び出しを使用してデータ ソースをアプリにキャッシュし (最初の画面で OnVisible を使用します)、キャッシュに対して LookUp を実行します。

委任できない場合の制限

委任できない数式は、ローカルで処理されます。 これにより、PowerApps の数式言語をすべて使用できます。 ただし、欠点があります。最初にすべてのデータをデバイスに取り込む必要があるため、ネットワーク経由で大量のデータを取得する可能性があります。 その処理には時間がかかり、アプリの動作が遅いとか、ハングしているかもしれないという印象を与える可能性があります。

この問題を回避するために、PowerApps では、ローカルで処理可能なデータの量を 500 レコードに制限しています。 この数字を選択したのは、小規模なデータ セットには変わらず完全にアクセスでき、大規模なデータ セットでは部分的な結果を確認して使い方を改善できるためです。

この機能は、ユーザーの混乱を招く可能性があるため、使用する際は当然注意が必要です。 たとえば、100 万件のレコードがあるデータ ソースに対する、委任できない選択数式の Filter 関数があるとします。 フィルター処理はローカルで実行されるため、100 万件のレコードのうち先頭の 500 件だけがスキャンされます。 目的のレコードがレコード 501 または 500,001 の場合、Filter では考慮されず、返されません。

また、集計関数でも混乱を招く可能性があります。 100 万件のレコードがある同じデータ ソースの 1 つの列の平均を計算します。 Average はまだ委任できないため、先頭の 500 件のレコードのみの平均が計算されます。 注意が必要です。アプリのユーザーが部分的な回答を完全な回答と誤解する可能性があります。

青い点の修正候補

委任されるかどうかを簡単に確認できるように、作成時に数式に委任できないものが含まれている場合に青い点の修正候補が表示されます。

青い点は、委任可能なデータ ソースを操作する数式にのみ表示されます。 青い点が表示されないものの、数式が適切に委任されていないと思われる場合は、上記の委任可能なデータ ソースの一覧でデータ ソースの種類を確認してください。

この例では、商品 (具体的には果物) を含む [dbo].[Products] という名前の SQL Server テーブルを使用します。 PowerApps では、[新しい画面] でこのデータ ソースに接続する 3 つの画面から成る基本的なアプリを作成できます。

ギャラリーの Items プロパティの数式に注目してください。 SortByColumns 関数と Search 関数を使用しています。どちらも委任できます。

検索テキスト入力コントロールに「Apple」と入力します。 注意して見ると、新しい検索の新しいエントリの処理中に、少しの間、画面の上部で点が動いているのがわかります。 点が動いているのは、SQL Server と通信していることを示しています。

これはすべて委任できるため、[dbo].[Products] テーブルに何百万件ものレコードが含まれていても、すべてが検索されます。ユーザーが結果をスクロールすると、ギャラリー内のページが移動します。

ご覧のように、"Apple" と "Pineapple" の両方に一致しています。 Search 関数では、テキスト列内全体から検索語句を探します。 それでは、代わりに、果物の名前の先頭のみで検索語句を検索してみましょう。 別の委任可能な関数である Filter を使用すると、より複雑な検索語句を指定できます (わかりやすくするために、SortByColumns 呼び出しを削除します)。

これは正常に機能しているようで、"Apples" だけ表示され、"Pineapple" は表示されていません。 ただし、ギャラリーの横に青い点が表示され、数式の一部分の下に青い波線があります。 画面上のサムネイルにも青い点が表示されています。 ギャラリーの横にある青い点をポイントすると、次のメッセージが表示されます。

委任可能なデータ ソースである SQL Server と委任可能な Filter 関数を使用しているものの、Filter 内で使用した数式は委任可能ではありません。 MidLen はどのデータ ソースにも委任できません。

それでも、一応 機能しています。 これが、注意を促す黄色のアイコンや赤色の波線エラーではなく、青い点が表示される理由です。 [dbo].[Products] テーブルに含まれているレコードは 500 件未満なので、問題なく機能しました。 すべてのレコードがデバイスに取り込まれ、Filter がローカルで適用されました。

このテーブルに含まれているレコードが 500 件を超える場合は、"テーブルの 500 件の先頭レコード内の" "Apple" で始まる果物だけがギャラリーに表示されます。 レコード 501 または 500,001 に "Apple, Fuji" という名前が含まれていても、見つかりません。