PowerApps におけるキャンバス アプリのテーブルとレコードについてUnderstand canvas-app tables and records in PowerApps

PowerApps では、Microsoft Excel、SharePoint、SQL Server など、レコード形式やテーブル形式でデータを格納するソースにアクセスして情報を取得する、キャンバス アプリを作成できます。In PowerApps, you can create a canvas app that accesses information in Microsoft Excel, SharePoint, SQL Server, and several other sources that store data in records and tables. このタイプのデータを効率的に操作できるように、その構造の基になる概念を確認しておきましょう。To work most effectively with this kind of data, review the concepts that underlie these structures.

  • レコードには、ある人、場所、または物事について 1 つ以上のカテゴリの情報が格納されます。A record contains one or more categories of information about a person, a place, or a thing. たとえば、1 つのレコードに、1 人の顧客の名前、電子メール アドレス、電話番号を格納できます。For example, a record might contain the name, the email address, and the phone number of a single customer. 他のツールでは、レコードが "行" や "項目" と呼ばれることもあります。Other tools refer to a record as a "row" or an "item."
  • テーブルには、同じカテゴリ設定で情報が格納されている 1 つ以上のレコードが保持されます。A table holds one or more records that contain the same categories of information. たとえば、1 つのテーブルに、50 人の顧客の名前、電子メール アドレス、電話番号を格納できます。For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

作成するアプリでは、数式を使用して、レコードとテーブルの作成、更新、操作を行います。In your app, you'll use formulas to create, update, and manipulate records and tables. 外部のデータ ソースに対してデータの読み取りと書き込みを行うことがあるでしょう。このデータ ソースを拡張テーブルと呼びます。You'll probably read and write data to an external data source, which is an extended table. 内部テーブルを 1 つ以上作成することもできます。これをコレクションと呼びます。In addition, you might create one or more internal tables, which are called collections.

Excel の数式が 1 つ以上のセル参照を引数として受け取るのと同じように、テーブルの名前を引数として受け取るさまざまな数式を作成できます。You can build a variety of formulas that take the name of a table as an argument, just as a formula in Excel takes one or more cell references as arguments. PowerApps の数式には、指定された他の引数を使用して作成したテーブルを返すものもあります。Some formulas in PowerApps return a table that reflects the other arguments that you specify. たとえば、次のような数式を作成できます。For example, you might create a formula:

  • Patch 関数が受け取る複数の引数の 1 つとしてテーブルを指定することで、テーブル内のレコードを更新する。to update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • AddColumns 関数、 DropColumns 関数、または RenameColumns 関数の引数としてテーブルを指定することで、テーブル内の列の追加、削除、名前の変更を行う。to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. これらの関数によって元のテーブルが変更されることはありません。None of those functions modifies the original table. 指定された他の引数に基づいて別のテーブルが作成されて返されます。Instead, the function returns another table based on the other arguments that you specify.

テーブルの要素Elements of a table

レコードRecords

各テーブルには、ある人、場所、または物事に関する 1 つ以上のカテゴリの情報が格納されます。Each record contains at least one category of information for a person, a place, or a thing. 上記の例では、製品 (Chocolate (チョコレート)Bread (パン)Water (水) ) ごとにレコードがあり、各情報カテゴリ (Price (価格)Quantity on Hand (在庫数量)Quantity on Order (注文数量) ) に対応した列があります。The example above shows a record for each product (Chocolate, Bread, and Water) and a column for each category of information (Price, Quantity on Hand, and Quantity on Order).

数式でレコードを参照する際は、テーブルとは切り離して、中かっこを使用してレコードそのものを記述できます。In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. たとえば、次のレコード {Name:"いちご"、価格:7.99} はテーブルに関連付けられていません。For example, this record { Name: "Strawberries", Price: 7.99 } isn't associated with a table. この例では、NamePrice などのフィールド名が二重引用符で囲まれていないことに注意してください。Note that field names, such as Name and Price in that example, aren't enclosed in double quotation marks.

フィールドFields

フィールドは、レコードに含まれる個々の情報です。A field is an individual piece of information in a record. フィールドは特定のレコードの列に格納された値として捉えることができます。You can visualize this sort of field as a value in a column for a particular record.

