Table.Group: группировка данных в Power Query

Table.Group: группировка данных в Power Query

Группировка в Power Query - ключевой шаг в любом алгоритме. Часто группировка меняет как количество строк, так и количество столбцов. 
Сегодня разберём все типы группировки на примерах.

Данные можно агрегировать разными способами: 

  1. группировать и суммировать данные,
  2. группировать и подсчитывать количество строк, 
  3. группировать и находить среднее значение,
  4. группировать и находить максимальное/минимальное значение,
  5. группировать и находить количество уникальных строк,
  6. группировать "все строки" во вложенную таблицу.

Рассмотрим на примерах разные возможности группировки данных.

Группировка с суммой

Пример: сгруппировать выручку по офисам продаж.

Шаг1: Добавить таблицы в Power Query

Выбираем: вкладка Данные → Получить данные → Из других источников → Из таблицы / диапазона.  Для новых версий Excel: вкладка Данные → Из таблицы / диапазона. 

Шаг2: Группируем и суммируем данные

Выберите в таблице столбец, по которому будем группировать данные. В нашем примере это столбец «Офис продаж». В редакторе Power Query на вкладке "Главная" выбираем "Группировать по":

В диалоговом окне нужно определить столбец, задать имя нового столбца, способ вычисления и столбец для вычисления. 

Power Query по умолчанию предлагает для группировки ранее выбранный нами столбец «Офис продаж». Задаем новое имя «Сумма выручки», из списка операций выбираем способ вычисления «Сумма» и указываем по какому столбцу делать суммирование, в нашем примере это «Выручка».

На выходе получаем выручку, сгруппированную по офисам продаж. 

В качестве дополнительного бонуса функция "Группировать по" удаляет из таблицы все столбцы, которые не были указаны в области "Группировка".

Группировка по нескольким столбцам

Группировку в Power Query можно делать по нескольким столбцам. Пример: посчитать количество сделок по каналам продаж с разбивкой по городам.

После загрузки таблицы в Power Query, вызываем команду "Группировать по" на вкладке Главная.

Анонсы всех видео, статей и полезностей - в нашем Telegram🔥
Присоединяйтесь, обсуждайте и автоматизируйте!

В открывшемся диалоговом окне нам нужно поставить точку напротив «Подробнее», чтобы мы смогли сделать группировку по нескольким столбцам и задать расширенные параметры. Чтобы добавить дополнительные столбцы для группировки, кликаем на кнопку «Добавить группирования»:

После этого задаем новое имя «Количество сделок», из списка операций выбираем способ вычисления «Считать строки». При операции «Считать строки» по какому столбцу делать вычисление указывать не нужно.

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

Группировка "Все строки" (All Rows)

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

Пример: получить данные по лучшим результатам продажам в разрезе по городам и по каналам продаж.

После загрузки таблицы в Power Query, на вкладке "Главная" вызываем команду "Группировать по".

В открывшемся диалоговом окне нам нужно поставить точку напротив «Подробнее». Кликаем на кнопку «Добавить группирования» и добавляем дополнительный столбец «Канал продаж»:

После этого задаем новое имя «Продажи», из списка операций выбираем способ вычисления «Все строки»:

В таблице появился новый столбец – Продажи. Он весьма необычен. Каждая Table содержит все строки, которые были сгруппированы по столбцам Город и Канал продаж из вашей исходной таблицы. Чтобы увидеть это, кликните пробел справа от слова Table. Внизу появится поле с новой таблицей. Таблица внизу окна показывает какие строки использовались для создания сгруппированных значений:

ВАЖНО: На панели предварительного просмотра сведений могут отображаться не все строки, которые использовались при группировке. Вы можете нажать на "Table", чтобы просмотреть все строки, относящиеся к соответствующей операции группировки.

Чтобы получить максимальное значение продаж, создадим пользовательский столбец с формулой. В редакторе Power Query перейдите на вкладку Добавление столбца –> Настраиваемый столбец.

