
Описание
Вроде мы создали нормальный запрос для импорта CSV файла в Excel при помощи Power Query. Мы хотим в будущем пользоваться этим запросом для импорта обновленных данных.
Сам шаблон файла выглядит примерно так же, но каждый новый день представляет из себя новый столбец в файле источнике.
Получив новый файл мы при обновлении почему-то не видим данных по новым дням. Мы видим данные на тот же самый день, что и был.
Решение
Дело в том, что Power Query не видит новых столбцов, потому что при импорте мы указали ему загружать только определенное количество столбцов. Когда мы создавали запрос, то Power Query сгенерировал формулу для подключения к CSV файлу и в этой формуле жестко указано, какое количество столбцов нужно импортировать.
= Csv.Document(File.Contents(Папка&Файл),[Delimiter=" ", Encoding=65001, Columns = 32, QuoteStyle=QuoteStyle.Csv])
Обратите внимание на параметр Columns. Именно здесь и зарыта собака. В данном случае указано, что нужно импортировать только 32 столбца, поэтому всех остальных столбцов нет.
Чтобы избавиться от этой ошибки нужно всего лишь удалить этот параметр. Он не является обязательным. После удаления ошибка больше не возникнет.
Примененные функции
- Csv.Document
- File.Contents
- QuoteStyle.Csv
- Table.Skip
- Table.RemoveColumns
- Table.SelectRows
- Table.PromoteHeaders
- Table.UnpivotOtherColumns
- Table.TransformColumnTypes
- Table.Sort
- Order.Ascending
Код
Код, который не приведет к ошибке:
let
source = Csv.Document(
File.Contents(folder_path & file_path),
[Delimiter = " ", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
),
table_skip = Table.Skip(source, 8),
cols_select = Table.RemoveColumns(table_skip, {"Column1"}),
rows_select = Table.SelectRows(
cols_select,
each [Column2] <> null and [Column2] <> ""
),
table_promote = Table.PromoteHeaders(
rows_select,
[PromoteAllScalars = true]
),
table_unpivot = Table.UnpivotOtherColumns(
table_promote,
{"Родитель", "Родитель_1", "Родитель_2", "Контрагент"},
"Дата",
"Сумма"
),
rows_select_2 = Table.SelectRows(
table_unpivot,
each [Сумма] <> null and [Сумма] <> ""
),
types = Table.TransformColumnTypes(
rows_select_2,
{{"Сумма", type number}, {"Дата", type date}}
),
table_sort = Table.Sort(
types,
{{"Дата", Order.Ascending}, {"Родитель", Order.Ascending}}
)
in
table_sort