コントロールの場合と同様、レコードのフィールドを参照する際は、レコードに .Just as with a control, you refer to a field of a record by using the . 演算子を付けます。operator on the record. たとえば、First(Products).Name と指定すると、Products テーブル内の 1 つ目のレコードの Name フィールドが返されます。For example, First(Products).Name returns the Name field for the first record in the Products table.

フィールドには、 GroupBy 関数の例が示すように、別のレコードやテーブルを格納できます。A field can contain another record or table, as the example for the GroupBy function shows. レコードとテーブルは入れ子構造にすることができ、入れ子レベルの数に制限はありません。You can nest as many levels of records and tables as you want.

Columns

列は、テーブル内の 1 つ以上のレコードに設定された同じフィールドを指します。A column refers to the same field for one or more records in a table. 上記の例では、各製品に価格フィールドがあり、すべての製品で同じ列に価格が格納されています。In the above example, each product has a price field, and that price is in the same column for all products. 上のテーブルには 4 つの列があります。一番上には左から順に下記のように示されています。The above table has four columns, shown horizontally across the top:

  • NameName
  • PricePrice
  • Quantity on HandQuantity on Hand
  • Quantity on OrderQuantity on Order

列の名前には、その列のフィールドの内容が反映されています。The column's name reflects the fields in that column.

列内にあるすべての値はデータ型が同じです。All values within a column are of the same data type. 上記の例では、"Quantity on Hand" 列には常に数値が格納され、いずれかのレコードに "12 units" などの文字列を含めることはできません。In the above example, the "Quantity on Hand" column always contains a number and can't contain a string, such as "12 units," for one record. また、どの列も値を 空白 にすることができます。The value of any field may also be blank.

他のツールでは、列が "フィールド" と呼ばれることもあります。You may have referred to columns as "fields" in other tools.

注意

名前にスペースが使われている列を含む SharePoint および Excel のデータ ソースの場合、PowerApps ではスペースが "_x0020_" に置き換えられます。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.

テーブルTable

テーブルは 1 つ以上のレコードで構成されます。各レコードは複数のフィールドで構成され、フィールドにはレコード全体で一貫したフィールド名が使用されます。A table comprises one or more records, each with multiple fields that have consistent names across the records.

データ ソースやコレクションに格納されているテーブルにもすべて名前があります。この名前は、テーブルを参照したり、引数として受け取る関数にテーブルを渡したりする際に使用します。Any table that's stored in a data source or a collection has a name, which you use to refer to the table and pass it to functions that take tables as arguments. 関数や数式の結果をテーブルにすることもできます。Tables can also be the result of a function or a formula.

数式でテーブルを表すには、次の例に示すように、 Table 関数を使用してレコードのセットを指定します。各レコードは中かっこで囲みます。As in the following example, you can express a table in a formula by using the Table function with a set of records, which you express in curly braces:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

角かっこを使って、列が 1 つのテーブルを定義することもできます。You can also define a single-column table with square brackets. 上と同じテーブルを次の方法で記述できます。An equivalent way to write the above:

[ "Strawberry", "Vanilla" ]

テーブルの数式Table formulas

Excel と PowerApps は、似た方法で数式を使用してテキストの数値と文字列を操作します。In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • Excel では、セル A1 に「42」などの値を入力し、別のセルに「A1+2」などの数式を入力すると 44 という値が表示されます。In Excel, type a value, such as 42, in cell A1, and then type a formula, such as A1+2, in another cell to show the value of 44.
  • PowerApps では、Slider1Default プロパティを 42 に設定し、ラベルの Text プロパティを Slider1.Value + 2 に設定すると、44 という値が表示されます。In PowerApps, set the Default property of Slider1 to 42, and set the Text property of a label to Slider1.Value + 2 to show the value of 44.

どちらの場合も、引数の値 (上の例では、セル A1Slider1 の数値) を変更すると、計算された値が自動的に変更されます。In both cases, the calculated value changes automatically if you change the values of the arguments (for example, the number in cell A1 or the value of Slider1).

