PowerApps におけるテーブルとレコードについてUnderstand tables and records in PowerApps

作成したアプリから、Microsoft Excel、SharePoint、SQL Server など、レコード形式やテーブル形式でデータを格納するソースにアクセスして情報を取得することができます。You can create an 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: "Strawberries", Price: 7.99 } のように書きますが、これはテーブルとは関連付けられていません。For example, this record { Name: "Strawberries", Price: 7.99 } isn't associated with a table.

フィールド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 のデータ ソースの場合、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.

テーブル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" } )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" ][ "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. テキスト ギャラリー コントロールを追加し、その Items プロパティをテーブルの名前に設定します。Add a Text gallery control, and set its Items property to the name of a table.

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

    注: 一部のコントロールは例示の目的で配置を変更して拡大しています。Note: 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(TextualGallerySample, Heading, Descending) Sort(TextualGallerySample, Heading, 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(TextualGallerySample, Heading, Descending), 2) FirstN(Sort(TextualGallerySample, Heading, 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.

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

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

PowerApps の多くの関数が、テーブル名を引数として受け取り、同じデータを格納した別のテーブルを作成し、他の引数に基づいてそのテーブルを操作したうえで結果として返します。Many functions in PowerApps take the name of a table as an argument, create a second table that contains the same data, manipulate the new table based the other arguments, and then return the result. このような関数では、単にデータ ソースであっても元のテーブルに変更を加えることはありません。These functions don't modify the original table, even if it's a data source.

  • 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 つの列を受け取る関数であっても、複数の列で構成されたテーブルに対して実行できます。You can run a function on a table that contains multiple columns, even if the function requires a single column as an argument. 複数列テーブルから 1 つの列を抽出するには、次の例のように、使用したい関数の引数として ShowColumns 関数を使用します。To extract a single column from a multi-column table, use the ShowColumns function as an argument for the function that you want to use, as in this example:
Lower( ShowColumns( Products, "Name" ) )Lower( ShowColumns( Products, "Name" ) )

この数式は、Products テーブルの Name 列からすべてのデータを取得して単一列テーブルを作成し、大文字を小文字に変換します。This formula creates a single-column table that contains all the data from the Name column of the Products table but converts any uppercase letters to lowercase letters. AddColumns 関数、RenameColumns 関数、DropColumns 関数の引数としてテーブルを指定すると、必要な形にテーブルを再構成することができます。If you specify a table as an argument for the AddColumns, RenameColumns, or DropColumns function, you can completely reshape that table however you want.

これらの関数の引数としてデータ ソースを指定すると、データ ソースのレコードに変更が加えられ、通常はその新しい値がテーブルとして返されます。If you specify a data source as an argument for one of these functions, it will modify the records of that data source and, in general, return the data source's new value as a table.

  • CollectClearClearCollect - コレクションの作成、クリア、追加を行います。Collect, Clear, ClearCollect - Creates, clears, and adds to a collection.
  • 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.

次のコントロールのプロパティは、テーブルです。The following controls have properties that are tables:

  • Items - ギャラリーとリスト ボックスに適用します。Items - Applies to galleries and list boxes. ギャラリーに表示するテーブルです。Table to display in the gallery.
  • SelectedItems - リスト ボックスに適用します。SelectedItems - Applies to list boxes. ユーザーが選択した項目で構成されたテーブルです。Table of items that the user has selected.

レコードの数式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. ボタンが選択されていない場合は、ボタンをクリックして選択します。もう一度クリックすると、式が実行されます。If the button isn't selected, click it to select it, and then click it again to run the formula.
  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. 上の例では、元のテーブルの Body 列に対応する Body 列と、その列のデータを表示するラベルに相当する Body1 列の両方がレコードに含まれています。For example, the record contains both a Body column, which matches the Body column in the original table, and a Body1 column, which represents the label that shows the data from that column. Body1 列のテーブル アイコンを選択すると、そのデータの詳細が表示されます。Select the table icon in the Body1 column to drill into that data.

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

  1. Esc キーを押して既定のワークスペースに戻り、ギャラリーの下にラベルを追加します。Press Esc to return to the default workspace, and then add a label below the gallery.
  2. ラベルの Text プロパティを次の数式に設定します。Set the Text property of the label to this formula:
    Gallery.Selected.HeadingGallery.Selected.Heading

レコードである Selected プロパティを受け取り、そこから Heading プロパティが抽出されました。You've taken the Selected property, which is a record, and extracted the Heading 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:

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

これらの数式内では、処理するレコードのフィールドを参照できます。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:

これらの製品 (Product) の中に、リクエストされた数量 (Quantity Requested) が在庫数量 (Quantity Available) を超えている製品がないかを調べるには、次の数式を使用します。To determine if any of any of these products had more requested than is available:

Filter( Products, 'Quantity Requested' > 'Quantity 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' )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 desire:

ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )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 the pattern 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" )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" )Ungroup( ForAll( X, ForAll( Y, Value & Text( X[@Value] ) & [@Value] ) ), "Value" )

すべての ForAll レコード スコープはグローバル スコープより優先されます。All the ForAll record scopes override the global scope. 上で定義した Value コンテキスト変数は、曖昧性除去演算子がなければ名前で参照することができません。The Value context variable we defined is not available by name without the disambiguation operator. この値にアクセスするには [@Value] を使用する必要があります。To access this value we must use [@Value].

入れ子になった ForAll 関数は入れ子になったテーブルを返すため、Ungroup で結果をフラット化しています。Ungroup flattens the result, since nested ForAll functions will result in a nested result table.

インライン構文Inline syntax

レコード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 }{ 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 }{ 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 } }{ '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.

テーブル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 } )
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 } ) } )
Table( { Name: "Chocolate",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )

値のテーブル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: