キャンバス アプリでの委任についてUnderstand delegation in a canvas app

Power Apps には、キャンバスアプリでのデータテーブルのフィルター処理、並べ替え、および整形を行うための強力な一連の関数が含まれています。 FilterSortaddcolumns の各関数では、いくつかの名前を指定します。Power Apps includes a powerful set of functions for filtering, sorting, and shaping tables of data in a canvas app: Filter, Sort, and AddColumns functions to name just a few. これらの関数を使用すると、ユーザーが必要とする情報に絞り込んでアクセスするようにすることができます。With these functions, you can provide your users with focused access to the information they need. データベースに関する知識がある方にとっては、これらの関数の使用はデータベース クエリの記述に似ています。For those with a database background, using these functions is the equivalent of writing a database query.

効率的なアプリを構築する鍵は、デバイスに取り込む必要があるデータの量を最小限に抑えることにあります。The key to building efficient apps is to minimize the amount of data that must be brought to your device. おそらく、何百万件ものレコードがあっても必要なレコードはごく一部です。また、1 つの集計値で何千件ものレコードを表すことができます。Perhaps you need only a handful of records from a sea of million, or a single aggregate value can represent thousands of records. さらに、先頭のレコード セットのみを取得し、残りはユーザーが要求したときに取得することもできます。Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. レコードを絞り込むことで、アプリに必要な処理能力、メモリ、ネットワーク帯域幅を大幅に削減できます。その結果、携帯ネットワークで接続している電話でも、ユーザーへの応答時間が短縮されます。Being focused can dramatically reduce the processing power, memory, and network bandwidth that your app needs, resulting in snappier response times for your users, even on phones connected via a cellular network.

委任とは、ネットワーク上で移動するデータを最小限に抑える必要がある、パワーアプリの数式の表現力です。Delegation is where the expressiveness of Power Apps formulas meets the need to minimize data moving over the network. つまり、データをローカルで処理するためにアプリに移動するのではなく、データソースへのデータ処理を代行させます。In short, Power Apps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

これが複雑になり、この記事が存在する理由は、Power Apps の式で表現できるすべてのものがすべてのデータソースに委任できるわけではないからです。Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a Power Apps formula can be delegated to every data source. Power Apps 言語は、Excel の数式言語を模倣しています。これは、メモリ内の全ブックに完全かつ瞬時にアクセスできるように設計されており、さまざまな数値やテキスト操作関数を備えています。The Power Apps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. その結果、Power Apps の言語は、SQL Server などの強力なデータベースエンジンを含む、ほとんどのデータソースでサポートできるよりはるかに充実しています。As a result, the Power Apps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

大規模なデータ セットを操作するには、委任できるデータ ソースと数式を使用する必要があります。Working with large data sets requires using data sources and formulas that can be delegated. これが、アプリの高いパフォーマンスを維持し、ユーザーが必要とするすべての情報にアクセスできるようにする唯一の方法です。It's the only way to keep your app performing well and ensure users can access all the information they need. 委任が利用できない場所を示す委任の警告に留意してください。Take heed of delegation warnings that identify places where delegation isn't possible. 小規模なデータ セット (500 件未満のレコード) を操作する場合は、式を委任できなくてもアプリはデータをローカルに処理できるため、任意のデータ ソースと式を使用できます。If you're working with small data sets (fewer than 500 records), you can use any data source and formula because the app can process data locally if the formula can't be delegated.


委任の警告は以前に Power Apps で "blue dot" 候補としてフラグが設定されていましたが、委任の提案は警告として再分類されています。Delegation warnings were previously flagged in Power Apps as "blue dot" suggestions, but delegation suggestions have since been re-classified as warnings. データソース内のデータが500レコードを超えていて、関数を委任できない場合、Power Apps はすべてのデータを取得できない可能性があり、アプリの結果が正しくない可能性があります。If the data in your data source exceeds 500 records and a function can't be delegated, Power Apps might not be able to retrieve all of the data, and your app may have wrong results. 委任の警告は、正しい結果が得られるようにアプリを管理するのに役立ちます。Delegation warnings help you manage your app so that it has correct results.

委任可能なデータ ソースDelegable data sources

委任は、特定の表形式のデータソースでのみサポートされます。Delegation is supported for certain tabular data sources only. データソースで委任がサポートされている場合、そのコネクタのドキュメントでは、のサポートの概要が示されます。If a data source supports delegation, its connector documentation outlines that support. たとえば、これらの表形式のデータソースは最も一般的であり、委任をサポートしています。For example, these tabular data sources are the most popular, and they support delegation:

