You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tableau Desktop中使用PostgreSQL列中的JSON数据?

嘿,我来帮你搞定Tableau里处理这个嵌套JSON的问题!你这个场景是把PostgreSQL里的JSON列用到Tableau仪表盘中,其实有两种比较实用的方法,看你更习惯哪种:

方法1:用Tableau内置JSON函数直接处理(适合Tableau 2020.1及以上版本)

Tableau从2020.1开始支持原生JSON解析函数,刚好适配你这种嵌套键值对的结构,步骤如下:

  • 第一步:提取所有身体部位的名称
    创建一个计算字段,命名为身体部位列表,用JSON_KEYS函数提取顶层所有键:

    JSON_KEYS([你的JSON列名])
    

    这个字段会返回一个数组,比如["Head", "Spine", "WristRight", "ElbowLeft"]。

  • 第二步:将数组拆分成单独的行
    如果你用的是Tableau 2021.3及以上版本,可以直接把数组拆成每行对应一个身体部位:在数据窗格中右键点击身体部位列表字段,选择「转换为维度」,拖到行架上后,再右键点击该字段选择「拆分」→「拆分为行」。

  • 第三步:提取每个身体部位的属性字段
    现在每行对应一个身体部位,接下来创建计算字段提取具体数值,比如:

    • 提取count:
      INT(JSON_EXTRACT_PATH([你的JSON列名], [身体部位], 'count'))
      
    • 提取cumul_time:
      FLOAT(JSON_EXTRACT_PATH([你的JSON列名], [身体部位], 'cumul_time'))
      

    同理,start_time、prev、bad_at都可以用类似方法提取,记得根据数据类型转换为Tableau对应的类型(INT、FLOAT等)。

方法2:在PostgreSQL自定义SQL中预处理(更高效,适合大数据集)

因为你的数据源是PostgreSQL,它本身有强大的JSON处理能力,直接在自定义SQL里把JSON拆成结构化数据,再导入Tableau会更高效,尤其是数据量较大的时候:
编写自定义SQL如下(替换成你的表名和JSON列名):

SELECT 
    t.id, -- 替换成你的表主键或其他关联字段
    body_part.key AS body_part_name,
    (body_part.value->>'count')::int AS count,
    (body_part.value->>'cumul_time')::numeric AS cumul_time,
    (body_part.value->>'start_time')::double precision AS start_time,
    (body_part.value->>'prev')::numeric AS prev,
    (body_part.value->>'bad_at')::int AS bad_at
FROM your_table t,
     json_each(t.your_json_column) AS body_part

这个SQL会把每个JSON里的身体部位拆成单独的行,每个属性都转成对应的数据类型,直接把这个结果集作为Tableau的数据源,就像用普通结构化表一样使用了。

补充说明

如果你的JSON里还有更深层次的嵌套(比如某个身体部位里还有数组),可以结合JSON_EXTRACT_ARRAY_ELEMENT(Tableau端)或者json_array_elements(PostgreSQL端)来进一步拆分。另外,记得在Tableau里把提取后的字段设置正确的角色(维度/度量),方便后续做仪表盘可视化。

内容的提问来源于stack exchange,提问作者Antoine Poussard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:11:58