Excel Power查询编辑器中的动态列名问题
我使用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调用时的一个基本问题,但是有人知道阻止此问题发生的方法吗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”
非常感谢如果您的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"