Power Platform

キャンバスアプリの委任について

今回は、Microsoft の「キャンバスアプリの委任について」資料より、「クエリの制限: 委任とクエリの制限」を
一部紹介したいと思います。

参考:Microsoftのlearn サイト
https://learn.microsoft.com

委任を理解する

Power Apps Power Fx クエリを データ ソース で実行できる同等のクエリに完全に変換できる場合、バックエンド データ ソース で最もよく機能します。
Power Apps データ ソース が理解できるクエリを送信し、クエリは データ ソース で実行され、クエリ結果が Power Apps に返されます。
たとえば、データ ソース は、データ ソース 上のデータをフィルタリングする作業を実行し、フィルタ基準を満たす行のみを返す場合があります。
これが正しく機能する場合、クエリの作業を実行するためにクエリが データ ソース に 委任 されたと言います。
ただし、Power Fx クエリは、すべてのデータ ソース上の同等のクエリに常に変換できるわけではありません。
たとえば、Dataverse は Excel よりも多くのクエリ機能をサポートしています。
Dataverse は ‘in’ (メンバーシップ) クエリ演算子をサポートしますが、Excel はサポートしません。
データ ソース がサポートしていない機能をクエリが使用している場合、そのクエリは 委任不可能 であると言えます。
一般に、クエリ式の一部が委任できない場合、クエリのどの部分も委任しません。
クエリが委任不可能な場合、Power Apps は データ ソース から最初の 500 レコードのみを取得し、クエリ内のアクションを実行します。
この制限は 2,000 レコードまで増やすことができます 制限の変更 Power Apps は結果のサイズが 500 レコードに制限され、Power Apps の良好なパフォーマンスを維持できます。

実験の結果、結果セットがこれらのサイズを超えると、一般にアプリおよび Power Apps にパフォーマンスの問題が発生することがわかりました。
ただし、データ ソース のデータが 500/2000 レコードを超える場合、クエリが誤った結果を返す可能性があるため、この制限が問題になる可能性があります。
たとえば、データ ソース に 1,000 万件のレコードがあり、クエリがデータの最後の部分を操作する必要がある例を考えてみましょう。 (たとえば、’Z’ で始まる姓) ただし、クエリに委任不可能な演算子 (たとえば、distinct) が含まれています。
この場合、最初の 500/2000 レコードのみが取得され、正しい結果がでません。

解説

1,000万件データのうち、対象データが500件の場合

委任可能の時:

データソース側でデータの検索を実施し、500件をPowerAppsに返されます

委任不可の時:

データソース側は検索をせず、最初の500件をPowerAppsに返し、返されたデータから

PowerAppsが検索を実施します。
よって、最初の500件中しか検索しないので、誤った結果を返す可能性があります。
(上記の場合は、最初の500件中の10件のみ取得)

補足:
500件=既定値(設定-全般より、最大2,000件まで変更可)
※委任:データソース側で検索できる状態

※補足

・データソース = Microsoft Dataverse 、SharePoint 、SQL Server 、Salesforce
・500件=既定値(2,000件まで変更可能)

委任可能な関数

Filter 関数

Filter、Search、First、LookUp は委任できます。
Filter 関数と LookUp 関数内では、テーブルの列で下記を使用して、適切なレコードを選択できます。
・And (&&を含む)、Or (|| を含む)、Not (! を含む)
・In

SharePoint リストでは Inは使えない😭
・=、<>、>=、<=、>、<
・+、-
・TrimEnds
・IsBlank
・StartsWith、EndsWith
・コントロール プロパティやグローバルおよびコンテキスト変数のように、すべてのレコードで定数値となるものです。
数式の評価 – エンティティのプロパティは、等値演算子の左側にある左辺である必要があります
式で比較するエンティティのプロパティを方程式の左側にある左辺に配置することが重要です。
説明するために、エンティティ プロパティの下にある例 “部署 ID”名前 はプロパティ値であり、評価される式の左辺に
配置する必要があります。 次の式が成功します。

ただし、この式では次のことはできません。

微妙ですね、Lookup関数を式の左辺で使わないと駄目だとは・・・AIを活用して欲しいですね。

並べ替え関数

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

集計関数

一部の集計関数は、バックエンドのサポートに応じて委任できます。 Sum、Average、Min、および Max を委任できます。
CountRows、Count などのカウント関数は委任できません。 現時点では、限られた数のデータソースのみが、委任のためのこれらの機能をサポートしています。

非委任関数

これら主な関数を含むその他すべての関数では、委任がサポートされません。
・FirstN、Last、LastN
・Choices
・Concat
・Collect、ClearCollect
・GroupBy、Ungroup
他にDistinct は委任の警告は表示されないが、委任対象外

委任の警告

委任されるものとされないものを見分けやすいように、Power Apps では、委任できないものを含む式を作成すると、警告 (黄色の三角形) が表示されます。

委任の警告は、委任可能なデータ ソースを操作する式にのみ表示されます。

※委任可能なデータ ソース

Microsoft Dataverse、SharePoint、SQL Server、Salesforce

まとめ

委任問題はアプリで使うデータの信頼性に関わる重要な部分なので、委任を意識する必要があります。
(アプリで使う対象のデータ件数が2000件以内であれば、委任は意識しなくても大丈夫です・・・警告は無視)
「キャンバスアプリの委任について」の資料には上記以外にも記載されていますので是非、一読してはいかがでしょうか?
きっと役に立つと思います。

中小企業はChatGPTから生成AI活用をはじめましょう生成AI導入プロジェクトの進め方について