PowerQuery M Folder导入XML语法

时间:2016-04-15 22:57:36

标签: xml powerquery m

我无法在M中找到正确的语法来获取要加载到我的函数中的xml文件的文件夹。

这些是我无法确定解决方法的两次尝试。

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 个答案:

答案 0 :(得分: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