PowerApps のデータ ソースについてUnderstand data sources in PowerApps

ほとんどの PowerApps アプリでは、データ ソースと呼ばれる、クラウド サービスに格納されている外部情報を使用します。Most PowerApps apps use external information stored in cloud services called Data Sources. 一般的な例は、OneDrive for Business に格納されている Excel ファイル内のテーブルです。A common example is a table in an Excel file stored in OneDrive for Business. アプリは、接続を使用してこれらのデータ ソースにアクセスします。Apps access these data sources by using Connections.

この記事では、さまざまな種類のデータ ソースと、テーブル データ ソースの操作方法について説明します。This article discusses the different kinds of data sources, and how to work with table data sources.

データ ソースに対する基本的な読み取りと書き込みを実行するアプリを作成するのは簡単です。It is easy to create an app that does basic reading and writing to a data source. しかし、アプリのデータの入出力を細かく制御することが必要になる場合があります。But sometimes you want more control over how data flows in and out of your app. この記事では、PatchDataSourceInfoValidateErrors 関数を使用してより細かな制御を実現する方法について説明します。This article describes how the Patch, DataSourceInfo, Validate, and Errors functions provide more control.

データ ソースの種類Kinds of data sources

データ ソースは、クラウド サービスに接続することも、アプリに対してローカルに配置することもできます。Data sources can be connected to a cloud service, or they can be local to an app.

接続されているデータ ソースConnected data sources

最も一般的なデータ ソースはテーブルで、情報の取得と保存に使用できます。The most common data sources are tables, which you can use to retrieve and store information. データ ソースへの接続を使用すると、Microsoft Excel ブック、SharePoint リスト、SQL テーブルを始めとして多数の形式でデータの読み書きを行うことができ、それらを OneDrive for Business、DropBox、SQL Server などのクラウド サービスに格納できます。You can use connections to data sources to read and write data in Microsoft Excel workbooks, SharePoint lists, SQL tables, and many other formats, which can be stored in cloud services like OneDrive for Business, DropBox, SQL Server, etc.

テーブル以外のデータ ソースには、電子メール、予定表、Twitter、通知が含まれますが、この記事ではこのような他の種類のデータ ソースについては説明しません。Data sources other than tables include email, calendars, Twitter, and notifications, but this article doesn't discuss these other kinds of data sources.

ローカル データ ソースLocal data sources

ギャラリー表示フォーム編集フォーム コントロールを使用すると、データ ソースからデータを読み書きするアプリを簡単に作成できます。Using the Gallery, Display form, and Edit form controls, it is easy to create an app that reads and writes data from a data source. 最初に、データ フォームについての記事をご覧ください。To get started, read the article Understand data forms.

データからアプリを作成するよう PowerApps に要求すると、これらのコントロールが使用されます。When you ask PowerApps to create an app from data, these controls are used. その背後で、アプリは、データ ソースから取得したデータを格納して操作するために内部テーブルを使用します。Behind the scenes, the app uses an internal table to store and manipulate the data that comes from the data source.

特別な種類のデータ ソースにコレクションがあります。コレクションは、アプリに対してローカルであり、クラウドのサービスへの接続に基づきません。したがって、同じユーザーのデバイス間または複数のユーザー間で情報を共有することはできません。A special kind of data source is the Collection, which is local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. コレクションの読み込みと保存はローカルで行うことができます。Collections can be loaded and saved locally.

テーブルの種類Kinds of tables

PowerApps アプリの内部テーブルは、数や文字列が値であるのと同じように固定値を保持します。Tables that are internal to a PowerApps app are fixed values, just as a number or a string is a value. 内部テーブルはどこにも格納されず、アプリのメモリにのみ存在します。Internal tables aren't stored anywhere, they just exist in your app's memory. テーブルの構造とデータを直接変更することはできません。You can't directly modify the structure and data of a table. その代わり、数式を使用して新しいテーブルを作成することができます。その数式を使用して、元のテーブルに変更を加えたコピーを作成します。What you can do instead is to create a new table through a formula: you use that formula to make a modified copy of the original table.

外部テーブルはデータ ソースに格納され、後で取得して共有することができます。External tables are stored in a data source for later retrieval and sharing. PowerApps は、格納されたデータを読み書きするための "接続" を提供します。PowerApps provides "connections" to read and write stored data. 接続内では、複数の情報テーブルにアクセスできます。Within a connection, you can access multiple tables of information. アプリで使用するテーブルを選択すると、それぞれのテーブルが別個の "データ ソース" になります。You'll select which tables to use in your app, and each will become a separate data source.

