Excel导入瑞典统计局API仅获单列数据的技术求助
解决瑞典统计局(SCB)API导入Excel仅显示一列的问题
问题根源
你的Power Query代码错误地将API返回的key数组(包含指标代码和时间两个元素)展开成了单行列表,导致本该分为两列的维度数据混在了同一列中。SCB API返回的data结构为:
{"key": ["指标代码", "时间"], "values": ["数值"]}
需要将key数组的两个元素分别提取为独立列,而非展开成多行。
修正后的Power Query代码
针对你使用本地JSON查询文件的场景,以下是修正后的代码:
let url = "https://api.scb.se/OV0104/v1/doris/en/ssd/START/PR/PR0101/PR0101A/KPItotM", // 读取本地JSON并提取有效查询体(去掉外层的queryObj包装) rawJson = File.Contents("C:\Users\Alexa\Desktop\JSON-question.json"), parsedJson = Json.Document(rawJson), jsonReq = Text.ToBinary(Json.FromValue(parsedJson[queryObj])), // 发送POST请求,添加JSON格式请求头 web = Web.Contents(url, [ Content=jsonReq, Headers=[#"Content-Type"="application/json"] ]), responseJson = Json.Document(web), // 直接提取data数组,简化流程 dataList = responseJson[data], #"Converted to Table" = Table.FromList(dataList, Splitter.SplitByNothing()), // 展开key和values字段 #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"key", "values"}, {"key", "values"}), // 从key数组中拆分出指标代码和时间列 #"Added Custom Columns" = Table.AddColumns(#"Expanded Column1", { "指标代码", each [key]{0}, "时间", each [key]{1} }), // 清理冗余列并转换数据类型 #"Removed Columns" = Table.RemoveColumns(#"Added Custom Columns",{"key"}), #"Expanded values" = Table.ExpandListColumn(#"Removed Columns", "values"), #"Changed Type" = Table.TransformColumnTypes(#"Expanded values",{ {"指标代码", type text}, {"时间", type text}, {"values", Currency.Type} }, "sv-SE"), // 重命名数值列便于识别 #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"values", "KPI数值"}}) in #"Renamed Columns"
关键改动说明
- 修正请求体:你的本地JSON外层有
queryObj包装,需提取该部分作为API请求内容,否则API无法识别查询参数。 - 添加请求头:明确指定
Content-Type: application/json,确保API正确解析POST请求的JSON格式。 - 拆分key数组:通过
[key]{0}和[key]{1}分别提取指标代码与时间,生成两个独立列,避免数据混排。 - 简化流程:直接从返回JSON中提取
data数组,跳过不必要的Record转Table与筛选步骤。
关于Excel「从Web」功能的说明
Excel自带的「从Web」默认发送GET请求,而SCB API需要携带JSON查询体的POST请求,因此无法直接用该功能完成查询,必须通过Power Query的Web.Contents实现。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

