Tableau:桑基图补充内容

写完才意识到,现在写这篇博客对于我来说有点太早了。若有未尽之处,请海涵!

序言

  在上一篇博文(参考资料1)中已经完成了桑基图的制作,但还遗留了些问题。主要包括以下两个方便的内容:

  • 在画sigmoid曲线的时候,未能对各个计算字段的表计算依据设置原因进行说明。
  • 在桑基图优化部分,未能对两个柱状图重新排序的原因进行说明。

  若想解决上述两个问题,则需要了解Tableau表计算依据中的【特定维度】,关于【特定维度】的内容可以看参考资料2。
  参考资料1中画的桑基图是从3个类别流向5个产区,并且每一条sigmoid曲线是由49个点串联而成。为了能在不妨碍对上述两个问题进行阐述的前提下方便后续截图,这里要对数据进行精简。需要精简的数据包括以下几点:

  • 地区:仅保留华北、东北。这部分精简可以通过【筛选器】来实现。
  • 类别:仅保留技术、办公用品。操作同上。
  • 类型(数据桶):将数据桶的大小改为16,这样可以由49个数据点精简到4个数据点。这部分通过编辑“类型(数据桶)”,将“数据桶大小”改为16来实现。
  • 计算字段【index】: 由于类型数据桶的大小做了改变,为了保证【index】构造的数据仍能以0点为中心,需要将【index】的计算公式改为:(INDEX()-2.5)/0.5。
1.表计算依据设置

  在制作桑基图的sigmoid曲线时,定义了多个计算字段。而这些计算字段依据其具体作用可以分为三类:

  • 构造sigmoid曲线的 x x x坐标:【index】
  • 构造sigmoid曲线的 y y y坐标:【ft】及其嵌套计算字段【rank1】、【rank2】、【sigmoid】
  • sigmoid曲线的粗细:【size】

  采用不同的先后顺序给各个计算字段设置表计算依据对最终形成的桑基图不会有影响,这里采用的顺序是先【index】、【size】再【ft】。
  为了能更清晰的展示设置表计算依据之后发生的变化,这里直接使用“分析”->“查看数据“中的数据而非工作薄中的图来展示结果。把所有的字段都拖拽到相应位置之后(具体位置看参考资料1),设置表计算依据之前,此时的数据如下:
在这里插入图片描述

1.1【index】表计算依据

  【index】的作用是产生每条sigmoid曲线的 x x x坐标。按照桑基图的定义,这里要给每一个(类别,地区)对画一条sigmoid曲线,很显然“类别”和“地区”需要作为【index】的分组依据(group by子句)。在每一组(类别,地区)中,INDEX()按“类型(数据桶)”的默认顺序(partition by子句)可以产生[1,2,3,4]的整数组,再经过(INDEX()-2.5)/0.5即可变换成[-3,-1,1,3]整数组。这个整数组即是每一个(类别,地区)对应的sigmoid曲线的 x x x坐标。
  所以【index】的计算依据为【特定维度】下的“类型(数据桶)”。当【index】的计算依据设置完之后,数据如下:
在这里插入图片描述
注意:类型(数据桶)中缺失值已经显示出来了,但缺失数据对应的“销售额”为空。

1.2【size】表计算依据设置

  【size】的作用是将原本粗细相同的sigmoid曲线依据其对应的“销售额”占比产生粗细差别。由于【size】是作用在每一条sigmoid曲线上的,很显然“类别”和“产区”是其分组依据,所以这里其计算依据为【特定维度】下的“类型(数据桶)”。此时数据如下:
在这里插入图片描述
注意:从这组数据中可以发现,每一个(类别,产区)的【size】有两个不同取值。从最后的sigmoid曲线上也可以看出,每条曲线上的最后一个点较大。这是因为【size】的计算公式里使用的是RUNNING_SUM。若希望一条sigmoid曲线只对应一个【size】值的话,可以将【size】的公式更改为:TOTAL(SUM([销售额]))。