同様に、数式を使用して、テーブルやレコード内のデータにアクセスし、操作することができます。Similarly, you can use formulas to access and manipulate data in tables and records. たとえば、引数としてテーブルの名前を使用できる数式があります。Min(Catalog, Price) という数式は Catalog テーブルの Price 列内の最小値を返します。You can use names of tables as arguments in some formulas, such as Min(Catalog, Price) to show the lowest value in the Price column of the Catalog table. また、テーブル全体を戻り値として返す数式もあります。RenameColumns(Catalog, "Price", "Cost") という数式では、Catalog テーブルのすべてのレコードを返し、Price 列の名前を Cost に変更します。Other formulas provide whole tables as return values, such as RenameColumns(Catalog, "Price", "Cost"), which returns all the records from the Catalog table but changes the name of the Price column to Cost.

数値の場合と同様、テーブルやレコードが含まれた数式でも、基になるテーブルやレコードが変更されると自動的に再計算が行われます。Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. Catalog テーブルに格納されている製品のコストが以前の最小値よりも小さくなった場合、 Min 数式ではそれに合わせて自動的に値が変更されます。If the cost of a product in the Catalog table is lowered below the previous minimum, the return value of the Min formula will automatically change to match it.

単純な例をいくつか見てみましょう。Let's walk through some simple examples.

  1. スマートフォン用の空のアプリを作成し、他のコントロールを含む垂直方向の ギャラリー コントロールを追加します。Create a blank app for a phone, and add a vertical Gallery control that contains other controls.

    既定では、画面には CustomGallerySample という名前のテーブルから取得したプレースホルダー テキストが表示されます。By default, the screen shows placeholder text from a table named CustomGallerySample. 画面の [ギャラリー] コントロールの Items プロパティは自動的にこのテーブルに設定されます。The Items property of the screen's Gallery control is automatically set to that table.

    注意

    一部のコントロールは、分かりやすいように配置変更され、拡大されています。Some controls have been rearranged and enlarged for illustration purposes.

  2. Items プロパティにテーブルの名前を設定する代わりに、次の例のように、テーブルの名前を引数として受け取る数式を設定します。Instead of setting the Items property to the name of a table, set it to a formula that includes the name of the table as an argument, as in this example:

    Sort(CustomGallerySample, SampleHeading, Descending)

    この数式では Sort 関数が使用されています。Sort 関数は、1 つ目の引数としてテーブルの名前を受け取り、2 つ目の引数としてそのテーブル内の列の名前を受け取ります。This formula incorporates the Sort function, which takes the name of a table as its first argument and the name of a column in that table as its second argument. また、省略可能な 3 つ目の引数も用意されており、データを降順で並べ替えるように指定できます。The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  3. 下の例のように、前の手順で作成した数式を引数として受け取ってテーブルを返す数式を Items プロパティに設定します。Set the Items property to a formula that takes the formula from the previous step as an argument and returns a table, as in this example:

    FirstN(Sort(CustomGallerySample, SampleHeading, Descending), 2)

    この数式では、 FirstN 関数を使って、テーブルから特定の数のレコードを取得しています。In this formula, you use the FirstN function to show a particular number of records in a table. FirstN の 1 つ目の引数として Sort 関数を使用し、2 つ目の引数として数字 (この例では 2) を指定しています。この数字は返すレコードの数を表しています。You use the Sort function as the first argument to FirstN and a number (in this case, 2) as the second argument, which specifies how many records to show.

    全体の数式は、CustomGallerySample テーブルの最初の 2 つのレコードを格納して SampleHeading 列で降順に並べ替えたテーブルを返します。The entire formula returns a table that contains the first two records of the CustomGallerySample table, sorted by the SampleHeading column in descending order.

テーブルの関数とコントロール プロパティTable functions and control properties

