Power Query не может добавлять столбцы при обновлении импорта CSV - PullRequest
1 голос
/ 12 апреля 2019

Если строка добавлена ​​в файл CSV, и эта строка содержит больше «столбцов», чем оригинал, Power Query не будет добавлять столбцы для новой строки при обновлении существующего запроса.

Еслиновый запрос генерируется, тогда появится дополнительный столбец.Я предполагаю, что это потому, что PQ просматривает первые 200 (по умолчанию) строк, чтобы определить формат при создании запроса.

Исходный файл CSV:

key1:value1,key2:value2
key3:value3,key4:value4

Оригинальный M-код

let
    Source = Csv.Document(File.Contents("d:\Users\Ron\Desktop\myCSV.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None])
in
    Source

Он импортирует и генерирует: (как и ожидалось)

enter image description here

Изменить CSV:

key1:value1,key2:value2
key3:value3,key4:value4
key5:value5,key6:value6,key7:value7

Обновить запрос:

enter image description here

Обратите внимание, что третий столбец из третьей строкине импортируется.

Новый запрос получит этот третий столбец, но параметр Columns= будет изменен на 3.

Я попытался удалить аргумент Columns=2 изSource оператор в M-Code (как предлагается в других сообщениях), но это не создаст третий столбец (, если только этот дополнительный столбец не существует в первой строке ).

ЕслиColumns=2 аргумент изменен на Columns=3, тогда все три столбца будут импортированы по желанию, но невозможно заранее узнать количество потенциальныхстолбцы.

Полагаю, что одним из обходных путей было бы указать значение Columns=, которое будет больше наибольшего возможного числа столбцов, которое может быть там, а затем удалить пустые столбцы, но, похоже, тамдолжно быть лучшее решение.

Есть мысли?

1 Ответ

1 голос
/ 12 апреля 2019

Я думаю, что самый простой подход - это загрузить его как один столбец, используя разрыв строки в качестве разделителя, а затем разделить столбцы в редакторе запросов.

let
    Source = Csv.Document(File.Contents("d:\Users\Ron\Desktop\myCSV.csv"),[Delimiter="#(lf)", Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"})
in
    #"Split Column by Delimiter"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...