作業テーブルに関するページで内部テーブルについて詳しく説明されていますが、その説明はクラウド サービスに存在する外部テーブルにも当てはまります。To learn more, Working with tables goes into more detail about internal tables, but it is also applicable to external tables residing in a cloud service.

テーブルの操作Working with tables

テーブルのデータ ソースは、PowerApps の内部テーブルと同じ方法で使用できます。You can use table data sources the same way that you use an internal PowerApps table. 各データ ソースには、内部テーブルと同じように、レコード、数式で使用できるプロパティがあります。Just like an internal table, each data source has records, columns, and properties that you can use in formulas. さらに、次の条件があります。In addition:

  • データ ソースの列名とデータ型は、接続の基になるテーブルと同じになります。The data source has the same column names and data types as the underlying table in the connection.

    注: 名前にスペースが使われている列を含む SharePoint および Excel のデータ ソースの場合、PowerPoint ではスペースが "_x0020_" に置き換えられます。Note: For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". たとえば、SharePoint または Excel の "Column Name" は、PowerApps のデータ レイアウトに表示されるときや数式で使用されるときは "Column_x0020_Name" と表示されます。For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

  • データ ソースは、アプリが読み込まれるときにサービスから自動的に読み込まれます。The data source is loaded from the service automatically when the app is loaded. Refresh 関数を使用して、強制的にデータを更新できます。You can force the data to refresh by using the Refresh function.
  • ユーザーはアプリを実行するとき、レコードを作成、変更、削除して、その変更をサービスの基になるテーブルにプッシュ転送できます。As users run an app, they can create, modify, and delete records and push those changes back to the underlying table in the service.
    • レコードを作成するには、Patch 関数と Collect 関数を使用します。Records can be created with the Patch and Collect functions.
    • レコードを変更するには、Patch 関数、Update 関数、UpdateIf 関数を使用します。Records can be modified with the Patch, Update, and UpdateIf functions.
    • レコードを削除するには、Remove 関数と RemoveIf 関数を使用します。Records can be removed with the Remove and RemoveIf functions.
    • データ ソースの操作に関するエラーは、Errors 関数を介して利用できます。Errors when working with a data source are available through the Errors function.
  • DataSourceInfo 関数、Defaults 関数、Validate 関数は、ユーザー エクスペリエンスを最適化するために使用できる、データ ソースに関する情報を提供します。The DataSourceInfo, Defaults, and Validate functions provide information about the data source that you can use to optimize the user experience.

データ ソースの作成Creating data sources

PowerApps を使用して、接続されたデータ ソースを作成したり、データ ソースの構造を変更したりすることはできません。データ ソースは、既にいずれかのサービスに存在している必要があります。PowerApps can't be used to create a connected data source, or modify its structure; the data source must already exist in a service somewhere. たとえば、OneDrive に保存された Excel ブックにテーブルを作成するには、最初に OneDrive で Excel Online を使用してブックを作成します。For example, to create a table in an Excel workbook stored on OneDrive, you first use Excel Online on OneDrive to create a workbook. 次に、アプリからそのブックへの接続を作成します。Next you create a connection to it from your app.

コレクションのデータ ソースは、アプリ内で作成と変更を "行えます" が、これは一時的なものです。However, collection data sources can be created and modified inside an app, but are only temporary.

1 つまたは複数のレコードの表示Display one or more records

