Power Apps での Concurrent 関数

複数の数式を相互に同時に評価します。

内容

Concurrent 関数では、同時に複数の数式を評価します。 通常、複数の数式は ; 演算子と一緒にチェーンすることにより評価され、各々を順次に順番に評価します。 アプリが操作を同時に実行する場合、ユーザーは同じ結果を待機する時間がより少なくなります。

アプリの OnStart プロパティで、Concurrent を使用して、アプリがデータを読み込むときのパフォーマンスを向上させます。 前の呼び出しが完了するまで、データ呼び出しが開始されない場合、アプリはすべての要求時間の合計を待機する必要があります。 データ呼び出しが同時に開始される場合、アプリは最長の要求時間だけ待機する必要があります。 Web ブラウザーは、多くの場合、データ操作を同時に実行することによってパフォーマンスを向上させます。

Concurrent 関数内の数式の評価の開始および終了の順序は予測できません。 Concurrent 関数内の数式は同じ Concurrent 関数内の別の数式への依存関係を含めることはできず、それを実行した場合 Power Apps がエラーを表示します。 Concurrent 関数が開始する前に完了するため、内部から、Concurrent 関数の外部の数式に安全に依存関係を持つことができます。 Concurrent 関数の後の数式は、内部の数式に安全に相互関係を持つことができ、これらは、Concurrent 関数が終了する前にすべて完了し、チェーン内の次の数式に移動します (; 演算子を使用する場合)。 副作用がある関数またはサービス メソッドを呼び出す場合は、微妙な順序の依存関係に注意してください。

数式を、Concurrent の引数内で ; 演算子を使用して連鎖できます。 たとえば、Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) )Set( a, 1 ); Set( b, a+1 )Set( x, 2 ); Set( y, x+2 ) と同時に評価します。 この場合、数式内の依存関係は問題がなく、ab の前に設定され、xy の前に設定されます。

アプリが実行されているデバイスまたはブラウザーによっては、実際には少数の数式しか同時に評価されない可能性があります。 Concurrent は使用可能な機能を使用し、すべての数式が評価されるまで完了しません。

数式レベルのエラー管理 を (詳細設定で) 有効にする場合、引数の順序で最初に発生したエラーは Concurrent から返され、それ以外の場合は、空白 が返されます。 すべての数式が成功する場合、true が返されます。 1 つの数式が失敗した場合、その数式の残りの部分は停止しますが、他の数式は評価を続行します。

Concurrent は、動作の数式 でのみ使用できます。

構文

Concurrent( Formula1, Formula2 [, ...] )

  • Formula(s) - 必須。 同時に評価する数式。 少なくとも 2 つの数式を指定する必要があります。

