如何在Tableau中正确导入列为独立数组的JSON数据
问题:无需Python转换,如何让Tableau正确导入Open-Meteo API的JSON数据
从Open-Meteo API获取的JSON数据核心结构如下(hourly层级包含三个等长数组):
{ "latitude": 52.52, "longitude": 13.419, "hourly": { "time": ["2022-07-01T00:00", "2022-07-01T01:00", ...], "temperature_2m": [13, 12.7, ...], "wind_speed_10m": [14.1, 15.1, ...] }, "hourly_units": { "time": "iso8601", "temperature_2m": "°C", "wind_speed_10m" : "km/h" } }
直接导入Tableau时会生成大量笛卡尔积行(约500万行),但我们需要将三个数组按索引对应,转换成如下对象数组格式:
[ {"time": "2022-07-01T00:00", "temperature_2m":13, "wind_speed_10m":14.1}, {"time": "2022-07-01T01:00", "temperature_2m":12.7, "wind_speed_10m":15.1}, ... ]
解决方案(低代码,无需Python)
方法一:Tableau Desktop内置计算字段实现
导入原始JSON数据源
连接到JSON文件或通过Web数据连接调用API,确保选中完整的JSON对象,不要提前展开hourly的子数组。创建计算字段获取数组长度
新建计算字段数组长度,公式:SIZE(JSON_EXTRACT_ARRAY([hourly], '$.time'))用于确认三个数组长度一致,后续操作依赖等长数组。
生成索引序列
新建计算字段索引,公式:INDEX() - 1(JSON数组索引从0开始,Tableau的
INDEX()默认从1开始,减1实现索引对齐)创建对应数据字段
分别创建三个计算字段,提取对应索引位置的数组元素:- 时间字段:
JSON_EXTRACT_ARRAY_ELEMENT_TEXT([hourly], '$.time', [索引]) - 2米温度:
JSON_EXTRACT_ARRAY_ELEMENT_NUMBER([hourly], '$.temperature_2m', [索引]) - 10米风速:
JSON_EXTRACT_ARRAY_ELEMENT_NUMBER([hourly], '$.wind_speed_10m', [索引])
- 时间字段:
调整数据粒度
将索引字段拖到“行”功能区,右键点击索引选择计算依据 -> 表(向下),生成从0到数组长度-1的完整索引序列,此时每个索引对应一行数据。整理字段
隐藏原始的hourly、数组长度字段,只保留生成的时间、温度、风速字段,数据格式即符合需求。
方法二:Tableau Prep Builder可视化操作(更直观)
拆分数组为独立数据流
打开Tableau Prep Builder,导入JSON数据源后,分别提取hourly下的三个数组:- 第一个流:提取
time数组,重命名字段为time,添加计算字段索引(公式INDEX()-1) - 第二个流:提取
temperature_2m数组,重命名字段为temperature_2m,添加相同的索引字段 - 第三个流:提取
wind_speed_10m数组,重命名字段为wind_speed_10m,添加相同的索引字段
- 第一个流:提取
通过索引合并数据流
将三个流通过索引字段进行内连接,同一索引位置的三个值会自动合并为一行,得到目标格式的数据。导出使用
处理完成后,导出为Tableau数据源(.hyper文件),直接在Tableau Desktop中使用即可。
内容的提问来源于stack exchange,提问作者pieterbons
相关产品推荐
相关产品推荐