1.3【ft】计算依据设置

  【ft】的作用是控制每条sigmoid曲线的 y y y坐标,其计算公式中嵌套了三个计算字段,具体如下:

  • 【rank1】:控制每条sigmoid曲线的起点 y y y坐标。
  • 【rank2】:控制每条sigmoid曲线的终点 y y y坐标。
  • 【sigmoid】:标准sigmoid曲线生成函数。这里需要给其公式中用到的【index】设置计算依据。

  【ft】中嵌套的【index】的计算依据跟前文提到的【index】计算依据相同,不再赘述。接下来主要对【rank1】和【rank2】的表计算依据设置进行说明。
  在制作桑基图的时候,【rank1】和【rank2】作为【ft】的中间结果并没有在数据中展示出来,这里为了将【rank1】和【rank2】的计算结果展示出来,打开一个新的工作薄,将与计算【rank1】、【rank2】和【ft】有关的字段拖拽到如下图所示的位置:
在这里插入图片描述
这里依然将【index】的计算依据调整为【特定维度】下的“类型(数据桶)”。此时,数据结果如下图:
在这里插入图片描述
  首先【rank1】确定的是每条sigmoid曲线的起点 y y y坐标。为了和左边的柱状图匹配,这就要求【rank1】至少要满足以下三个要求:1)【rank1】的取值范围在[0,1]之(其公式能满足此要求);2)每一条sigmoid曲线的起点不重合(为了满足这个要求,需要“类别”和“地区”都加入到【rank1】的表计算依据中;3)不同“类别”的【rank1】之间存在大小关系,比如所有“办公用品”的【rank1】值要大于所有“技术”的【rank1】值(为了满足这个要求,需要“类别”的排序层级高于“地区”)。
  其次【rank2】确定的是每条sigmoid曲线的终点 y y y坐标。为了配合右边的柱状图,【rank2】除了要满足【rank1】的前两项要求之外,还需要保证不同“地区”的【rank2】之间存在大小关系,比如所有“东北”地区的【rank2】值必须大于所有"华北“地区的【rank2】值。所以对于【rank2】,需要“类别”和“地区”都加入到【特定维度】中,并且“地区”的排序层级要高于“类别”。
  若按上述要求将“类别”和“地区”加入到【rank1】和【rank2】表计算依据之后,此时【rank1】、【rank2】和【ft】的值如下(【ft】中的【rank1】和【rank2】也做相同的操作):
在这里插入图片描述
  此时对于“类型(数据桶)"的缺失值,其对应的【rank1】和【rank2】都是缺失的,同样,利用【rank1】和【rank2】求解的【ft】也是缺失的(上图中红框中的部分,或从图表上也可以看到所有的点都分布在两边),这显然不符合要求。所以“类型(数据桶)“也加入到【rank1】和【rank2】的计算依据中,放在最后一个层级即可。此时数据如下:
在这里插入图片描述
从上图框出来的部分可以发现,【rank1】在最后一个数据桶值突然增加(【rank2】-【rank1】不变),这正是sigmoid曲线重点突然发生转折的原因。

2.柱状图排序

  在桑基图美化部分对柱状图进行排序,主要是为了sigmoid曲线的起点或终点能和左右两边的柱状图匹配上。以sigmoid曲线的起点【rank1】和左柱状图为例进行说明。下面是【rank1】的计算结果:
在这里插入图片描述
  从参考资料2中可以知道,【rank1】的计算结果与“类别”和“地区”的排序顺序有关,这两个字段的默认排序为“按 数据源顺序 升序”(上图箭头表示表示的方式)。基于这张图可以知道,数据源顺序越低,其【rank1】就越小,sigmoid曲线就靠下。但是在柱状图中,数据源顺序越低,其显示的位置就越高。如下图(图中箭头所指示的方式为“数据源顺序 升序”方向)。所以需要调整这两个柱状图的顺序。
在这里插入图片描述

参考资料
  1. Tableau画桑基图:https://blog.csdn.net/yeshang_lady/article/details/116480912
  2. Tableau中的特定维度:https://blog.csdn.net/yeshang_lady/article/details/116756982
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值