2016-04-15 2 views
1

Я не могу определить правильный синтаксис в M для получения папки файлов xml для загрузки в мою функцию.PowerQuery M Синтаксис импорта папок для XML

Это 2 из моих попыток, что я не могу определить способ решения.

let ExcelFile = (FilePath, FileName) => 
let 
    Source = Folder.Files(FilePath), 
    Query1 = (FileName) => [FirstResult=Meeting(FileName), SecondResult=Race(FileName), ThirdResult=Reference(FileName), FourthResult=Horses(FileName)] 
in 
    ExcelFile 

Пример 2

let xmlImport = (FilePath, FileName) => 
let 
    Source = Folder.Files(FilePath), 
    Query1 = (FileName) => [FirstResult=Meeting(FileName), SecondResult=Race(FileName), ThirdResult=Reference(FileName), FourthResult=Horses(FileName)], 
    content = Binary.Combine(Source[Query1]), 
    xmlImport = Xml.Tables(content) 
in 
    xmlImport 

ответ

1

Я не совсем уверен, что вы хотите, чтобы произвести, но я могу дать общий пример того, что работает, и несколько догадывается, почему ваши примеры могут поразить ошибки ?


Скажите мой Mashup начинается так:

let 
    Source = Folder.Files("c:\code\css430\Final_Project\.idea") 
in 
    Source 

И я хочу, чтобы загрузить каждую ячейку как XML. Во-первых, я просто нажмите на одной бинарной ячейки, и посмотреть, что UX автоматически генерирует:

let 
    Source = Folder.Files("c:\code\css430\Final_Project\.idea"), 
    #"c:\code\css430\Final_Project\ idea\_misc xml" = Source{[#"Folder Path"="c:\code\css430\Final_Project\.idea\",Name="misc.xml"]}[Content], 
    #"Imported XML" = Xml.Tables(#"c:\code\css430\Final_Project\ idea\_misc xml",null,1252), 
    #"Changed Type" = Table.TransformColumnTypes(#"Imported XML",{{"Attribute:version", Int64.Type}}) 
in 
    #"Changed Type" 

Интересный бит, что Xml.Tables был вызван на [Content] колонке. Я удалю новые шаги, и добавить пользовательский столбец только для Xml.Tables([Content]):

let 
    Source = Folder.Files("c:\code\css430\Final_Project\.idea"), 
    #"Added Custom" = Table.AddColumn(Source, "Xml", each Xml.Tables([Content])) 
in 
    #"Added Custom" 

Если вы хотите сделать больше, чем преобразование просто вызвать Xml.Tables, а затем добавить дополнительные шаги после нажатия на одну ячейку, скопируйте код , и удалите этапы и поместите все преобразования в функцию Table.AddColumn.

Только после того, как у вас есть все работающее, затем реорганизуйте аргумент FilePath вместо жестко заданного пути к файлу.


Некоторые вещи, которые могут быть идя неправильно в ваших примерах:

кода:

(FilePath, FileName) => 
let 
    Source = Folder.Files(FilePath), 
    Query1 = (FileName) => ... 

означает, что вы объявить две функции, каждая из которых имеет параметр с именем FileName, который просто будет запутываться позже. Существуют правила для определения того, какой параметр используется, но лучше всего дать им разные имена.

Звонок Xml.Tables поверх Binary.Combine почти всегда будет в беде. Если вы скопируете текст двух файлов XML, он не добавит новый XML-файл; это будет ошибка формата. Всегда сначала преобразуйте XML в таблицы M, затем соедините эти таблицы (например, Table.Combine). Двоичный комбайнер работает нормально для комбинирования двоичных файлов с обычным текстом и CSV, но на самом деле только те типы.

Код Source[Query1] выглядит, как он будет использовать функцию Query1 что-то на Source столе, но это на самом деле означает найти "Query1" столбец таблицы (что вызовет ошибку). Если вы хотите применить функцию преобразования к таблице, возможно, Table.AddColumn, или, может быть, Table.TransformColumns

+0

У меня XML-файл много, я связал 4 функции, которые извлекают данные из одного xml-файла.Теперь я пытаюсь выполнить 4 функции и сделать запрос папки для обработки всех xml-файлов в папке. – sayth