インポートされた Excel ブック ([静的データをアプリのデータソースに追加] を使用)、コレクション、およびコンテキスト変数に格納されているテーブルは、委任を必要としません。Imported Excel workbooks (using the Add static data to your app data source), collections, and tables stored in context variables don't require delegation. これらのデータはすべてメモリ内にあり、フルアプリ言語を完全に適用できます。All of this data is already in memory, and the full Power Apps language can be applied.

委任可能な関数Delegable functions

次の手順では、委任できる数式のみを使用します。The next step is to use only those formulas that can be delegated. ここに含まれるのは、委任できる数式の要素です。Included here are the formula elements that could be delegated. ただし、データ ソースはすべて異なっており、すべてのデータ ソースでこれらの要素がすべてサポートされているわけではありません。However, every data source is different, and not all of them support all of these elements. 特定の式で委任の警告を確認します。Check for delegation warnings in your particular formula.

この一覧は随時変更されます。These lists will change over time. より多くの関数と演算子で委任がサポートされるよう取り組んでいます。We're working to support more functions and operators with delegation.

フィルター関数Filter functions

Filter****Search、および LookUp は委任できます。Filter, Search, and LookUp can be delegated.

Filter 関数と LookUp 関数内では、テーブルの列でこれらを使用して、適切なレコードを選択できます。Within the Filter and LookUp functions, you can use these with columns of the table to select the appropriate records:

また、すべてのレコードで 1 つの定数値に評価される式の一部を使用することもできます。You can also use portions of your formula that evaluate to a constant value for all records. たとえば、 Left (Language (), 2)Date (2019, 3, 31)Today () は、レコードのどの列にも依存しないため、すべてのレコードに対して同じ値が返されます。For example, Left( Language(), 2 ), Date( 2019, 3, 31 ), and Today() don't depend on any columns of the record and, therefore, return the same value for all records. これらの値は、定数としてデータソースに送信することができ、委任をブロックすることはありません。These values can be sent to the data source as a constant and won't block delegation.

上のリストには、これらの注目すべき項目は含まれません。The previous list doesn't include these notable items:

並べ替え関数Sorting functions

SortSortByColumns は委任できます。Sort and SortByColumns can be delegated.

Sort の数式には、1 つの列の名前のみを指定できます。他の演算子や関数を含めることはできません。In Sort, the formula can only be the name of a single column and can't include other operators or functions.

集計関数Aggregate functions

SumAverageMin、および**Max** を委任できます。Sum, Average, Min, and Max can be delegated. 現時点では、限定された数のデータ ソースがこの委任をサポートしています。詳細については、委任一覧に関するページをご覧ください。Only a limited number of data sources support this delegation at this time; check the delegation list for details.

CountRowsCountACount などのカウント関数は委任できません。Counting functions such as CountRows, CountA, and Count can't be delegated.

StdevP および VarP などの他の集計関数についても委任できません。Other aggregate functions such as StdevP and VarP can't be delegated.

テーブルの整形関数Table shaping functions

AddcolumnsdropcolumnsRenameColumns、および**showcolumns** は、一部を部分的にサポートしています。AddColumns, DropColumns, RenameColumns, and ShowColumns partially support delegation. 引数の数式は委任できます。Formulas in their arguments can be delegated. ただし、これらの関数の出力には、非委任レコードの制限が適用されます。However, the output of these functions are subject to the non-delegation record limit.

この例のように、多くの場合、用語は、 AddcolumnsLookUpを使用して、あるテーブルから別のテーブルに情報をマージします。これは一般に、データベースの結合と呼ばれます。As in this example, makers often use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance:

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

製品サプライヤーは委任可能なデータソースであり、 LookUpは委任可能な関数であっても、 addcolumns関数の出力は委任可能なではありません。Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the output of the AddColumns function isn't delegable. 数式全体の結果は、 Productsデータソースの最初の部分に限定されます。The result of the entire formula is limited to the first portion of the Products data source. LookUp 関数とそのデータ ソースは委任可能なため、大規模でも、データ ソース内のどこかで Suppliers の一致が見つかる可能性があります。Because the LookUp function and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it's large.