上の図は、アプリがデータ ソース内の情報を読み取るときの情報の流れを示しています。 The diagram above shows the flow of information when an app reads the information in a data source:

  • 情報は、ストレージ サービス (この場合は Office 365 サイトの SharePoint リスト) を介して保存され、共有されます。The information is stored and shared through a storage service (in this case, a SharePoint list of an Office 365 site).
  • 接続により、この情報をアプリで利用できるようになります。A connection makes this information available to the app. 接続は、情報にアクセスするためのユーザーの認証を処理します。The connection takes care of authentication of the user to access the information.
  • アプリが起動されるか、Refresh 関数が押されると、接続から情報がアプリのデータ ソースに取得され、ローカルで使用できるようになります。When the app is started or the Refresh function is pressed, information is drawn from the connection into a data source in the app for local use.
  • 数式は、情報を読み取り、その情報をユーザーに表示されるコントロールに公開するために使用されます。Formulas are used to read the information and expose it in controls that the user can see. データ ソースのレコードを表示するには、画面のギャラリーを使用し、Items プロパティをデータ ソースに関連付けます (Gallery.Items = DataSource)。You can display the records of a data source by using a gallery on a screen and wiring the Items property to the data source: Gallery.Items = DataSource. コントロールの Default プロパティを使用して、ギャラリー内のコントロールをギャラリーに関連付けます。You wire controls within the gallery, to the gallery, using the controls' Default property.
  • データ ソースは、テーブルでもあります。The data source is also a table. したがって、データ ソースを全体として使用する前に、FilterSortAddColumns、その他の関数を使用して、改良と拡張を行えます。So you can use Filter, Sort, AddColumns, and other functions to refine and augment the data source before using it as a whole. また、LookupFirstLast などの関数を使用して、個々のレコードを操作することもできます。You can also use the Lookup, First, Last, and other functions to work with individual records.

レコードの変更Modify a record

前のセクションでは、データ ソースを読み取る方法について説明しました。In the prededing section, you saw how to read a data source. ここで、上の図に示されている矢印が一方向であることに注意してください。Note that the arrows in the diagram above are one way. データ ソースに加えられた変更は、データを取得したのと同じ数式を介してプッシュ転送されません。Changes to a data source aren't pushed back through the same formulas in which the data was retrieved. 代わりに、新しい数式が使用されます。Instead, new formulas are used. 多くの場合 (特にモバイル デバイス上で)、レコードの編集用には、レコードを閲覧するための画面とは異なる画面が使用されます。Often a different screen is used for editing a record than for browsing records, especially on a mobile device.

データ ソースの既存のレコードを変更するには、そのレコードがデータ ソースから取得されている必要があります。Note that, to modify an existing record of a data source, the record must have originally come from the data source. レコードは、ギャラリー、コンテキスト変数、任意の数の数式を経由している可能性がありますが、その取得元はデータ ソースまでさかのぼることができる必要があります。The record may have traveled through a gallery, a context variable, and any number of formulas, but its origin should be traceable back to the data source. レコードを一意に識別する追加情報がレコードに付属することで変更対象のレコードが正しいことが保証されるため、これは重要なことです。This is important because additional information travels with the record that uniquely identifies it, ensuring that you modify the correct record.

上の図は、データ ソースを更新するための情報の流れを示しています。 The diagram above shows the flow of information to update a data source:

  • 編集フォーム コントロールは、入力カードのコンテナーを提供します。入力カードは、テキスト入力コントロール、スライダーなどのユーザー入力コントロールで構成されます。An Edit form control provides a container for input cards, which are made up of user input controls such as a text-input control or a slider. DataSource プロパティと Item プロパティは、編集するレコードを識別するために使用します。The DataSource and Item properties are used to identify the record to edit.
  • 各入力カードには Default プロパティがあります。このプロパティは、通常はフォームの ThisItem レコードのフィールドに設定されます。Each input card has a Default property, which is usually set to the field of the form's ThisItem record. 入力カード内のコントロールは、Default から入力値を受け取ります。The controls within the input card will then take their input values from Default. 通常はこれを変更する必要はありません。Normally you do not need to modify this.
  • 各入力カードは、Update プロパティを公開します。Each input card exposes an Update property. このプロパティは、ユーザーの入力を、データ ソースに書き戻すために、レコードの特定のフィールドにマップします。This property maps the user's input to a specific field of the record for writing back to the data source. 通常はこれを変更する必要はありません。Normally you do not need to modify this.
  • 画面上のボタンまたはイメージ コントロールを使用すると、ユーザーがレコードに加えた変更を保存できます。A button or an image control on the screen enables the user to save changes to the record. そのためには、コントロールの OnSelect 数式で SubmitForm 関数を呼び出します。The OnSelect formula of the control calls the SubmitForm function to do this work. SubmitForm を使用すると、カードのすべての Update プロパティを読み取り、これを使用してデータ ソースに書き戻すことができます。SubmitForm reads all the Update properties of the cards and uses this to write back to the data source.
  • 場合によっては問題が発生することがあります。Sometimes there will be issues. たとえば、ネットワーク接続が切断されている場合や、アプリが認識できないサービスによって検証チェックが行われている場合があります。A network connection may be down, or a validation check is made by the service that the app didn't know about. フォーム コントロールの Error プロパティと ErrorKind プロパティを使用すると、この情報が利用可能になり、ユーザーに表示できるようになります。The Error and ErrorKind properties of the form control makes this information available, so you can display it to the user.