В открывшемся окне задаем имя нового столбца «Максимальные продажи», и вводим функцию Table.Max:

Используемая формула проверяет таблицу и извлекает максимальное значение. Поиск ведется в столбце Продажи, поскольку он содержит таблицы, которые необходимо проверить. Максимум берется по столбцу «Продажи, тыс. руб» таблицы. 

Однако, функция Table.Max возвращает не значение, а запись. Эта запись содержит не только максимальное значение, но и все детали.

Столбец «Максимальные продажи» можно развернуть с помощью кнопки Развернуть. с двуглавой стрелкой. Выберите нужные столбцы для финальной таблицы, отключите «Использовать исходное имя столбца как префикс». Нажмите OK.

Щелкните правой кнопкой мыши по столбцу Продажи - Удалить.

Мы получим финальную таблицу с максимальными продажами по каждому каналу продаж с детализацией по городам.

Мы специально использовали группировку "Все стоки" (All Rows), хотя для расчёта максимума можно было обойтись и без неё. Я не рекомендую злоупотреблять фукнцией "Все строки", потому что она может излишне загружать память компьютера. В нашем случае было бы проще сразу сделать группировку с вычислением максимальных значений, не используя All Rows. Именно так мы и рекомендуем делать, чтобы ваш алгоритм работал быстрее.

Как работает функция Table.Group

Что происходит с нашими таблицами при группировке? Для этого разберем функцию, с помощью которой и осуществляется группировка данных - Table.Group. На простом примере разберем её аргументы:

Первый аргумент – предыдущий шаг. В нашей формуле это - #"Измененный тип". В качестве источника используем таблицу из предыдущего шага.

Второй аргумент – список столбцов параметров, по которым мы делаем группировку. В нашей формуле это - {"Офис продаж"}. 

Третий аргумент – список списков. В нашем примере один список - {{"Сумма выручки", each List.Sum([Выручка]), type nullable number}}.

 "Сумма выручки" название нового столбца показателя.

 List.Sum – функция для суммирования значений (может быть выбрана любая другая функция вычислений).

 [Выручка] – название столбца, к которому применяется расчет. 

type nullable number – формат нового столбца, в нашем примере формат числовой.

Варианты группировки в Power Query

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

В таблице ниже описана каждая из этих операций:

Название операции

Категория

Описание

СуммаРабота с столбцамиСуммирует все значения из столбца
СреднееРабота с столбцамиВычисляет среднее значение из столбца
МедианаРабота с столбцамиВычисляет медиану из столбца
Мин.Работа с столбцамиВычисляет минимальное значение из столбца
Макс .Работа с столбцамиВычисляет максимальное значение из столбца
Считать строкиОперация со строкойВычисляет общее количество строк из заданной группы
Количество уникальных строкОперация со строкойВычисляет количество уникальных строк из заданной группы
Все строкиОперация со строкойВыводит все сгруппированные строки в табличное значение без агрегирования

У Power Query большие возможности группировки, но иногда требуются и ручные доработки кода. Лично мне часто нужна группировка для получения списка. Например, мы хотим получить список товаров для каждого отдела продаж. 
Возьмём формулу для суммирования выручки:

{{"Сумма выручки", each List.Sum([Выручка]), type nullable number}} 

Убираем функцию суммы, скобки и тип. Меняем названия столбцов и вот наша группировка выдаёт желаемый список товаров:

{{"Список товаров", each [Товар]}} 

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

Заключение

При подготовке сводной таблицы в Power Query вам будет полезна функция группировки. В большом массиве повторяющихся данных важно все сгруппировать и получить все значения в рамках одной строки.  Power Query имеет почти неограниченные возможности группировки. В особенных случаях вы можете немного доработать код группировки и добавить необходимые вычисления.

Будьте осторожны в применении группировки "Все строки" (All Rows). Данный тип группировки может привести к проблемам загрузки или обновления отчёта, так как сильно нагружает Power Query, особенно при больших таблицах. Лучше использовать его с осторожностью или обходиться другими методами.

Комментарии