Excel Power查询编辑器中的动态列名问题

Excel Power查询编辑器中的动态列名问题,excel,powerquery,Excel,Powerquery,我使用Power Query将数据从API拉入Excel表。这是一个动态API,可以指定日期范围。例如,报告通常在上个月的月初运行(例如01/06/2020 00:00-01/07/2020 00:00) API将返回多个不同站点在指定日期范围内的平均风速 我的问题是,API中的数据列名会根据指定的日期范围而更改。 例如,如果我在扩展该列时运行它以获取2020年6月的数据,我会得到以下结果: =Table.ExpandRecordColumn(#“Expanded Column1”、“data”

我使用Power Query将数据从API拉入Excel表。这是一个动态API,可以指定日期范围。例如,报告通常在上个月的月初运行(例如01/06/2020 00:00-01/07/2020 00:00)

API将返回多个不同站点在指定日期范围内的平均风速

我的问题是,API中的数据列名会根据指定的日期范围而更改。 例如,如果我在扩展该列时运行它以获取2020年6月的数据,我会得到以下结果:

=Table.ExpandRecordColumn(#“Expanded Column1”、“data”、{“2020-06-01T00:00:00”}、{“2020-06-01T00:00:00”})

这导致列名为2020-06-01T00:00:00

然后我将几个查询合并在一起,在这一点上,一切看起来都很正常。 但是,如果我将日期范围更改为查看May,例如,查询将保留列标题2020-06-01T00:00:00,但是实际数据中的列标题为2020-05-01T00:00:00

因此,不会返回平均风速,而是将所有值替换为Null

我的猜测是,这是使用API调用时的一个基本问题,但是有人知道阻止此问题发生的方法吗


非常感谢

如果您的API输出如下所示:

{
"2020-06-01T00:00:00": [
    {
        "site": 111,
        "avgSpeed": 12.5
    },
    {
        "site": 112,
        "avgSpeed": 12.5
    },
    {
        "site": 113,
        "avgSpeed": 15.5
    },
    {
        "site": 114,
        "avgSpeed": 25.4
    }
]
}
首先将源转换为表。这将使日期键成为其自己列中的值。例如:

let
    Source = Json.Document(Web.Contents("https://....")),
    RecordToTable = Record.ToTable(Source),
    #"Expanded Value" = Table.ExpandListColumn(RecordToTable, "Value"),
    #"Expanded Value1" = Table.ExpandRecordColumn(#"Expanded Value", "Value", {"site", "avgSpeed"}, {"site", "avgSpeed"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded Value1",{{"Name", "Date"}})
in
    #"Renamed Columns"
更新: 根据提供的JSON示例,下面的代码应该可以使用。这里的关键还在于使用Record.ToTable()函数


嗨,Alex,谢谢你的帮助,但是我认为我的API的输出阻止了你的建议的工作:
[{“聚合”:“站点”,“聚合名称”:[],“聚合ID”:18,“设备ID”:[141142],“分辨率”:“间隔”,“计算”:“平均”,“数据信号”:{“dataSignalId”:1,“title:“Wind speed”,“unit:“m/s”},“data:{“2020-07-01T00:00:00”:3.4220002028192136}
,这意味着实际平均速度在列标题的日期下返回。谢谢。我假设您的JSON示例缺少一个
]
最后,我的更新建议应该适合您。
let
    Source = Json.Document(Web.Contents("https://....")),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"aggregate", "aggregatePathNames", "aggregateId", "deviceIds", "resolution", "calculation", "dataSignal", "data"}, {"aggregate", "aggregatePathNames", "aggregateId", "deviceIds", "resolution", "calculation", "dataSignal", "data"}),
    RecordsToTable = Table.AddColumn(#"Expanded Column1", "data_table", each Record.ToTable([data])),
    #"Expanded data_table" = Table.ExpandTableColumn(RecordsToTable, "data_table", {"Name", "Value"}, {"Name", "Value"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded data_table",{{"Name", "Date"}}),
    #"Removed Columns" = Table.RemoveColumns(#"Renamed Columns",{"data"}),
    #"Expanded dataSignal" = Table.ExpandRecordColumn(#"Removed Columns", "dataSignal", {"dataSignalId", "title", "unit"}, {"dataSignalId", "title", "unit"})
in
    #"Expanded dataSignal"