2016-04-15 12 views
1

XMLファイルのフォルダーを自分の関数にロードするための正しい構文をMで理解できません。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

私はあなたが生成するために欲しいものはかなりわからないんだけど、私はどのような作品の一般的な例を与えることができ、そして、あなたの例には、エラーを打つかもしれないなぜカップルが推測します?


私のマッシュアップは次のように起動すると言う:

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

そして、私はXMLとして、各セルをロードします。まず、私はちょうど1つのバイナリのセルをクリックし、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という名前のパラメータを持つ二つの関数を宣言ていることを意味後で混乱するようになるだろう。どのパラメータが使用されるかを定義するルールがありますが、異なる名前を付けるのが最善です。

Binary.Combineの上にXml.Tablesを呼び出すと、ほとんど常に問題が発生します。 2つのXMLファイルのテキストをコピー・ペーストすると、新しいXMLファイルには追加されません。それはフォーマットエラーになるでしょう。まず、XMLを常にM個の表に変換してから組み合わせてください(例:Table.Combine)。バイナリ結合は、プレーンテキストとCSVバイナリを組み合わせるのに有効ですが、実際にはそれらのタイプのみです。それはSourceテーブルの上に何かのためにQuery1機能を使用するように

コードSource[Query1]に見えますが、それは実際に(エラーが発生します)テーブルの"Query1"列を見つけることを意味します。テーブルに変換関数を適用する場合は、Table.AddColumnが好きかもしれません。おそらくTable.TransformColumns

+0

私はXMLファイルをよく持っています.1つのxmlファイルからデータを抽出する4つの関数をまとめています。私は今、4つの関数を取って、フォルダ内のすべてのxmlファイルを処理するためのフォルダクエリを作成しようとしています。 – sayth