2016-09-16 5 views
0

Я пытаюсь автоматизировать несколько отчетов, которые были построены из экспорта CSV из Netsuite (нашего программного обеспечения ERP). Файлы никогда не импортируются непосредственно в PowerQuery правильно, потому что есть 6 строк, которые являются «заголовками» строк. Эти строки заголовка не содержат правильного количества запятых, поэтому PowerQuery показывает только 1 столбец данных. В настоящее время я открываю файлы с помощью Notepad ++ и удаляю эти 6 строк, а затем импортирую файл в PowerQuery.Пропустить 6 строк до «чтения» в powerquery

Есть ли способ пропустить первые 6 строк с использованием кода PowerQuery, чтобы csv был правильно прочитан? Ниже приведен пример данных, с которыми я работаю.

Fake Cocoa Company LLC 
"Fake Cocoa Company, LLC (Consolidated)" 
Sales Order Detail - Hotel - BH 
"January 1, 2016 - December 31, 2016" 

"Options: Show ZerosFilters: Customer/Project (equal to FCC - Hotel Hotel), Validated Status (not equal to Cancelled, Closed)" 
Document Number ,Date ,Ship To ,Item: Description (Sales) ,Quantity ,Validated Status ,Unit Price ,Aggregate Amount 
Sales Orders,,,,,,, 
669,9/15/2016,Receiving - CCLV Hotel 2880 Some Place Blvd South Hotel Hotel Some Place CA 91089,100% Country Caf Liquid Cocoa,5,Billed,$75.68,$378.40 
660,,,,,,, 
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,100% Country Caf Liquid Cocoa,10,Billed,$7.68,$75.80 
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand - Whole Bean 5/5LB,8,Billed,$17.80,$72.00 
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand 28/9oz,6,Billed,$5.54,$39.24 
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand 42/2oz,4,Billed,$1.32,$7.28 
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Caf - Whole Bean 5/5LB,2,Billed,$2.80,$28.00 
Total - 660,,,,,,,"$203.32" 

ответ

3

с использованием нативного CSV PowerQuery анализатору

let 
    file_path = "C:\your_path\csv.txt", 
    file = File.Contents(file_path), 
    src = Lines.FromBinary(file), 
    skip = List.Skip(src,6), 
    combine = Text.Combine(skip, "#(lf)"), 
    csv = Csv.Document(combine), 
    promote = Table.PromoteHeaders(csv) 
in 
    promote 

enter image description here

0

table.skip может делать то, что вы хотите

Второй параметр может быть либо числом (например, 6) или условие (например (#"Position of ""Options: Show ZerosFilters: Customer/Project (equal to FCC - Hotel Hotel), Validated Status (not equal to Cancelled, Closed)""" + 1))

+0

Спасибо за этот намек - очень полезно знать, что можно передать состояние, как хорошо! Код, который работал для меня здесь, был: Table.Skip (Source, List.PositionOf (Source [Column1], "" "Опции: Показать ZerosFilters: Клиент/Проект (равный FCC - Hotel Hotel), Validated Status (не равно Отменено, Закрыто) "" ") + 1). Все данные сначала считывались в один столбец с именем« Столбец1 ». «Побег» - это нечто особенное. – ImkeF

1

Вопрос заключается в том, что вы пытаетесь импортировать CSV в Power Query "из CSV" в качестве источника. Имея первые строки с содержимым описания, прервется автоматическое преобразование. Чтобы предотвратить это, вам нужно импортировать файл в PQ по-другому. Проблема хорошо описана в Excelguru Blog от Кена (BTW: Я горячо рекомендую его книгу).

Вот код:

let 
    /* Get the raw line by line contents of the file, preventing PQ from interpreting it */ 
    fnRawFileContents = (fullpath as text) as table => 
    let 
     Value = Table.FromList(Lines.FromBinary(File.Contents(fullpath)),Splitter.SplitByNothing()) 
    in Value, 

    /* Use function to load file contents */ 
    Source = fnRawFileContents("D:\yourfile.csv"), 
    #"Removed Top Rows" = Table.Skip(Source,6), 
    #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Top Rows","Column1",Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv),{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type text}, {"Column1.8", type text}}), 
    #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type") 

in 
    #"Promoted Headers" 
Смежные вопросы