Файлы к уроку:
Ссылки:
Описание
В этом уроке вы узнаете как объединить 2 таблицы и сразу же сделать агрегирование. Это аналог SELECT с JOIN и GROUP BY.
Есть 2 таблицы с исходными данными. В одной таблице находится 2 столбца: 1) Код товара, 2) Название товара. В другой таблице находятся данные по продажам.
Нужно получить таблицу, в которой будут все столбцы из первой таблицы и итоговые агрегированные данные по продажам из второй таблицы.
Выходит, что мы выполняем сразу 2 операции:
- Операция объединения таблиц
- Операция группировки
Именно эти 2 шага мы и выполним, но воспользуемся встроенным функционалом Power Query, которым позволит нам сократить количество шагов.
Решение
После подготовки данных задача решается всего в 2 шага:
- Объединить таблицы по столбцу Код
- Кликнуть на пиктограмму разворота табличного столбца и выбрать вкладку Агрегировать. На этой вкладке указать нужные агрегирования
Примененные функции
- Csv.Document
- File.Contents
- Table.Skip
- Table.PromoteHeaders
- Table.SelectRows
- Table.SelectColumns
- Table.TransformColumnTypes
- Excel.Workbook
- Table.NestedJoin
- JoinKind.LeftOuter
- Table.AggregateTableColumn
- Table.Sort
- Order.Descending
Код
Подключение к первому источнику:
let
source = Csv.Document(
File.Contents(path & "2018.10.txt"),
[Delimiter = " ", Columns = 26, Encoding = 65001, QuoteStyle = QuoteStyle.None]
),
rows_skip = Table.Skip(source, 4),
headers_promote = Table.PromoteHeaders(rows_skip, [PromoteAllScalars = true]),
rows_select = Table.SelectRows(headers_promote, each ([Дата] <> "Итого")),
cols_select = Table.SelectColumns(
rows_select,
{
"Код",
"Номенклатура",
"Количество",
"Сумма",
"Себестоимость сумма",
"Премия сумма"
}
),
types = Table.TransformColumnTypes(
cols_select,
{
{"Количество", Int64.Type},
{"Сумма", type number},
{"Себестоимость сумма", type number},
{"Премия сумма", type number}
}
)
in
types
Подключение ко второму источнику:
let
source = Excel.Workbook(File.Contents(path & "И_Стоки.xlsx"), null, true),
get_sheet = source{[Item = "Сток GSM", Kind = "Sheet"]}[Data],
headers_promote = Table.PromoteHeaders(get_sheet, [PromoteAllScalars = true]),
types = Table.TransformColumnTypes(
headers_promote,
{{"Код", type text}, {"Номенклатура", type text}}
)
in
types
Код объединения двух датасетов с агрегированием:
let
source = Table.NestedJoin(
stock,
{"Код"},
sales,
{"Код"},
"sales",
JoinKind.LeftOuter
),
aggregate = Table.AggregateTableColumn(
source,
"sales",
{
{"Количество", List.Sum, "Сумма Количество"},
{"Сумма", List.Sum, "Сумма Сумма"},
{"Себестоимость сумма", List.Sum, "Сумма Себестоимость сумма"},
{"Премия сумма", List.Sum, "Сумма Премия сумма"}
}
),
table_sort = Table.Sort(aggregate, {{"Сумма Количество", Order.Descending}})
in
table_sort
Этот урок входит в Базовый курс Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Зачем нужен Power Query. Обзор возможностей | Этот урок сам по себе является мини-курсом. Здесь вы узнаете для каких видов операций с данными создан Power Query. |
2 | Подключение Excel | Подключаемся к файлам Excel. Импортируем данные из таблиц, именных диапазонов, динамических именных диапазонов. |
3 | Подключение CSV/TXT, таблиц, диапазонов | Подключаемся к к файлам CSV/TXT, Excel. |
4 | Объединить таблицы по вертикали | Учимся объединять две таблицы по вертикали — combine. |
5 | Объединить по вертикали все таблицы одной книги друг за другом | Как объединить по вертикали все таблицы одной книги, находящиеся на разных листах Excel. |
6 | Объединить по вертикали все файлы в папке | Объединяем по вертикали таблицы, которые находятся в разных файлах в одной папке. |
7 | Объединение таблиц по горизонтали | Учимся объединять таблицы по горизонтали — JOIN, merge. |
8 | Объединить таблицы с агрегированием | Объединить таблицы по горизонтали и сразу выполнить группировку с агрегированием — JOIN + GROUP BY. |
9 | Анпивот (Unpivot) | Изучаем операцию Анпивот — из сводной таблицы делаем таблицу с данными. |
10 | Многоуровневый анпивот (Анпивот с подкатегориями) | Более сложный вариант Анпивота — в строках находится несколько измерений. |
11 | Скученные данные | Данные собраны в одном столбце, нужно правильно его разбить на несколько. |
12 | Скученные данные 2 | Разбираем еще один пример скученных данных. |
13 | Ссылка на другую строку | Как сослаться на другую строку. |
14 | Ссылка на другую строку 2 | Как сослаться на другую строку, используя объединение по горизонтали. |
15 | Виды объединения таблиц по горизонтали | Изучаем виды объединения таблиц по горизонтали — LEFT JOIN, FULL JOIN, INNER JOIN, CROSS JOIN. |
16 | Виды объединения таблиц по горизонтали 2 | Изучаем анти-соединение и соединение таблицы с ней же самой — ANTI JOIN, SELF JOIN. |
17 | Группировка | Изучаем операцию группировки с агрегированием — GROUP BY. |
18 | Консолидация множества таблиц пользовательской функцией | Объединяем по вертикали множество таблиц с предварительной обработкой при помощи пользовательской функции. |
19 | Деление на справочник и факт | Разделим один датасет на два датасета: справочник и факт. |
20 | Создание параметра | Мы можем ввести значение в какую-то ячейку Excel, а потом передать это значение в формулу Power Query. |
21 | Таблица параметров | Создадим целую таблицу параметров и будем их использовать в запросах Power Query. |
22 | Объединение таблиц по вертикали, когда не совпадают заголовки столбцов | Как объединить две таблицы по вертикали, если названия столбцов не совпадают. |
23 | Поиск ключевых слов | Научимся искать ключевые слова в текстовом поле. |
24 | Поиск ключевых слов 2 | Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию. |