プロセスをより細かく制御するために、Patch 関数と Errors 関数を使用することもできます。For more fine grained control over the process, you can also use the Patch and Errors function. 編集フォーム コントロールでは Update プロパティが公開されるため、フォーム内のフィールドの値を読み取ることができます。The Edit form control exposes an Updates property so that you can read the values of the fields within the form. さらに、Patch 関数と SubmitForm 関数を完全にバイパスして、このプロパティを使用して接続上でカスタム コネクタを呼び出すこともできます。You can also use this property to call a custom connector on a connection, completely bypassing the Patch and SubmitForm functions.

検証Validation

アプリでは、レコードに変更を加える前に、変更が許容されるかどうかを確認する必要があります。Before making a change to a record, the app should do what it can to make sure the change will be acceptable. これには 2 つの理由があります。There are two reasons for this:

  • "ユーザーへの即座のフィードバック"。Immediate feedback to the user. 問題を修正するのに最適なタイミングは、ユーザーの記憶に新鮮な、その問題が発生したときです。The best time to fix a problem is right when it happens, when it is fresh in the user's mind. 実際、タッチ操作またはキー入力ごとに、入力の問題を示す赤いテキストを表示できます。Literally with each touch or keystroke, red text can appear that identifies an issue with their entry.
  • "ネットワーク トラフィックの削減とユーザーの待ち時間の短縮"。Less network traffic and less user latency. アプリで問題を多く検出できれば、問題を検出して解決するためのネットワーク経由の会話を減らすことができます。More issues detected in the app means fewer conversations over the network to detect and resolve issues. この会話を行うのに時間がかかり、ユーザーは処理を進めるのにその都度待たなければなりません。Each conversation takes time during which the user must wait before they can move on.

PowerApps には、検証用に 2 つのツールが用意されています。PowerApps offers two tools for validation:

  • データ ソースは、有効な値と有効でない値に関する情報を提供できます。The data source can provide information about what is and isn't valid. たとえば、数値に最小値と最大値を設定したり、1 つ以上のエントリを必須に設定したりできます。For example, numbers can have minimum and maximum values, and one or more entries can be required. この情報には、DataSourceInfo 関数を使用してアクセスできます。You can access this information with the DataSourceInfo function.
  • Validate 関数では、これと同じ情報を使用して、1 つの列またはレコード全体の値を確認できます。The Validate function uses this same information to check the value of a single column or of an entire record.

エラー処理Error handling

これまでの操作で、レコードを検証することができました。Great, you've validated your record. 次は、Patch を使用してそのレコードを更新します。Time to update that record with Patch!

しかし、残念ながら、まだ問題があります。But, alas, there may still be a problem. アプリは、たとえば、ネットワークがダウンしている、サービスでの検証に失敗した、ユーザーが適切なアクセス許可を持っていない、などのエラーに遭遇する可能性があります。The network is down, validation at the service failed, or the user doesn't have the right permissions, just to name a few of the possible errors your app may encounter. アプリでは、エラー状況に適切に対応して、フィードバックとエラー状況を解決するための手段をユーザーに提供する必要があります。It needs to respond appropriately to error situations, providing feedback to the user and a means for them to make it right.

データ ソースでエラーが発生すると、アプリは自動的にエラー情報を記録し、これを Errors 関数を介して使用できるようにします。When errors occur with a data source, your app automatically records the error information and makes it available through the Errors function. エラーは、問題が発生したレコードに関連付けられます。Errors are associated with the records that had the problems. それがユーザーによって修正可能な問題 (たとえば、検証の問題) なら、レコードを送信し直すことでエラーが解決します。If the problem is something the user can fix, such as a validation problem, they can resubmit the record, and the errors will be cleared.

Patch または Collect を使用してレコードが作成されたときにエラーが発生した場合、エラーが関連付けられるレコードはありません。If an error occurs when a record is created with Patch or Collect, there is no record to associate any errors with. その場合、Patch によって "空白" が返され、これを Errors のレコード引数として使用できます。In this case, blank will be returned by Patch and can be used as the record argument to Errors. 作成エラーは次の操作で解決されます。Creation errors are cleared with the next operation.

Errors 関数からは、エラー情報のテーブルが返されます。The Errors function returns a table of error information. 特定の列にエラーの原因があると考えられる場合は、この情報に列情報を含めることができます。This information can include the column information, if the error can be attributed to a particular column. 列レベルのエラー メッセージは、編集画面上の列の近くにあるラベル コントロールで使用します。Use column-level error messages in label controls that are close to where the column is located on the edit screen. エラー テーブルの Column が "空白" であるレコード レベルのエラー メッセージは、レコード全体の [保存] ボタンの近くの場所で使用します。Use record-level error messages where the Column in the error table is blank, in a location close to the Save button for the entire record.

大規模なデータ ソースの操作Working with large data sources

(数百万件のレコードが含まれる) 大規模なデータ ソースからレポートを作成する場合は、ネットワーク トラフィックが最小限になるように考慮する必要があります。When you are creating reports from large data sources (perhaps millions of records), you want to minimize network traffic. たとえば、ニューヨーク市に居住する、StatusCode が "Platinum" であるすべての顧客を報告するとします。Let's say you want to report on all Customers having a StatusCode of "Platinum" in New York City. この顧客テーブルには、数百万件のレコードが含まれているとします。And that your Customers table contains millions of records.

この場合、数百万人の顧客レコードをアプリに取り込んだ後で目的のレコードを見つけることはしませんYou do not want to bring those millions of Customers into your app, and then choose the ones you want. 代わりに、テーブルが格納されているクラウド サービス内でその選択操作を行い、選択されたレコードのみをネットワーク経由で送信するようにします。What you want is to have that choosing happen inside the cloud service where your table is stored, and only send the chosen records over the network.

レコードを選択するために使用できる関数の多く (すべてではありません) は "委任" することができます。つまり、これらの関数をクラウド サービス内で実行できます。Many, but not all, functions that you can use to choose records can be delegated, which means that they are run inside the cloud service. その方法については、委任に関するページを参照してください。You can learn how to do this by reading about Delegation.

コレクションCollections

コレクションは、特別な種類のデータ ソースです。Collections are a special kind of data source. コレクションは、アプリに対してローカルであり、クラウドのサービスへの接続に基づきません。したがって、同じユーザーのデバイス間または複数のユーザー間で情報を共有することはできません。They're local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. コレクションは他のデータ ソースと同様に動作しますが、いくつかの例外があります。They operate like any other data source, with a few exceptions:

  • コレクションは、Collect 関数を使用して動的に作成できます。Collections can be created dynamically with the Collect function. コレクションは、接続ベースのデータ ソースとは異なり、事前に確立する必要はありません。They don't need to be established ahead of time, as connection-based data sources do.
  • コレクションの列は、Collect 関数を使用していつでも変更できます。The columns of a collection can be modified at any time using the Collect function.
  • コレクションでは、重複するレコードが許可されます。Collections allow duplicate records. コレクションでは、同じレコードのコピーが複数個存在できます。More than one copy of the same record can exist in a collection. All 引数が指定されていない限り、Remove などの関数は最初に見つかった一致に対して動作します。Functions such as Remove will operate on the first match they find, unless the All argument is supplied.
  • SaveData 関数と LoadData 関数を使用して、コレクションのコピーの保存と再読み込みを行うことができます。You can use the SaveData and LoadData functions to save and reload a copy of the collection. 情報は、他のユーザー、アプリ、またはデバイスがアクセスできないプライベートな場所に保存されます。The information is stored in a private location that other users, apps, or devices can't access.
  • エクスポート コントロールとインポート コントロールを使用して、ユーザーが操作できるファイルとの間でコレクションのコピーの保存と再読み込みを行うことができます。You can use the Export and Import controls to save and reload a copy of the collection to a file that the user can interact with.

データ ソースとしてのコレクションの操作方法の詳細については、コレクションの作成と更新に関するページを参照してください。For more information on working with a collection as a data source, see create and update a collection.

コレクションは通常、アプリのグローバルな状態を保持するために使用します。Collections are commonly used to hold global state for the app. 状態を管理するために使用できるオプションについては、変数の操作に関するページを参照してください。See working with variables for the options available for managing state.