この方法でAddcolumnsを使用する場合、 LookUpでは、 Products内の最初のレコードごとに、データソースを個別に呼び出す必要があります。これにより、大量のネットワーク chatter が発生します。If you use AddColumns in this manner, LookUp must make separate calls to the data source for each of those first records in Products, which causes a lot of network chatter. サプライヤーが十分に小さく、頻繁に変更されない場合は、 OnStartCollect関数を呼び出して、開始時にアプリのデータソースをキャッシュすることができます。If Suppliers is small enough and doesn't change often, you could call the Collect function in OnStart to cache the data source in your app when it starts. 別の方法として、ユーザーが要求したときにのみ関連レコードをプルするようにアプリを再構築することもできます。As an alternative, you could restructure your app so that you pull in the related records only when the user asks for them.

委任できない関数Non-delegable functions

以下の関数を含むその他すべての関数では、委任がサポートされません。All other functions don't support delegation, including these notable functions:

委任できない場合の制限Non-delegable limits

委任できない数式は、ローカルで処理されます。Formulas that can't be delegated will be processed locally. これにより、全範囲の Power Apps の数式言語を使用できるようになります。This allows for the full breadth of the Power Apps formula language to be used. ただし、欠点があります。最初にすべてのデータをデバイスに取り込む必要があるため、ネットワーク経由で大量のデータを取得する可能性があります。But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. その処理には時間がかかり、アプリの動作が遅いとか、クラッシュしているかもしれないという印象を与える可能性があります。That can take time, giving the impression that your app is slow or possibly crashed.

これを回避するために、Power Apps では、ローカルで処理できるデータの量に制限が設けられています。既定では、500レコードです。To avoid this, Power Apps imposes a limit on the amount of data that can be processed locally: 500 records by default. この数字を選択したのは、小規模なデータ セットには変わらず完全にアクセスでき、大規模なデータ セットでは部分的な結果を確認して使い方を改善できるためです。We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

この機能は、ユーザーの混乱を招く可能性があるため、使用する際は当然注意が必要です。Obviously care must be taken when using this facility because it can confuse users. たとえば、100 万件のレコードを含むデータ ソースに対する、委任できない選択数式の Filter 関数があるとします。For example, consider a Filter function with a selection formula that can't be delegated, over a data source that contains a million records. フィルター処理はローカルに行われるため、最初の 500 レコードのみがスキャンされます。Because the filtering is done locally, only the first 500 records are scanned. 目的のレコードがレコード 501 や 500,001 の場合、Filter では考慮されず、返されません。If the desired record is record 501 or 500,001, it isn't considered or returned by Filter.

集計関数も混乱を招く可能性があります。Aggregate functions can also cause confusion. 100 万件のレコードがある同じデータ ソースの 1 つの列の平均を計算します。Take Average over a column of that same million-record data source. Average はまだ委任できないため、先頭の 500 件のレコードのみの平均が計算されます。Average can't yet be delegated, so only the first 500 records are averaged. 注意しないと、アプリのユーザーが部分的な回答を完全な回答と誤解する可能性があります。If you're not careful, a partial answer could be misconstrued as a complete answer by a user of your app.

制限の変更Changing the limit

500 が既定のレコード数ですが、アプリ全体についてこの値を変更することができます。500 is the default number of records, but you can change this number for an entire app:

  1. [ファイル] タブの [アプリの設定] を選択します。On the File tab, select App settings.
  2. [詳細設定] で、[委任可能な以外のクエリのデータ行の制限] 設定を1から2000に変更します。Under Advanced settings, change the Data row limit for non-delegable queries setting from 1 to 2000.

場合によっては、2,000 (または 1,000 や 1,500) の方がシナリオのニーズに適していることがあるでしょう。In some cases, you'll know that 2,000 (or 1,000 or 1,500) will satisfy the needs of your scenario. シナリオに合わせて、この数を慎重に増やしてください。With care, you can increase this number to fit your scenario. この数を増やすと、特に列の数が多く幅が広いテーブルで、アプリのパフォーマンスが低下する場合があります。As you increase this number, your app's performance may degrade, especially for wide tables with lots of columns. やはり、最もいいのはできる限り委任することです。Still, the best answer is to delegate as much as you can.

アプリが大規模なデータ セットに合わせて拡張できるようにするには、この設定を 1 まで減らしてください。To ensure that your app can scale to large data sets, reduce this setting down to 1. 委任できないものはすべて、アプリのテストのタイミングが見つけやすくなるように、単一のレコードを返します。Anything that can't be delegated returns a single record, which should be easy to detect when testing your app. これにより、概念実証アプリを運用するときに予想外の事態が発生することを回避できます。This can help avoid surprises when trying to take a proof-of-concept app to production.

