GroupBy および Ungroup 関数
適用対象: キャンバス アプリ モデル駆動型アプリ Power Pages
テーブル のレコード のグループ化とグループ化解除を行います。
Description
GroupBy 関数は、1 つ以上の列 の値に基づいてレコードを一緒にグループ化したテーブルを返します。 同じグループのレコードは単一のレコードに配置され、残りの列の入れ子になったテーブルを保持する列が追加されます。
Ungroup 関数は、GroupBy プロセスを逆にします。 この関数は、一緒にグループ化されていたレコードをそれぞれのレコードに分割してテーブルを返します。
GroupBy を使用してレコードをグループ化し、返されたテーブルを変更し、次に Ungroup を使用して変更されたテーブルのレコードのグループ化を解除することができます。 たとえば、次の方法でレコードのグループを削除できます。
- GroupBy 関数を使用します。
- Filter 関数を使用して、レコードのグループ全体を削除します。
- Ungroup 関数を使用します。
グループ化に基づいて結果を集計することもできます。
- GroupBy 関数を使用します。
- Sum、Average、その他の集計関数と共に AddColumns 関数を使用して、グループ テーブルの集計結果である新しい列を追加します。
- DropColumns 関数を使用してグループ テーブルをドロップします。
Ungroup は、GroupBy に供給されたレコードの元の順序を維持しようとします。 これは常にできるとは限りません (たとえば、元のテーブルに空白レコードが含まれている場合です)。
テーブルは、文字列や数値と同じように、Power Apps の値です。 関数の引数としてテーブルを指定し、関数はテーブルを返すことができます。 GroupBy および Ungroup はテーブルを変更せず、代わりに、テーブルを引数として受け取り、別のテーブルを返します。 詳細については、テーブルの使用 に関するページを参照してください。
注意
バージョン 3.24042 より前の Power Apps では、列名は二重引用符を使用したテキスト文字列で指定され、データ ソースに接続されている場合は論理名である必要がありました。 たとえば、引用符のない表示名 名前 の代わりに、二重引用符で囲まれた論理名 "cr43e_name" が使用されました。 SharePoint およびスペースを含む列名を含む Excel データ ソースの場合、各スペースは "_x0020_" で指定されます。たとえば、"列名" は "Column_x0020_Name" となります。 このバージョン以降、すべてのアプリはこの記事で説明されている新しい構文に自動的に更新されました。
構文
GroupBy( Table, ColumnName1 [, ColumnName2, ... ], GroupColumnName )
- Table - 必須。 グループ化するテーブル。
- ColumnName(s) - 必須。 レコードをグループ化するテーブル内の列名。 これらの列は、結果のテーブルの列になります。
- GroupColumnName - 必須。 ColumnName(s) にないレコード データの記憶域の列名。
Ungroup( Table, GroupColumnName )
- Table - 必須。 グループ化を解除するテーブル。
- GroupColumnName - 必須。 GroupBy 関数を用いたレコード データの設定を含む列。
使用例
コレクションの作成
ClearCollect( CityPopulations,
{ City: "London", Country: "United Kingdom", Population: 8615000},
{ City: "Berlin", Country: "Germany", Population: 3562000},
{ City: "Madrid", Country: "Spain", Population: 3165000},
{ City: "Rome", Country: "Italy", Population: 2874000},
{ City: "Paris", Country: "France", Population: 2273000},
{ City: "Hamburg", Country: "Germany", Population: 1760000},
{ City: "Barcelona", Country: "Spain", Population: 1602000},
{ City: "Munich", Country: "Germany", Population: 1494000},
{ City: "Milan", Country: "Italy", Population: 1344000}
)
Alt キーを押しながら、オリジナルボタンを選択します。
次のデータが含まれた CityPopulations という名前のコレクション が作成されました。
このコレクションを表示するには、ファイル メニューのコレクションを選択し、次に CityPopulations コレクションを選択します。 コレクション内の最初の 5 つのレコードが表示されます。
レコードのグループ化
他のボタンを追加し、その Text プロパティを "グループ" に設定します。
このボタンの OnSelect プロパティを次の数式に設定します。
ClearCollect( CitiesByCountry, GroupBy( CityPopulations, Country, Cities ) )
Alt キーを押しながら、グループ ボタンを選択します。
前のコレクションのレコードが、国列によってグループ化されている CitiesByCountry という名前のコレクションが作成されました。
このコレクションに含まれている最初の 5 つのレコードを表示するには、ファイル メニューのコレクションを選択します。
国/地域の市区町村の人口を表示するには、その国/地域 (例: ドイツ) の市区町村列内のテーブル アイコンを選択します。
レコードのフィルターおよびグループ化解除
他のボタンを追加し、その Text プロパティを設定し、ボタンが "フィルター" と表示されるようにします。
このボタンの OnSelect プロパティを次の数式に設定します。
ClearCollect( CitiesByCountryFiltered, Filter( CitiesByCountry, "e" in Country ) )
Alt キーを押しながら、追加したボタンを選択します。
名前に "e" を持つ (つまり、スペインまたはイタリアではない) これらの国のみを含む、CitiesByCountryFiltered という名前の 3 つ目のコレクションが作成されました。
もう 1 つボタンを追加し、その Text プロパティを設定し、ボタンが "グループ化の解除" と表示されるようにします。
このボタンの OnSelect プロパティを次の数式に設定します。
ClearCollect( CityPopulationsUngrouped, Ungroup( CitiesByCountryFiltered, Cities ) )
結果は次のようになります。
結果の集計
グループ化したテーブルで、結果をコンパイルすることもできます。 この例では、各国や地域の主な市区町村の人口を合計します。
他のボタンを追加し、その Text プロパティを設定し、"合計" と表示されるようにします。
"合計" ボタンの OnSelect プロパティを次の数式に設定します。
ClearCollect( CityPopulationsSum, AddColumns( CitiesByCountry, 'Sum of City Populations', Sum( Cities, Population ) ) )
結果は次のようになります。
AddColumns では、ベースである CitiesByCountry コレクションで始まり、新しい列である市区町村人口の合計が追加されます。 この列の値では、数式 Sum( Cities, Population ) に基づいて、行単位で計算されます。 AddColumns は、各行に市区町村列 (テーブル) の値を提供し、Sum は、このサブ テーブルの各行に人口を追加します。
これで、必要な合計が得られたので、DropColumns を使用してサブ テーブルを削除できます。
他のボタンを追加し、"SumOnly" と表示されるように、その Text プロパティを設定します。
"SumOnly" ボタンの OnSelect プロパティを次の数式に設定します。
ClearCollect( CityPopulationsSumOnly, DropColumns( CityPopulationsSum, Cities ) )
結果は次のようになります。
このテーブルのグループ化を解除する必要がなかったことに注意してください。