如何在Tableau中基于三个不同关联表创建Sankey图?
解决Tableau多关联表创建Sankey图的思路
核心逻辑
Sankey图依赖节点-流动的结构化数据,每一行代表一组「起点→终点」的流量关系。针对三个通过数据混合关联的独立表,你需要先把跨表的流动路径拆解为两段(表1→表2、表2→表3),再将这两段数据合并,形成Sankey所需的统一结构。
具体操作步骤
确认关联字段与数据粒度
- 明确三个表之间的关联键(比如共同的ID字段),确保各表数据粒度一致(避免聚合表和明细表直接关联导致重复数据)。
- 如果原数据混合存在粒度差异,先对表做聚合/明细转换,统一到同一粒度(比如都按ID维度)。
生成两段流动路径数据
你需要通过Join将相邻表关联,生成两组流动数据:- 第一组:表1与表2关联,提取「关联键、表1节点(起点)、表2节点(终点)」,并标记阶段(比如
1-2) - 第二组:表2与表3关联,提取「关联键、表2节点(起点)、表3节点(终点)」,标记阶段(比如
2-3) - 推荐用自定义SQL直接生成,示例代码:
-- 生成表1到表2的流动数据 SELECT t1.id, t1.source_node AS start_node, t2.mid_node AS end_node, '1-2' AS flow_stage FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id UNION ALL -- 生成表2到表3的流动数据 SELECT t2.id, t2.mid_node AS start_node, t3.target_node AS end_node, '2-3' AS flow_stage FROM table2 t2 JOIN table3 t3 ON t2.id = t3.id
- 第一组:表1与表2关联,提取「关联键、表1节点(起点)、表2节点(终点)」,并标记阶段(比如
在Tableau中配置Sankey图
- 将上述自定义SQL结果作为数据源导入Tableau
- 创建度量:用
COUNT(id)表示流量大小(如果有数值型流量字段,直接用该字段求和) - 拖放字段:将
start_node和end_node分别作为维度,流量度量作为大小,然后切换到Sankey图类型(如果Tableau原生没有,可通过「显示方式→桑基图」或使用官方扩展)
注意事项
- 如果无法直接用Join(原数据混合是因为表结构差异大),可以先通过数据混合将三个表的节点字段整合到一个视图中,再导出为临时表,重复上述步骤。
- 确保所有节点名称在跨表中是统一的(比如表2的mid_node和表1、表3中的对应节点名称一致,避免Sankey出现断裂)
内容的提问来源于stack exchange,提问作者Satish tamang
相关产品推荐
相关产品推荐