委任の警告Delegation warnings

委任されていないものを把握しやすくするために、Power Apps には、委任できないものを含む数式を作成するときに警告 (黄色の三角形) が用意されています。To make it easier to know what is and isn't being delegated, Power Apps provides warning (yellow triangle) when you create a formula that contains something that can't be delegated.

委任の警告は、委任可能なデータ ソースを操作する式にのみ表示されます。Delegation warnings appear only on formulas that operate on delegable data sources. 警告が表示されないものの、式が適切に委任されていないと思われる場合は、前に示した委任可能なデータ ソースの一覧で、データ ソースの種類を確認してください。If you don't see a warning and you believe your formula isn't being properly delegated, check the type of data source against the list of delegable data sources earlier in this topic.


この例では、[dbo].[Fruit] という名前の SQL Server テーブルを基にして、3 画面のアプリを自動的に生成します。For this example, you'll automatically generate a three-screen app based on a SQL Server table named [dbo].[Fruit]. アプリを生成する方法については、 「Common Data Service について」のトピックで同様の原則を適用して SQL Server することができます。For information about how to generate the app, you can apply similar principles in the topic about Common Data Service to SQL Server.

3 画面アプリ

ギャラリーの Items プロパティは、SortByColumns 関数と Search 関数を含む式に設定されています。どちらの関数も委任できます。The gallery's Items property is set to a formula that contains SortByColumns and Search functions, both of which can be delegated.

検索ボックスに「Apple」と入力します。In the search box, type "Apple".

アプリが SQL Server と通信して検索を処理する間、画面の上部近くに動くドットが一瞬表示されます。Marching dots appear momentarily near the top of the screen as the app communicates with SQL Server to process the search request. データ ソースに何百万ものレコードが含まれる場合でも、検索条件を満たすすべてのレコードが表示されます。All records that meet the search criteria appear, even if the data source contains millions of records.


Search 関数はテキスト列のすべての場所を探すので、検索結果には "Apples""Crab apples""Pineapple" が含まれます。The search results include "Apples", "Crab apples", and "Pineapple" because the Search function looks everywhere in a text column. 果物の名前の先頭に検索語を含むレコードのみを検索する場合は、別の委任可能な関数 Filter でさらに複雑な検索語を使用できます。If you wanted to find only records that contain the search team at the start of the fruit's name, you can use another delegable function, Filter, with a more complicated search term. (簡単にするため、SortByColumns の呼び出しは削除します。)(For simplicity, remove the SortByColumns call.)

SortByColumns 呼び出しを削除する

新しい結果には、"Apples" は含まれますが、"Crab apples""Pineapple" は含まれません。The new results include "Apples" but not "Crab apples" or "Pineapple". ただし、ギャラリーの横 (および、左側のナビゲーション バーにサムネイルが表示されている場合は画面のサムネイル) に黄色の三角形が表示され、式の一部分の下に青い波線が表示されます。However, a yellow triangle appears next to the gallery (and in the screen thumbnail if the left navigation bar shows thumbnails), and a blue, wavy line appears under a portion of the formula. これらの各要素は警告を示します。Each of these elements indicate a warning. ギャラリーの横の黄色い三角形をポイントすると、次のメッセージが表示されます。If you hover over the yellow triangle next to the gallery, this message appears:


SQL Server は委任可能なデータ ソースであり、Filter は委任可能な関数ですが、MidLen はどのデータ ソースにも委任できません。SQL Server is a delegable data source, and Filter is a delegable function, However, Mid and Len can't be delegated to any data source.

それでも、一応But it worked, didn't it? 機能しています。Well, kind of. そしてそれこそが、これが警告であり、赤い波線ではない理由です。And that is why this is a warning and not a red, wavy squiggle.

  • テーブルのレコードが 500 未満の場合、式は完璧に動作しました。If the table contains fewer than 500 records, the formula worked perfectly. すべてのレコードがデバイスに取り込まれ、Filter がローカルで適用されました。All records were brought to the device, and Filter was applied locally.
  • テーブルのレコードが 500 を超えると、条件に一致していても、式は 501 番目以降のレコードを返しません。If the table contains more than 500 records, the formula won't return record 501 or higher, even if it matches the criteria.