Файлы к уроку:
Ссылки:
Описание
В этом уроке мы научимся делать многоуровневый анпивот или анпивот с подкатегориями. Говоря простым языком нужно из сводной таблицы сделать таблицу с данными. Только в этой сводной таблице в строках находится два уровня, т. е. группировка выполнена по нескольким полям.
Решение
Для решения это задачи мы применим большое количество приемов и техник. Одной операцией здесь уже не отделаться.
Сначала нужно заполнить значениями все пустые ячейки всех столбцов. Для этого мы будем транспонировать таблицу и использовать операцию Заполнить вниз.
После этого мы выполним анпивот и почистим получившуюся таблицу.
В этом уроке вы научитесь:
- Как сделать анпипивот с подкатегориями в Power Query
- Как сделать многоуровневый анпивот в Power Query
Мы применим следующие техники:
- Транспонирование таблицы
- Заполнение значений вниз
- Объединение (конкатенация) столбцов
- Анпивот
- Разделение столбцов
- Сортировка
- Добавление префикса и суффикса к тексту
Примененные функции
- Table.FillDown
- Table.Transpose
- Table.CombineColumns
- Combiner.CombineTextByDelimiter
- QuoteStyle.None
- Table.PromoteHeaders
- Table.UnpivotOtherColumns
- Table.SplitColumn
- Splitter.SplitTextByDelimiter
- Table.TransformColumnTypes
- Table.SelectRows
- Table.TransformColumns
- Table.Sort
- Order.Ascending
- Table.RenameColumns
Код
let
source = Excel.CurrentWorkbook(),
get_table = source{[Name = "Свод"]}[Content],
col_fill_down = Table.FillDown(get_table, {"Column1"}),
tab_transpose = Table.Transpose(col_fill_down),
col_fill_down_2 = Table.FillDown(tab_transpose, {"Column1"}),
cols_combine = Table.CombineColumns(
col_fill_down_2,
{"Column1", "Column2"},
Combiner.CombineTextByDelimiter("---", QuoteStyle.None),
"Столбец"
),
tab_transpose_2 = Table.Transpose(cols_combine),
tab_promote_headers = Table.PromoteHeaders(
tab_transpose_2,
[PromoteAllScalars = true]
),
tab_unpivot = Table.UnpivotOtherColumns(
tab_promote_headers,
{"---Номенклатура1", "---Номенклатура2"},
"Атрибут",
"Значение"
),
col_split = Table.SplitColumn(
tab_unpivot,
"Атрибут",
Splitter.SplitTextByDelimiter("---", QuoteStyle.Csv),
{"Месяц", "Показатель"}
),
types = Table.TransformColumnTypes(
col_split,
{
{"Месяц", type text},
{"Показатель", type text},
{"---Номенклатура1", type text},
{"---Номенклатура2", type text},
{"Значение", type number}
}
),
rows_select = Table.SelectRows(
types,
each ([Показатель] <> "") and ([#"---Номенклатура2"] <> null)
),
col_prefix = Table.TransformColumns(
rows_select,
{{"Месяц", each "1 " & _, type text}}
),
col_suffix = Table.TransformColumns(
col_prefix,
{{"Месяц", each _ & " 2019", type text}}
),
types_2 = Table.TransformColumnTypes(col_suffix, {{"Месяц", type date}}),
tab_sort = Table.Sort(
types_2,
{
{"Месяц", Order.Ascending},
{"---Номенклатура2", Order.Ascending},
{"Показатель", Order.Ascending}
}
),
cols_rename = Table.RenameColumns(
tab_sort,
{
{"---Номенклатура1", "Категория"},
{"---Номенклатура2", "Подкатегория"}
}
)
in
cols_rename
Этот урок входит в Базовый курс 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 | Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию. |