由于新书还在写作中,所以无法全身心投入公众号的写作中,最近基本没怎么更新,今天干脆把书里的内容找一篇放出来供大家学习。素材取自WOW2020第23周的挑战,在此基础上我增加一些内容,将图表扩充为多柱形图+折线图的组合图表,这种图表在Tableau中默认是不支持的,需要通过自己构造连续字段作为横轴来解决,难点就在如何构造这个连续字段。
模仿Excel条形图
本节案例采用WOW2020第23周的挑战(Can You Excel At Bar Charts?),这个挑战看似简单,也非常考验我们对Tableau底层逻辑的理解。
按照一般的制图思路,我们通常会将两个订单日期(Order Date)拖到列功能区,分别修改成月(Order Date)和年(Order Date)两个离散字段,但是这样的条形图并不满足要求,不仅轴的位置不对,而且也不能保证月份之间有足够的间隔。
当你认真去观察这个图表的时候,就会发现X轴有零值线和刻度,很明显是一个连续字段形成的坐标轴。我们顺着这个思路继续思考,连续字段无非就是日期或数值,但经过尝试使用日期类型的月份作为横轴,并没有太好的方法控制条形图的位置。遇到这种情况,使用数值型数据更有利于创建计算字段控制条形图的位置,而显示成某“月”则可以通过调整字段格式来实现。
如图所示,如果提取出数值型的月份放到X轴上,就会形成一条连续的坐标轴,想要在坐标轴上显示柱状图,并不能直接使用年度信息,而是要将年度信息根据已提取出的月份,转化成特定的数值。为了保证柱形图显示的对称性,2016和2017年应转换为小于月份的数值,而2018年和2019年应转换为大于月份的数值。
根据上面的分析,我们就可以新建两个计算字段
- Year:
DATEPART('year',[Order Date])
- X轴:
CASE [year]
WHEN 2016 THEN DATEPART('month',[Order Date])-0.24
WHEN 2017 THEN DATEPART('month',[Order Date])-0.08
WHEN 2018 THEN DATEPART('month',[Order Date])+0.08
WHEN 2019 THEN DATEPART('month',[Order Date])+0.24
END
将“X轴”字段拖到列功能区,“Sales”字段拖到列功能区,“year”字段拖到颜色标签,适当调整标记大小,最后通过修改轴的显示格式,即可将数值型数据显示为月份数据。通过构造连续轴的方式,我们就成功的在Tableau中模仿了Excel格式的条形图。
在这个挑战的基础上进一步延伸,就制作Excel中常见的多柱图与折线图的组合图表。我们在基础知识部分(2.5基础数据与视图分区)中提到过,使用离散数据作为X轴,由于分区的存在会导致折线图被截断。如果在此基础上制作折线图,就会出现这种情况。但是新X轴已经被改造成了连续的坐标轴,因此就可以绘制出连续的折线图。
假如,我们希望计算各月份(不区分“年”)的销售利润,由于这个计算与当前视图详细级别不同,所以需要使用LOD表达式,
- 月度利润:
{ FIXED DATEPART('month',[Order Date]):SUM([Profit])}
理论上,我们希望在X轴等于1、2、3……时显示月度销售额的合计,但是观察视图数据之后,却发现X轴中并没有1、2、3这样的整数,不同年份的数据已经被分配到了整数的左右两侧。因此,我们只能退而求其次,让利润数据与2018年(或2017)相对应,因此,新建计算字段
- Y轴(折线):
if [X轴]=DATEPART('month',[Order Date])+0.08 then [月度利润] END
将“Y轴(折线)”字段拖到行功能区,标记类型选择“线”并使用双轴,将“year”字段拖到路径,就得到了多柱图与折线图的结合图表。
根据数据结构的不同,制作方法也并不唯一。假如是数据结构是多度量值制作类似图形,虽然思路一样,但方法又不一样了。这个请参看我的朋友气球哥(低调的Tableau大神)的一篇公众号文章。
公众号:表哥吹气球
文章:《【Tableau小钉子】729:按月度-用三个度量制作双柱加折线图》
地址:(https://mp.weixin.qq.com/s/xbt0g1YpxjfhHFEnVwFu0Q)