使用电源查询从Web服务自动下载多个xml文件

时间:2019-01-17 09:59:19

标签: powerquery

我想从Web服务API下载多个xml文件。我有一个获取JSON文档的查询: = Json.Document(Web.Contents(“ http://reports.sem-o.com/api/v1/documents/static-reports?DPuG_ID=BM-086&page_size=100”))

并对其进行处理以获取文件名列表,例如:Excel电子表格上一列中的PUB_DailyMeterDataD1_201812041627.xml。

我希望对这个名称列表运行一个函数以获取所有数据,因此首先我处理了一个文件:PUB_DailyMeterDataD1_201812041627

= Xml.Tables(Web.Contents(“ https://reports.sem-o.com/documents/PUB_DailyMeterDataD1_201812041627.xml”))

这将获得一个xml表,我可以通过该表获取所需的数据(发电机GU_401970的半小时计量MWh

现在,我想将查询更改为一个函数,以跨服务提供的所有xml文件自动执行该过程。该函数需要用变量代替文件名。我尝试此操作作为功能的准备:

让 Filename =“ PUB_DailyMeterDataD1_201812041627.xml”,

Source =(Web.Contents(“ https://reports.sem-o.com/documents/Filename”))), (随后是操纵Mcode)

这不起作用。

然后这个:

让 Filename =“ PUB_DailyMeterDataD1_201812041627.xml”,

Source = Xml.Tables(Web.Contents(“ https://reports.sem-o.com/documents/[Filename]”)),

我得到: DataFormat.Error:Xml处理失败。输入无效或不受支持。 (内部错误:根级别的数据无效。第1行,位置1。) 细节: 二进制

所以被困在这里。你能帮我吗。 谢谢 康纳尔

1 个答案:

答案 0 :(得分:0)

您可以在Power Query中附加带有“&”符号的字符串。 [Somename]是引用表中字段的格式,仅使用其名称引用普通变量。所以在您的示例中

let Filename="PUB_DailyMeterDataD1_201812041627.xml",

Source = Xml.Tables(Web.Contents("https://reports.sem-o.com/documents/" & Filename)), 

会工作的。

听起来您有一个现有查询,它会向下钻取文件名列表,但是您尝试使用该查询从url导入文件名,因此假设您从中获取文件名的列称为“文件名”那么您可以在其中添加一个自定义列

Xml.Tables(Web.Contents("https://reports.sem-o.com/documents/" & [Filename]))

它将把表加载到每个文件名的行上。