Файлы к уроку:
Ссылки:
Описание
Например, вы создали запрос, в котором есть операция слияния двух запросов и разворот табличного столбца.
Периодически файлы-источники обновляются. Если в источнике появится один или несколько новых столбцов, то они не будут развернуты автоматически.
Если вы создали запрос только при помощи UI, то вы можете совершить ошибку и даже этого не заметить, потому что новые столбцы не будут развернуты автоматически.
Решение
Для решения этой задачи нам понадобятся функции:
- Table.ColumnNames
- List.Distinct
- Table.ToList
- Table.ExpandListColumn
Ключом к решению этой задачи является создание списка всех названий столбцов.
Для этого у нас есть функция Table.ColumnNames. К каждому источнику мы обратимся с помощью этой функции, а потом с помощью List.Distinct у нас получится список уникальных значений названий столбцов. Именно этот список мы и передадим функции, которая разворачивает табличный столбец.
Примененные функции
- Table.SelectRows
- Table.SelectColumns
- Table.TransformColumns
- Text.AfterDelimiter
- Table.TransformColumnTypes
- Table.AddColumn
- Table.ColumnNames
- List.Distinct
- Table.ToList
- Table.ExpandListColumn
- Table.ExpandTableColumn
- Table.ReplaceValue
- Replacer.ReplaceText
- Table.Distinct
- Table.UnpivotOtherColumns
- Table.RenameColumns
Код
Первый способ:
let
path = Excel.CurrentWorkbook(){[Name = "Путь"]}[Content][Column1]{0},
source = Excel.Workbook(File.Contents(path), null, true),
rows_select = Table.SelectRows(source, each ([Kind] = "Table")),
cols_select = Table.SelectColumns(rows_select, {"Name", "Data"}),
col_transform = Table.TransformColumns(
cols_select,
{{"Name", each Text.AfterDelimiter(_, "_"), type text}}
),
col_type = Table.TransformColumnTypes(
col_transform,
{{"Name", type date}}
),
tab_add_col = Table.AddColumn(
col_type,
"Пользовательская",
each Table.ColumnNames([Data])
),
list_unique = List.Distinct(
Table.ToList(
Table.ExpandListColumn(
Table.SelectColumns(tab_add_col, {"Пользовательская"}),
"Пользовательская"
)
)
),
col_expand = Table.ExpandTableColumn(col_type, "Data", list_unique)
in
col_expand
Второй способ:
let
path = Excel.CurrentWorkbook(){[Name = "Путь"]}[Content][Column1]{0},
source = Excel.Workbook(File.Contents(path), null, true),
rows_select = Table.SelectRows(source, each ([Kind] = "Table")),
cols_select = Table.SelectColumns(rows_select, {"Name", "Data"}),
col_replace_value = Table.ReplaceValue(
cols_select,
"_",
"",
Replacer.ReplaceText,
{"Name"}
),
col_transform = Table.TransformColumns(
col_replace_value,
{{"Name", each _ & ".01", type text}}
),
col_type = Table.TransformColumnTypes(
col_transform,
{{"Name", type date}}
),
list_distinct =
let
tab_add_col = Table.AddColumn(
col_type,
"Названия",
each Table.ColumnNames([Data])
),
list_col = Table.SelectColumns(tab_add_col, "Названия"),
list_expand = Table.ExpandListColumn(list_col, "Названия"),
list_distinct = Table.Distinct(list_expand)
in
list_distinct,
col_expand = Table.ExpandTableColumn(
col_type,
"Data",
list_distinct[Названия],
list_distinct[Названия]
),
tab_unpivot = Table.UnpivotOtherColumns(
col_expand,
{"Name", "Posid", "Адрес"},
"Атрибут",
"Значение"
),
col_transform_2 = Table.TransformColumns(
tab_unpivot,
{{"Атрибут", each _ & ".План", type text}}
),
cols_rename = Table.RenameColumns(
col_transform_2,
{{"Name", "Activation Date"}, {"Posid", "POSID"}}
)
in
cols_rename
Этот урок входит в курс Работа с ошибками в Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Power Query Ошибки №1. Измененный тип, Неверная фильтрация в UI | Почему возникает ошибка Expression.Error Столбец таблицы не найден? Одна из причин — шаг Измененный тип. Почему в вашей итоговой таблицы не все данные, которые должны там оказаться? Вероятно вы совершили ошибку неверной фильтрации в пользовательском интерфейсе. |
2 | Power Query Ошибки №2. Фиксированная ширина столбца Excel | В этом уроке вы узнаете как отключить автоматическое определение ширины столбцов таблицы Excel при обновлении запроса Power Query. |
3 | Power Query Ошибки №3. Formula Firewall, запрос ссылается на… | Вы работаете в Power Query, но при попытке обновить все возникает ошибка Formula Firewall, запрос ссылается на… Что делать? Как исправить? |
4 | Power Query Ошибки №4. Доступ к веб-содержимому | В этом уроке вы узнаете как избавиться от надоедливого окна доступ к веб-содержимому. |
5 | Power Query Ошибки №5. Количество столбцов CSV | При импорте CSV получается неверное количество столбцов. |
6 | Power Query Ошибки №6. Не получается изменить тип данных (DataFormat.Error) | При попытке изменить тип данных с текстового на дату возникает ошибка DataFormat.Error. |
7 | Power Query Ошибки №7. Разные имена листов | В этом уроке мы решим проблему, когда в ваших источниках нужные вам данные находятся всегда на листах с разными именами. |
8 | Power Query Ошибки №8. Разные имена листов 2 | В этом уроке мы другими способами решим проблему, когда в ваших источниках нужные вам данные находятся всегда на листах с разными именами. |
9 | Power Query Ошибки №9. Разные имена столбцов, Table.TransformColumnNames | В этом уроке мы разберем проблему, когда нам присылают файлы, в которых всегда столбцы названы по-разному. |
10 | Power Query Ошибки №10. Как развернуть все столбцы | В этой задаче мы научимся разворачивать все столбцы табличного столбца не перечисляя каждый из них хардкодом. |
11 | Power Query Ошибки №11. Подключиться к последнему файлу | В этом уроке мы научимся подключаться к самому свежему файлу из нужной нам папки с нужным названием. |
12 | Power Query Ошибки №12. Консолидация и MissingField.Type | Бывает вы ходите выполнить добавление таблиц друг под другом с предварительной обработкой, но получаете ошибку Expression.Error: Столбец таблицы не найден. |
13 | Power Query Ошибки №13. Удалить пустые столбцы | Как без хардкода автоматически удалить пустые столбцы в Power Query, которые есть в импортируемой таблицы. Разберем 2 способа. Один из них прост до безобразия, а для второго понадобится функция Table.Profile. |
14 | Power Query Ошибки №14. Удалить лишние пробелы | В этом уроке мы разберем еще 1 способ удалить лишние пробелы в текстовом столбце Power Query. Для этого мы повторим и изучим несколько новых функций. Text.SplitAny List.Select Character.FromNumber Text.Combine |
15 | Power Query Ошибки №15. Плохо структурированный TXT | Как быть, если текстовый файл разбивается на столбцы неправильно? |
16 | Power Query Ошибки №16. При округлении не совпадает общая сумма | Разберем ошибку, которая возникает при необходимости разбить число на определенные доли, а результаты округлить до двух знаков после запятой. В такой ситуации может получиться, что сумма слагаемых не будет равняться исходному числу. |
17 | Power Query Ошибки №17. Удаление дубликатов, Подводные камни Table. Distinct | Что может пойти не так при использовании функции удаления дубликатов. |
18 | Power Query Ошибки №18. Удаление дубликатов 2, Подводные камни Table. Distinct | Что может пойти не так при использовании функции удаления дубликатов. Другое решение данной проблемы. |
19 | Power Query Ошибки №19. Неверная разбивка на столбцы | При импорте данных из CSV или TXT разбивка на столбцы происходит неправильно. |
20 | Power Query Ошибки №20. Пустая таблица при импорте Excel (XLSX, XLS) | Вы пытаетесь подключиться к книге Excel, но импортируется пустая таблица. |
21 | Power Query Ошибки №21. Подключение к PostgreSQL, Установка драйвера | Вы пытаетесь подключиться к PostgreSQL и получаете ошибку «Перед использование этого соединителя необходимо установить один или несколько дополнительных компонентов» |