Lower 関数について検討します。Consider the Lower function. 変数 welcome にテキスト文字列 「Hello, World」 が含まれている場合、数式 Lower(welcome は、 hello, world を返します。If the variable welcome contains the text string "Hello, World", the formula Lower( welcome ) returns "hello, world". この関数では、決してその変数の値を変更しません。This function doesn't, in any way, change the value in that variable. Lower は、入力と生成の出力を処理するだけの純粋な関数であり、Lower is a pure function in that it only processes input and produces output. 副作用はありません。That's all; it has no side effects. Excel のすべての関数と PowerApps でのほとんどの関数は、純粋な関数で、ブックまたはアプリを自動的に再計算することができます。All functions in Excel and most functions in PowerApps are pure functions, which allow the workbook or the app to be recalculated automatically.

PowerApps には、同じ方法でテーブルを操作する一連の関数が用意されています。PowerApps offers a set of functions that operate on tables in the same manner. これらの関数は、テーブルを入力として受け取り、データのテーブル全体をフィルター処理、並べ替え、変換、縮小、および集計します。These functions take tables as input and filter, sort, transform, reduce, and summarize entire tables of data. 実際には、少なくとも1つの値を受け取る他の多くの関数は、単一列のテーブルを入力として受け取ることができます。In fact, Lower and many other functions that typically take a single value can also take a single-column table as input.

  • SortFilter - レコードの並べ替えとフィルター処理を行います。Sort, Filter - Sorts and filters records.
  • FirstNLastN - テーブル内の最初の N 個または最後の N 個のレコードを返します。FirstN, LastN - Returns the first N or last N records of the table.
  • AbsSqrtRoundRoundUpRoundDown - 単一列テーブルの各レコードに対して行う算術演算で、演算結果が含まれた単一列テーブルを返します。Abs, Sqrt, Round, RoundUp, RoundDown - Arithmetic operations on each record of a single-column table, resulting in a single-column table of results.
  • LeftMidRightReplaceSubstituteTrimLowerUpperProper - 単一列テーブルの各レコードに対して行う文字列操作で、操作後の文字列が含まれた単一列テーブルを返します。Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - String manipulations on each record of a single-column table, resulting in a single-column table of strings.
  • Len - 文字列が格納されている 1 列を調べて、各文字列の長さを格納した単一列テーブルを返します。Len - For a column of strings, returns a single-column table that contains the length of each string.
  • Concatenate - 文字列が格納されている複数の列を連結して、文字列の単一列テーブルを返します。Concatenate - Concatenates multiple columns of strings, resulting in a single-column table of strings.
  • AddColumnsDropColumnsRenameColumnsShowColumns - テーブルの列を操作し、元のテーブルとは異なる列で構成された新しいテーブルを返します。AddColumns, DropColumns, RenameColumns, ShowColumns - Column manipulation of the table, resulting in a new table with different columns.
  • Distinct - 重複したレコードを削除します。Distinct - Removes duplicates records.
  • Shuffle - レコードをランダムな順序でシャッフルします。Shuffle - Shuffles records into a random order.
  • HashTags - 文字列にハッシュタグがないかを検索します。HashTags - Searches for hashtags in a string.
  • Errors - データ ソースを使用している場合にエラー情報を提供します。Errors - Provides error information when you work with a data source.

これらの関数の多くは、1列のテーブルを入力として受け取ります。Many of these functions take a single-column table as their input. テーブル全体に列が1つしかない場合は、名前で指定できます。If an entire table has only one column, you can specify it by name. テーブルに複数の列がある場合は、テーブルの構文を使用して、列のいずれかを指定できます If a table has multiple columns, you can specify one of those columns by using Table.Column syntax. たとえば、 Products.Nameは、 Productsテーブルの名前値のみを持つ単一列テーブルを返します。For example, Products.Name returns the single-column table of only Name values from the Products table.

AddColumnsRenameColumnsShowColumns 、または DropColumns 関数を使用して、必要なテーブルを完全に作り直すことができます。You can completely reshape a table however you want by using the AddColumns, RenameColumns, ShowColumns, or DropColumns function. 繰り返しますが、これらの関数は出力のみを変更し、ソースは変更しません。Again, these functions change only their output, not their source.

コントロールのプロパティは、テーブルにすることもできます。Properties of controls can also be tables:

  • Items -ギャラリー、リストボックス、およびコンボボックスに適用されます。Items - Applies to galleries, list boxes, and combo boxes. このプロパティは、ギャラリーまたはリストに表示されるテーブルを定義します。This property defines the table that the gallery or the list shows.
  • SelectedItems -リストボックスとコンボボックスに適用されます。SelectedItems - Applies to list boxes and combo boxes. このプロパティは、 Selectmultipleが有効になっている場合にユーザーが選択した項目のテーブルを定義します。This property defines the table of items that the user has selected if SelectMultiple is enabled.

動作の数式Behavioral formulas

その他の関数は、データを変更するように設計されており、副作用があります。Other functions are specifically designed to modify data and have side effects. これらの関数は純粋でないため、慎重に構築する必要があります。また、アプリ内で自動的に値を再計算することはできません。Because these functions aren't pure, you must build them carefully, and they can't participate in automatically recalculating values in the app. これらの関数は、動作の数式内のみで使用できます。You can use these functions only within behavioral formulas.

  • CollectClearClearCollect - コレクションを作成、クリアし、それにデータを追加します。Collect, Clear, ClearCollect - Creates collections, clears them, and adds data to them.
  • Patch -レコード内の1つまたは複数のフィールドを変更します。Patch - Modifies one or more fields in a record.
  • UpdateUpdateIf - 指定した 1 つ以上の条件に一致するレコードを更新します。Update, UpdateIf - Updates records that match one or more criteria that you specify.
  • RemoveRemoveIf - 指定した 1 つ以上の条件に一致するレコードを削除します。Remove, RemoveIf - Deletes records that match one or more criteria that you specify.

レコードの数式Record formulas

レコード単位でデータを計算したり、個々のレコードを引数として受け取ったり、戻り値として返したりする数式を作成できます。You can also build a formula that calculates data for an individual record, takes an individual record as an argument, and provides an individual record as a return value. 前のセクションで使用したギャラリーの例に戻り、Gallery1.Selected プロパティを使用して、ギャラリーでユーザーが選択した任意のレコードから情報を取得しましょう。Returning to our gallery example above, let's use the Gallery1.Selected property to display information from whatever record the user selects in that gallery.

  1. 追加、 ボタン 、設定とその OnSelect に次の式のプロパティ。Add a Button, and set its OnSelect property to this formula:
    Collect( SelectedRecord, Gallery1.Selected )Collect( SelectedRecord, Gallery1.Selected )

  2. Alt キーを押しながら、ボタンを選択します。While holding down the Alt key, select the button.

  3. [ファイル] メニューの [コレクション] を選択します。In the File menu, select Collections.

この数式で返されるレコードには、ギャラリーで選択されているレコードのデータだけでなく、そのギャラリーにある各コントロールも格納されます。This formula returns a record that includes not only the data from the record that's currently selected in the gallery but also each control in that gallery. 上の例では、元のテーブルの SampleText 列に対応する SampleText 列と、その列のデータを表示するラベルに相当する Subtitle1 列の両方がレコードに含まれています。For example, the record contains both a SampleText column, which matches the SampleText column in the original table, and a Subtitle1 column, which represents the label that shows the data from that column. Subtitle1 列のテーブル アイコンを選択すると、そのデータの詳細が表示されます。Select the table icon in the Subtitle1 column to drill into that data.

注意

このトピックで指定する要素以外の要素を追加した場合、Subtitle1 列には Subtitle2 または類似する名前が付けられる場合があります。The Subtitle1 column might be named Subtitle2 or similar if you've added elements other than those that this topic specifies.

選択したレコードが用意できたので、そこから . 演算子で個々のフィールドを抽出できます。Now that you have the selected record, you can extract individual fields from it with the . operator.

  1. ラベル コントロールを追加し、ギャラリーとボタンの下に移動します。Add a Label control, and then move it under the gallery and the button.

  2. ラベルの Text プロパティに次の式を設定します。Set the label's Text property to this expression:
    "Selected: " & Gallery1.Selected.SampleHeading"Selected: " & Gallery1.Selected.SampleHeading

レコードである Selected プロパティを受け取り、そこから SampleHeading プロパティを抽出しました。You've taken the Selected property, which is a record, and extracted the SampleHeading property from it.

関連する名前付きの値の汎用コンテナーとしてレコードを使用することもできます。You can also use a record as a general-purpose container for related named values.

  • UpdateContext 関数や Navigate 関数を使用した数式を作成する場合は、レコードを使用して、更新するコンテキスト変数を収集できます。If you build a formula around the UpdateContext and Navigate functions, use a record to gather the context variables that you want to update.
  • 編集フォーム コントロールで Updates プロパティを使用して、ユーザーがフォームで加えた変更を収集できます。Use the Updates property on an Edit form control to gather the changes that have been made by the user in a form.
  • Patch 関数を使用し、データ ソースを更新してレコードをマージできます。Use the Patch function to update a data source but also to merge records.

このような場合、このレコードはテーブルには含まれません。In these cases, the record was never a part of a table.

レコードの関数とコントロール プロパティRecord functions and control properties

レコードを返す関数:Functions that return records:

  • FirstNLastN - テーブルの最初のレコードまたは最後のレコードを返します。FirstN, LastN - Returns the first or last record or records of the table.
  • Lookup - テーブル内で、1 つ以上の条件に一致する最初のレコードを返します。Lookup - Returns the first record from a table that matches one or more criteria.
  • Patch - データ ソースを更新するか、レコードをマージします。Patch - Updates a data source or merges records.
  • Defaults - データ ソースの既定値を返します。Defaults - Returns the default values for a data source.

レコードを返すプロパティ:Properties that return records:

  • Selected - ギャラリーとリスト ボックスに適用します。Selected - Applies to galleries and list boxes. 現在選択されているレコードを返します。Returns the currently selected record.
  • Updates - ギャラリーに適用します。Updates - Applies to galleries. ユーザーがデータ エントリ フォームで加えたすべての変更が 1 つにまとめられます。Pulls together all the changes that a user makes in a data-entry form.
  • Update - テキスト入力コントロールやスライダーなどの入力コントロールに適用します。Update - Applies to input controls such as text-input controls and sliders. ギャラリーの個々のプロパティを 1 つにまとめて設定します。Sets up individual properties for the gallery to pull together.

レコード スコープRecord scope

関数の中には、テーブル内のすべてのレコードについて個別に数式を評価して演算を行うものがあります。Some functions operate by evaluating a formula across all the records of a table individually. 数式の結果は、さまざまな方法で使用されます。The formula's result is used in various ways:

  • AddColumns - 追加されるフィールドの値を指定します。AddColumns - Formula provides the value of the added field.
  • AverageMaxMinSumStdevPVarP - 集計する値を指定します。Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.
  • FilterLookup - 該当するレコードを出力に含めるかどうかを指定します。Filter, Lookup - Formula determines if the record should be included in the output.
  • Concat - 連結する文字列を指定します。Concat - Formula determines the strings to concatenate together.
  • Distinct - 値を 1 つ返します。重複したレコードを識別するために使用します。Distinct - Formula returns a value, used to identify duplicate records.
  • ForAllは、副作用がある可能性のある任意の値を返すことができます。ForAll - Formula can return any value, potentially with side effects.
  • Sort - レコードを並べ替える基準となる値を指定します。Sort - Formula provides the value to sort the records on.
  • -Formula は任意の値を返すことができ、副作用が生じる可能性があります。With - Formula can return any value, potentially with side effects.

これらの数式内では、処理するレコードのフィールドを参照できます。Inside these formulas, you can reference the fields of the record being processed. 関数が実行されると、数式を評価するための "レコード スコープ" が作成されます。この範囲にあるレコードのフィールドが最上位の識別子として使用されます。Each of these functions creates a "record scope" in which the formula is evaluated, where the fields of the record are available as top-level identifiers. また、コントロール プロパティやその他の値はアプリのどこからでも参照できます。You can also reference control properties and other values from throughout your app.

例として、次のような Products というテーブルがあるとします。For example, take a table of Products:

アプリでこのサンプルテーブルを作成するには、ボタンを挿入し、そのOnselectプロパティをこの数式に設定してから、ボタンを選択します (PowerApps Studio の Alt キーを押しながらクリックします)。To create this example table in your app, insert a button, set its OnSelect property to this formula, and then select the button (click it while you hold down the Alt key in PowerApps Studio):

Set( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

これらの製品のいずれかについて、より多くの要求があるかどうかを確認するには、次のようにします。To determine whether any of any of these products had more requested than is available:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Filter の 1 つ目の引数は演算対象のレコードがあるテーブルで、2 つ目の引数は数式です。The first argument to Filter is the table of records to operate on, and the second argument is a formula. Filter 関数を実行すると、この数式を評価するためのレコード スコープが作成されます。この範囲にある各レコードのフィールドが評価の対象となります。上の例では、ProductQuantity RequestedQuantity Available です。Filter creates a record scope for evaluating this formula in which the fields of each record are available, in this case Product, Quantity Requested, and Quantity Available. 数式の評価 (この例では比較) によって、関数の結果に各レコードを含めるかどうかが判断されます。The result of the comparison determines if each record should be included in the result of the function:

この例に数式を追加して、各製品の注文数量を計算できます。Adding to this example, we can calculate how much of each product to order:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

上の数式では、計算された列が結果に追加されます。Here we are adding a calculated column to the result. AddColumns では、リクエストされた数量と在庫数量の差の計算に使用するレコード スコープが作成されます。AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

最後に、結果テーブルを目的の列だけに絞り込むことができます。Finally, we can reduce the result table to just the columns that we want:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

上の数式では、二重引用符 (") を使用している箇所と一重引用符 (') を使用している箇所があります。Note that in the above, we used double quotes (") in some places and single quotes (') in other places. 一重引用符は、フィールドやテーブルなどのオブジェクトの値を参照する際に使用します。オブジェクトの名前にはスペースが含まれています。Single quotes are required when referencing the value of an object, such as a field or table, in which the name of the object contains a space. 二重引用符は、オブジェクトの値を参照するのではなく、オブジェクトの値を表す際、特に AddColumns のときのように、オブジェクトがまだ存在しない状況で使用します。Double quotes are used when we are not referencing the value of an object but instead talking about it, especially in situations in which the object does not yet exist, as in the case of AddColumns.

曖昧性の除去Disambiguation

レコード スコープによって追加されたフィールド名は、アプリの別の場所にある同じ名前をオーバーライドします。Field names added with the record scope override the same names from elsewhere in the app. このような状況が発生した場合でも、 @ 曖昧性除去演算子を使用すれば、レコード スコープの外部の値にアクセスできます。When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • 入れ子になったレコード スコープの値にアクセスするには、次のパターンを使用した操作対象のテーブルの名前の @ 演算子を使います。To access values from nested record scopes, use the @ operator with the name of the table being operated upon using this pattern:
    Table [@ フィールド名 ]Table[@FieldName]
  • データ ソース、コレクション、コンテキスト変数などのグローバル値にアクセスするには、 [@ オブジェクト名 ] のパターンを使用します (テーブルは指定しません)。To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

演算対象のテーブルが Filter( テーブル , ... ) のような式である場合は、曖昧性除去演算子を使用することはできません。If the table being operated upon is an expression, such as Filter( Table, ... ), then the disambiguation operator cannot be used. 最も内側のレコード スコープのみが、曖昧性除去演算子を使用せずに、このテーブル式のフィールドにアクセスできます。Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

たとえば、次のようなコレクション X があるとします。For example, imagine having a collection X:

このコレクションは、ClearCollect( X, [1, 2] ) で作成できます。You can create this collection with ClearCollect( X, [1, 2] ).

また、次のようなコレクション Y があります。And another collection Y:

このコレクションは、ClearCollect( Y, ["A", "B"] ) で作成できます。You can create this collection with ClearCollect( Y, ["A", "B"] ).

さらに、次の式を使用して、 Valueという名前のコンテキスト変数を定義します。UpdateContext ({Value: "!"})In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

これらを 1 つにまとめましょう。Let's put it all together. この状況では、次の数式を使用できます。In this context, the following formula:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

次のテーブルが生成されます。produces this table:

数式を詳しく見てみましょう。What is going on here? 最も外側の ForAll 関数によって X のレコード スコープが定義されます。これにより、処理の際に各レコードの Value フィールドにアクセスできます。The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. フィールドには Value という語か X[@Value] を使用してアクセスできます。It can be accessed by simply using the word Value or by using X[@Value].

最も内側の ForAll 関数では、Y のレコード スコープが定義されます。このテーブルにも Value フィールドが定義されているため、ここでも Value を使用して Y のレコード内のフィールドを参照しています。X のフィールドは参照されません。ここで X 内の Value フィールドにアクセスする場合は、曖昧性除去演算子を使用して、もっと長い数式を作成する必要があります。The innermost ForAll function defines another record scope for Y. Since this table also has a Value field defined, using Value here refers to the field in Y's record and no longer the one from X. Here, to access X's Value field, we must use the longer version with the disambiguation operator.

Y は最も内側にあるレコード スコープなので、このテーブルのフィールドにアクセスする際に曖昧性除去は必要ありません。次の数式を使用して同じ結果を返すことができます。Since Y is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

すべての ForAll レコード スコープはグローバル スコープをオーバーライドします。All the ForAll record scopes override the global scope. 定義したコンテキスト変数は、あいまいさのない演算子を使用せずに名前で使用することはできません。The Value context variable we defined isn't available by name without the disambiguation operator. この値にアクセスするには、 [@Value] を使用します。To access this value, use [@Value].

入れ子になったForAll関数は入れ子になった結果テーブルになるため、グループ化を解除して結果を平坦化します。Ungroup flattens the result because nested ForAll functions result in a nested result table.

単一列テーブルSingle-column tables

テーブルから1つの列を操作するには、次の例のようにShowcolumns関数を使用します。To operate on a single column from a table, use the ShowColumns function as in this example:

ShowColumns( Products, "Product" )

この数式は、次の単一列テーブルを生成します。This formula produces this single-column table:

別の方法としては、table . columnを指定します。これにより、テーブルからだけの単一列テーブルが抽出されます。For a shorter alternative, specify Table.Column, which extracts the single-column table of just Column from Table. たとえば、この数式では、 Showcolumnsを使用した場合とまったく同じ結果が得られます。For example, this formula produces exactly the same result as using ShowColumns.

Products.Product

インラインレコードInline records

レコードを表すには、名前付きフィールドの値を中かっこで囲みます。You express records by using curly braces that contain named field values. たとえば、次の数式で、このトピックの冒頭に出てきたテーブル内の 1 つ目のレコードを表すことができます。For example, you can express the first record in the table at the start of this topic by using this formula:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

次の例に示すように、数式を他の数式に埋め込むこともできます。You can also embed formulas within other formulas, as this example shows:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

次の例に示すように、中かっこを入れ子にすると、レコードを入れ子にすることができます。You can nest records by nesting curly braces, as this example shows:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

空白やコロンなどの特殊文字が含まれている列名は一重引用符で囲みます。Enclose each column name that contains a special character, such as a space or a colon, in single quotes. 列名の中で一重引用符を使用するには、一重引用符を二重に使用します。To use a single quote within a column name, double it.

Price 列内の値にドル記号などの通貨記号が含まれていない点に注意してください。Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. この書式は、値が表示される際に適用されます。That formatting will be applied when the value is displayed.

インラインテーブルInline tables

テーブルの作成には、 Table 関数とレコードのセットを使用します。You can create a table by using the Table function and a set of records. このトピックの冒頭で出てきたテーブルを、次の数式で表すことができます。You can express the table at the start of this topic by using this formula:

Table( 
    { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
    { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
    { Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } 
)

また、次の数式で、テーブルを入れ子にすることができます。You can also nest tables:

Table( 
    { Name: "Chocolate", 
      'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                                 { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
    }
)

インライン値テーブルInline value tables

単一列テーブルを作成するには、値を角かっこで指定します。You can create single-column tables by specifying values in square brackets. 結果として返されるテーブルには、Value という名前の列が 1 つだけ含まれています。The resulting table has a single column, named Value.

たとえば、は[ 1, 2, 3, 4 ] Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )と同じで、次のテーブルを返します。For example, [ 1, 2, 3, 4 ] is equivalent to Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) and returns this table: