首页 > 解决方案 > 遍历 Power Query 中列中的每个单元格

问题描述

我创建了一个名为 Table3 的表,其中包含两个名为 URL 的列,该列是空的,而 Value 则包含一个网站列表。以下查询从存储在表 3 中的网站中检索数据。

let
    Parameter = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    URL= Parameter{1}[Value],
    Source = Web.Page(Web.Contents(URL)),
    Data0 = Source{0}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Data0,{{"Date", type date}, {"Open", type number}, {"High", type number}, {"Low", type number}, {"Close", type number}, {"Volume", type number}, {"Market Cap", type number}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Market Cap", "Open", "High", "Low"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Date", Order.Ascending}})
in
    #"Sorted Rows" 

第二行运行对 Value 列中第一个网站的查询。

是否可以引入一个循环来运行所有网站的查询?

如果不是,是否可以通过手动粘贴上述代码并更改每个网站括号中的数字来按顺序运行所有网站的查询?

如果有可能我假设它会将内容加载到同一张表中,有没有办法为每次迭代将内容加载到不同的表中?

感谢您阅读我的问题。

标签: powerquery

解决方案


循环在 Power Query 中并不是真正的东西,但你仍然可以做你想做的事。我不知道您从哪些 URL 中提取,所以让我举一个使用公开可用 URL 的示例。


假设我Table3的如下:

URL
--------
https://finance.yahoo.com/quote/AAPL?p=AAPL
https://finance.yahoo.com/quote/AAPL?p=GOOG

我可以将它加载到查询编辑器中,并创建一个自定义列来读取每个 URL 的网页。

= Web.Page(Web.Contents([URL])){0}[Data]

(我想要的表是第一个(因此是{0}行索引)并且在[Data]列中。)

现在我有一个像这样的表格,底部表格是我选择的单元格的预览。

预览表

单击箭头图标以展开表格。

展开表格

从这里您可以筛选Column1以选择您感兴趣的值(比如说AskBidOpenVolume),然后旋转该列(变换 > 透视列)。选择Column2作为值列并在高级选项下选择“不聚合”。

枢轴柱

结果应该是您在数据透视对话框上方看到的表格。


这是高级编辑器中显示的查询的完整 M 代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"URL", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Web.Page(Web.Contents([URL])){0}[Data]),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Column1", "Column2"}, {"Column1", "Column2"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Custom", each ([Column1] = "Ask" or [Column1] = "Bid" or [Column1] = "Open" or [Column1] = "Volume")),
    #"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Column1]), "Column1", "Column2")
in
    #"Pivoted Column"

推荐阅读