データの読み込みをより迅速にする

  1. アプリを作成し、Microsoft Dataverse、SQL Server、または SharePoint から 4 つのデータ ソースを追加します。

    この例では、SQL Azure のサンプル Adventure Works データベース から 4 つのテーブルを使用します。 データベースを作成したら、完全修飾サーバー名 (たとえば、srvname.database.windows.net) を使用して Power Apps から接続します。

    Azure で Adventure Works データベースに接続します。

  2. Button コントロールを追加し、その OnSelect プロパティを次の数式に設定します。

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); 
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Microsoft Edge または Google Chrome で、アプリが実行されている間にネットワーク トラフィックを監視する開発者ツールをオンにします。

  4. (オプション) ネットワーク調整をオンにして、この比較の効果を強調します。

  5. Alt キーを押しながら、ボタンを選択し、次にネットワーク トラフィックを監視します。

    ツールには、次の例のように、順番に実行された 4 つの要求を示します。 実際の時間は大幅に異なるため、削除されています。 グラフには、各呼び出しが最後の完了後に開始されることを示しています。

    この 4 つのネットワーク要求の時間グラフでは、それぞれが最後に終了した後に開始され、時間帯全体をカバーしています。

  6. アプリを保存し、閉じて、再度開きます。

    Power Apps はデータをキャッシュするので、ボタンを再度選択しても必ずしも 4 つの新しい要求が発生するわけではありません。 パフォーマンスをテストするたびに、アプリを閉じて再度開きます。 ネットワーク調整がオンになっている場合、別のテストの準備が終わるまでオフにしておくことができます。

  7. 2 番目の Button コントロールを追加し、OnSelect プロパティを次の数式に設定します。

    Concurrent( 
        ClearCollect( Product, '[SalesLT].[Product]' ), 
        ClearCollect( Customer, '[SalesLT].[Customer]' ),
        ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
        ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    )
    

    最初のボタンに同じ ClearCollect 呼び出しを追加しましたが、今回は Concurrent 関数で囲まれ、コンマで区切られていることに注意してください。

  8. ブラウザーでネットワーク監視をクリアにします。

  9. ネットワーク調整を以前に使用していた場合は、再度オンにします。

  10. Alt キーを押しながら、2 番目のボタンを選択し、次にネットワーク トラフィックを確認します。

    ツールには、次の例のように、同時に実行された 4 つの要求を示します。 この場合も、実際の時間は大幅に異なるため、削除されています。 グラフには、すべての呼び出しがほぼ同時に開始され、および前の呼び出しが終了するまで待機していないことを示しています。

    この 4 つのネットワーク要求の時間グラフでは、4 つのすべてが同時に開始され、時間帯の半分程度をカバーしています。

    これらのグラフは、同じスケールに基づいています。 Concurrent を使用して、これらの操作を完了するのにかかった合計時間を半減させることができます。

  11. アプリを保存し、閉じて、再度開きます。

競合状態

  1. Microsoft Translator サービスへの接続をアプリに追加します。

  2. Text input コントロールを追加し、別の名前になっている場合は、TextInput1 という名前に変更します。

  3. Button コントロールを追加し、その OnSelect プロパティを次の数式に設定します。

    Set( StartTime, Value( Now() ) );
    Concurrent(
        Set( FRTrans, MicrosoftTranslator.Translate( TextInput1.Text, "fr" ) ); 
            Set( FRTransTime, Value( Now() ) ),
        Set( DETrans, MicrosoftTranslator.Translate( TextInput1.Text, "de" ) ); 
            Set( DETransTime, Value( Now() ) )
    );
    Collect( Results,
        { 
            Input: TextInput1.Text,
            French: FRTrans, FrenchTime: FRTransTime - StartTime, 
            German: DETrans, GermanTime: DETransTime - StartTime, 
            FrenchFaster: FRTransTime < DETransTime
        }
    )
    
  4. Data table コントロールを追加し、その Items プロパティを 結果 に設定します。

  5. 右側ペインの プロパティ タブで、フィールドの編集 を選択して フィールド ペインを開きます。

  6. フィールドの一覧で、各フィールドのチェック ボックスを選択して、データ テーブルにすべて表示します。

  7. (オプション) 入力 フィールドを一覧の上部にドラッグし、FrenchFaster フィールドを一覧の下部にドラッグします。

    結果コレクションのフィールドの一覧。

  8. Text input コントロールで、翻訳する語句を入力または貼り付けます。

  9. Alt キーを押しながら、ボタンを複数回選択して、テーブルを塗りつぶします。

    時間はミリ秒単位で表示されます。

    文字列 "Hello World" をフランス語およびドイツ語に翻訳した結果が含まれるデータ テーブルの表示。 フランス語翻訳がドイツ語よりも速い場合があり、逆の場合もあります。

    場合によっては、フランス語翻訳はドイツ語よりも速い場合があり、その逆もあります。 両方が同時に開始されますが、ネットワークの待機時間およびサーバー側の処理などの、さまざまな理由で一方が他方の前に返されます。

    アプリが最初に終了する翻訳に依存している場合、競合状態 が発生します。 しかし、Power Apps では検出できるほとんどのタイミング依存関係にフラグを付けます。

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。