Функции GroupBy и Ungroup

Применимо к: приложениям на основе холста приложениям на основе модели

Эти функции группируют записитаблицы и отменяют их группировку.

Description

Функция GroupBy возвращает таблицу, записи в которой сгруппированы по значениям в одном или нескольких столбцах. Записи каждой группы помещаются в одну запись, к которой в новом столбце добавляется вложенная таблица со значениями остальных столбцов.

Функция Ungroup выполняет действие, обратное функции GroupBy. Эта функция возвращает таблицу, в которой разделены на отдельные записи все данные, которые могли быть сгруппированы.

Вы можете сгруппировать записи с помощью GroupBy, затем изменить полученную таблицу, и разгруппировать записи измененной таблицы с помощью Ungroup. Например, так можно удалить некоторую группу записей:

  • Выполните функцию GroupBy.
  • Выполните функцию Filter, чтобы удалить сразу целую группу записей.
  • Выполните функцию Ungroup.

Также можно получить статистические данные на основе группирования.

  • Выполните функцию GroupBy.
  • Выполните функцию AddColumns вместе с Sum, Average или другими статистическими функциями, чтобы добавить новый столбец со статистическими данными по таблицам групп.
  • Выполните функцию DropColumns, чтобы удалить таблицы группы.

Ungroup старается восстановить исходный порядок записей, в котором они передавались в функцию GroupBy. Иногда это невозможно (например, если исходная таблица содержит пустые записи).

Таблица в Power Apps считается значением, как любая строка или число. Вы можете указать таблицу в качестве аргумента для функции, и функция может возвращать таблицу. GroupBy и Ungroup не изменяют исходную таблицу. Они принимают таблицу в качестве аргумента и возвращают новую таблицу. Подробнее см. в описании работы с таблицами.

Заметка

В Power Apps до версии 3.24042 имена столбцов задавались текстовой строкой с использованием двойных кавычек, а при подключении к источнику данных они также должны были быть логическими именами. Например, вместо отображаемого имени Имя без кавычек использовалось логическое имя "cr43e_name" в двойных кавычках. Для источников данных SharePoint и Excel, содержащих имена столбцов с пробелами, каждый пробел был указан с помощью "_x0020_", например "Имя столбца" как "Имя_x0020_столбца". После этой версии все приложения были автоматически обновлены до нового синтаксиса, описанного в этой статье.

Синтаксис

GroupBy( Table, ColumnName1 [, ColumnName2, ... ], GroupColumnName )

  • таблица — обязательный аргумент. Таблица, которую нужно сгруппировать.
  • ColumnName(s) — обязательный аргумент. Имена столбцов из таблицы Table, по которой следует сгруппировать записи. Эти столбцы становятся столбцами в итоговой таблице.
  • GroupColumnName — обязательный аргумент. Имя столбца для хранения данных, не включенных в столбцы ColumnName.

Ungroup( Table, GroupColumnName )

  • таблица — обязательный аргумент. Таблица, которую нужно разгруппировать.
  • GroupColumnName — обязательный аргумент. Столбец, содержащий данные о записях, созданные функцией GroupBy.

Примеры

Создание коллекции

  1. Добавьте кнопку и задайте для нее свойство Text, чтобы она отображала текст Исходные данные.
  2. Задайте для свойства OnSelect кнопки Исходные данные такую формулу:
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}
)
  1. Удерживая клавишу ALT, нажмите кнопку Исходные данные.

    Вы только что создали коллекцию с именем CityPopulations, которая содержит такие данные:

    Пример CityPopulations.

  2. Чтобы отобразить эту коллекцию, выберите пункт Коллекции в меню Файл, затем выберите коллекцию CityPopulations. Отображаются первые пять записей из этой коллекции:

    Коллекция CityPopulations.

Записи группы

  1. Добавьте еще одну кнопку и задайте для ее свойства Text значение Группировка.

  2. Задайте для свойства OnSelect этой кнопки такую формулу:

    ClearCollect( CitiesByCountry, GroupBy( CityPopulations, Country, Cities ) )

  3. Удерживая клавишу ALT, нажмите кнопку Группировка.

    Вы только что создали коллекцию с именем CitiesByCountry, в которой записи из предыдущей коллекции сгруппированы по столбцу Country.

    Города сгруппированы.

  4. Чтобы отобразить первые пять записей из этой коллекции, выберите пункт Коллекции в меню Файл.

    Города по странам/регионам.

  5. Чтобы отобразить население городов одной страны/региона, выберите значок таблицы в столбце Cities для строки с этой страной/регионом, например, Germany (Германия):

    Население — Германия.

Фильтрация и разгруппировка записей

  1. Добавьте еще одну кнопку и задайте для нее свойство Text, чтобы она отображала текст Фильтрация.

  2. Задайте для свойства OnSelect этой кнопки такую формулу:

    ClearCollect( CitiesByCountryFiltered, Filter( CitiesByCountry, "e" in Country ) )

  3. Удерживая клавишу ALT, нажмите добавленную кнопку.

    Вы только что создали третью коллекцию с именем CitiesByCountryFiltered, которая включает те страны, в имени которых есть буква "e" (мы исключили, например, Испанию (Spain) и Италию (Italy)).

    CitiesByCountryFiltered.

  4. Добавьте еще одну кнопку и задайте для нее свойство Text, чтобы она отображала текст Разгруппировка.

  5. Задайте для свойства OnSelect этой кнопки такую формулу:

    ClearCollect( CityPopulationsUngrouped, Ungroup( CitiesByCountryFiltered, Cities ) )

    Вы получите такой результат:

    Города по странам/регионам после разгруппировки.

Статистическая обработка результатов

Другая операция, которую мы можем выполнить над сгруппированной таблицей, — это компиляция результатов. В этом примере мы просуммируем население крупнейших городов в каждой стране или регионе.

  1. Добавьте еще одну кнопку и задайте для нее свойство Text, чтобы она отображала текст "Сумма".

  2. Задайте для свойства OnSelect кнопки "Сумма" эту формулу:

    ClearCollect( CityPopulationsSum, AddColumns( CitiesByCountry, 'Sum of City Populations', Sum( Cities, Population ) ) )

    Вы получите такой результат:

    Сумма по городам.

    Функция AddColumns принимает базовую коллекцию CitiesByCountry и добавляет к ней новый столбец Sum of City Populations. Значения для этого столбца вычисляются отдельно для каждой строки по формуле Sum( Cities, Population ). AddColumns предоставляет значение (таблицу) для столбца Cities в каждой строке, а затем функция Sum суммирует значения Population из каждой строки этой вложенной таблицы.

    Теперь мы получили нужную сумму и можем удалить вложенные таблицы с помощью функции DropColumns.

  3. Добавьте еще одну кнопку и задайте для нее свойство Text, чтобы на ней отображался текст Только сумма.

  4. Задайте для свойства OnSelect кнопки Только сумма эту формулу:

    ClearCollect( CityPopulationsSumOnly, DropColumns( CityPopulationsSum, Cities ) )

    Вы получите такой результат:

    Сумма по странам.

    Обратите внимание, что мы обошлись без разгруппировки этой таблицы.