Excel:Power Query 编辑器:来自 Web 的数据源具有不断变化的列

Excel: Power Query Editor: Data Source from Web has Changing Columns

我有一个电子表格,其中包含视频游戏中玩过的游戏的数据,按英雄、胜率等排序。在 excel 中,使用来自网络的数据源,并使用此处的网站:https://www.heroesprofile.com/Global/Hero/?timeframe_type=minor&timeframe=2.50.1.79515&game_type=sl&map=Alterac+Pass 在 table 0.

下填充

问题是一旦向网站输入新数据,table 列 header 就会发生变化;然后 excel 上的 refresh-able 数据源给出如下错误:Expression.Error:未找到 table 的列“48.59 Win Rate %”。 (上传新日志时胜率发生变化;所以我认为 header 列是问题所在,因为它再也找不到了。)

在高级编辑器中是否有一种方法可以将其设置为 header 列与所有其他数据一起刷新?或者某种变通办法?

let
    Source = Web.Page(Web.Contents("https://www.heroesprofile.com/Global/Hero/?timeframe_type=minor&timeframe=2.50.1.79515&game_type=sl&map=Hanamura+Temple")),
    Data0 = Source{0}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Data0,{{"AVG Hero", type text}, {"48.59 Win Rate %", type number}, {"18.01 Popularity %", type number}, {"11.36 Pick Rate %", type number}, {"6.65 Ban Rate %", type number}, {"66 | -29 Influence", Int64.Type}, {"989 Games Played", Int64.Type}, {"Avg Win Rate", type text}, {"", type text}})
in
    #"Changed Type"

列数和行数很少会改变,如果有办法进行通用设置的话。

提前致谢!

删除第 4 行?

let
  Source = Web.Page(Web.Contents("https://www.heroesprofile.com/Global/Hero/?timeframe_type=minor&timeframe=2.50.1.79515&game_type=sl&map=Hanamura+Temple")),
Data0 = Source{0}[Data]
in Data0

如果列的内容类型没有改变,您可以加载数据并删除 Power Query 添加的任何处理步骤。

如果 Power Query 将数据的第一行识别为列 headers,您可以执行以下操作:

  • 手动执行功能区命令将headers视为第一行
  • 手动将列重命名为所需的列名称
  • 删除第一行(其中包含 headers)

现在您可以控制列名并且可以始终使用相同的列名,即使源中的列名发生变化也是如此。

PQ结果截图

从高级编辑器复制的代码

let
    Source = Web.Page(Web.Contents("https://www.heroesprofile.com/Global/Hero/?timeframe_type=minor&timeframe=2.50.1.79515&game_type=sl&map=Hanamura+Temple")),
    Data0 = Source{0}[Data],
    #"Demoted Headers" = Table.DemoteHeaders(Data0),
    #"Changed Type" = Table.TransformColumnTypes(#"Demoted Headers",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "AVG Hero"}, {"Column2", "Win Rate"}, {"Column3", "Popularity"}, {"Column4", "Pick Rate"}, {"Column5", "Ban rate"}, {"Column6", "Influence"}, {"Column7", "Games Played"}, {"Column8", "Avg win rate"}}),
    #"Removed Top Rows" = Table.Skip(#"Renamed Columns",1)
in
    #"Removed Top Rows"