|
|||||||
Power Query. Формулы М. Группировка, Пивот, Анпивот, Сортировка
Время создания: 07.10.2021 20:31
Текстовые метки: Power Query, Формулы М
Раздел: Разные закладки - MSO - Excel - Power Query
Запись: xintrea/mytetra_db_adgaver_new/master/base/1633627863mg7ymi901h/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Описание В этом уроке мы изучим функции, которые позволят нам выполнять операции Группировки, Пивот, Анпивот и Сортировки. В уроках модуля Основы мы выполняли эти операции при помощи пользовательского интерфейса, но понимание функций позволит нам решать более сложные задачи за меньшее количество шагов. Группировка — это получение уникальных значений из одного столбца или получение уникальных наборов значений из нескольких столбцов с каким-то агрегированием, например, с суммой или со счетом. Пивот — это преобразование таблицы из вертикальной в горизонтальную. В таблице будет меньше строк. Какой-то из столбцов таблицы превратиться в заголовки новых столбцов, а какой-то из столбцов таблицы превратится в значения этих столбцов. Значения тоже могут быть агрегированы. Анпивот — это обратная операция для пивота. Это означается, что названия определенных столбцов превратятся в один столбец, а значения из этих столбцов попадут в другой столбец. При этом у таблицы станет больше строк. Сортировка — это настройка порядка столбцов. Столбцы можно упорядочить по возрастанию или убыванию. В этом уроке мы изучим/повторим: Посчитать количество строк в таблице с Table.RowCount Посчитать количество строк в таблице с Table.Group Подробный разбор функции Table.Group Параметр GroupKind.Global и GroupKind.Local Сортировка с функцией Table.Sort Параметры Order.Ascending и Order.Descending Фильтрация с помощью Table.SelectRows Операция Анпивот с функцией Table.Unpivot и Table.UnpivotOtherColumns Операция Пивот с функцией Table.Pivot Посчитать количество строк Чтобы посчитать количество строк можно воспользоваться функцией Table.RowCount. let /* Открываем таблицу */ source = Excel.CurrentWorkbook(){[Name = "Таблица1"]}[Content], /* Изменение типа данных */ cos_types = Table.TransformColumnTypes( source, { {"Квартал", type text}, {"Месяц", type text}, {"Прибыль", Int64.Type} } ), value_counts = Table.RowCount(cos_types) in value_counts Посчитать количество строк с помощью Table.Group: let /* Открываем таблицу */ source = Excel.CurrentWorkbook(){[Name = "Таблица1"]}[Content], /* Изменение типа данных */ cols_types = Table.TransformColumnTypes( source, { {"Квартал", type text}, {"Месяц", type text}, {"Прибыль", Int64.Type} } ), value_row_count = Table.Group( cols_types, {}, {{"Счет строк", each Table.RowCount(cols_types), type number}} ) in value_row_count Выполнить группировку Выполним группировку с агрегированием. Получим из левой таблицы правую.
let /* Загрузка источника */ source = Excel.CurrentWorkbook(){[Name = "Таблица1"]}[Content], /* Типы данных */ cols_types = Table.TransformColumnTypes( source, { {"Квартал", type text}, {"Месяц", type text}, {"Прибыль", Int64.Type} } ), tab_group = Table.Group( cols_types, "Квартал", { {"Сумма прибыли", each List.Sum([Прибыль]), type number}, {"Количество", each Table.RowCount(_), type number} } ) in tab_group Группировка с параметром GroupKind.Local Мы хотим из левой таблицы получить правую. Группировка будет
let source = Excel.CurrentWorkbook(){[Name = "Таблица2"]}[Content], cols_types = Table.TransformColumnTypes( source, { {"Дата", type datetime}, {"Сотрудник", type text}, {"Сумма сделки", Int64.Type}, {"Количество", Int64.Type} } ), tab_group = Table.Group( cols_types, {"Дата", "Сотрудник"}, {{"Сумма", each List.Sum([Сумма сделки]), type number}}, GroupKind.Local ) in tab_group Сортировка таблицы Сортировка таблицы — это настройка порядка строк. В данном примере мы сортируем таблицу в следующем порядке: Дата — по возрастанию Сотрудник — по возрастанию Количество — по убыванию let source = Excel.CurrentWorkbook(){[Name = "Таблица2"]}[Content], cols_types = Table.TransformColumnTypes( source, { {"Дата", type datetime}, {"Сотрудник", type text}, {"Сумма сделки", Int64.Type}, {"Количество", Int64.Type} } ), tab_sort = Table.Sort( cols_types, { {"Дата", Order.Ascending}, {"Сотрудник", Order.Ascending}, {"Количество", Order.Descending} } ) in tab_sort Фильтрация Фильтрация — это отбор строк. В данном примере мы выбираем строки, где поле «Сотрудник» = «Иванов И. И.» let source = Excel.CurrentWorkbook(){[Name = "Таблица2"]}[Content], cols_types = Table.TransformColumnTypes( source, { {"Дата", type datetime}, {"Сотрудник", type text}, {"Сумма сделки", Int64.Type}, {"Количество", Int64.Type} } ), rows_select = Table.SelectRows( cols_types, each [Сотрудник] = "Иванов И. И." ) in rows_select Анпивот и Анпивот других столбцов Анпивот — это превращение горизонтальной широкой таблицы в узкую вертикальную. Была такая таблица:
А стала такая:
Решение с помощью Table.Unpivot: let source = Excel.CurrentWorkbook(){[Name = "Таблица24"]}[Content], list_col_names_source = Table.ColumnNames(source), list_select = List.Select(list_col_names_source, each _ <> "Сотрудник"), tab_unpivot = Table.Unpivot(source, list_select, "Месяц", "Сумма") in tab_unpivot Решение с помощью Table.UnpivotOtherColumns: let source = Excel.CurrentWorkbook(){[Name = "Таблица24"]}[Content], tab_unpivot = Table.UnpivotOtherColumns( source, {"Сотрудник"}, "Месяц", "Сумма" ) in tab_unpivot Пивот Пивот — это операция обратная анпивоту, т. е. мы наоборот из узкой таблицы сделаем широкую. let source = Unpivot, list_months = List.Distinct(source[Месяц]), tab_pivot = Table.Pivot(source, list_months, "Месяц", "Сумма") in tab_pivot Примененные функции Table.TransformColumnTypes Int64.Type Table.RowCount Table.Group List.Sum GroupKind.Global GroupKind.Local Table.Sort Order.Ascending Order.Descending Table.SelectRows Table.ColumnNames List.Select Table.Unpivot Table.UnpivotOtherColumns List.Distinct Table.Pivot
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|