Tableau技巧——快速计算同比和环比(及其衍生)

同比和环比是统计分析中常见的功能,在Tableau中,通过表计算,我们不用写一行代码,就可以快速实现同比和环比。

环比

根据百度得到,环比增长率=(本期数-上期数)/上期数×100%。

以2016年10月销售额为例,环比增长率=(2016年10月销售额-2016年9月销售额)/2016年9月销售额*100。那么在Tableau中,怎么才能不写代码就得到环比增长率呢?不写代码?我书读的少,不要忽悠我哦!

以10.2版本为例,数据源使用自带的《示例 - 超市》,读取数据源后,将订单日期拖到行功能区,右键选择下面的“月”格式,并设置为离散,效果如下:

然后复制度量窗格的“销售额”,将“度量名称”拖到列功能区,按住ctrl键将“度量名称”从列功能区拖到筛选器区,并选择“销售额”、“销售额(复制)”两个度量字段:

将“度量”窗格的“度量值”拖到“标记”——“文本”:

这样我们就得到了一个按年月升序排列的销售额数据,接下来右键“标记”区的“总计(销售额(复制))”字段,选择“快速表计算”——“百分比差异”,就得到了我们想要的环比数据啦:

设置下字体格式,编辑下字段别名:

你没有看错,就是辣么简单!就是不写一行代码!就是辣么任性!环比就搞定了!!!

先不要高兴的太早,老话说,知其然,还要知其所以然。为什么Tableau计算环比这么简单,我们来看看原因在哪里。

在前面的操作中,我们使用了Tableau一个强大的功能,表计算。这里的表,并不是数据源对应的那个表,而是一个虚拟表,是在工作表开发界面由选择的维度和度量构成的一张虚拟表。在环比这个例子中,虚拟表是由“订单日期”按照年月格式显示的一个维度字段,和“销售额”、“销售额(复制)”两个度量字段,按照“订单日期”升序排列而创建。升序排列让Tableau知道该如何选择“本期”和“上期”,两个度量字段用于实际计算环比,但是最关键一步,还是在于选择的表计算类型“百分比差异“。让我们右键“总计(销售额(复制))”字段,选择“编辑表计算”,一探“百分比差异”的神奇之处:

这里有几个关键之处,首先我们看到“计算依据”选择了“表(向下)”,由于虚拟表是按照订单日期升序排列,因此“表(向下)”告诉了Tableau你计算“百分比差异”的顺序是往下,另外下面可以看到“相对于”——“上一”,这就是告诉Tableau,“上期”的位置是“当期”的上面一个数值。翻译成人话就是,从2013年1月开始计算,往下一直到2016年12月。第一个当期是2013年1月销售额,上期就是上一行,也就是2012年12月销售额,但是虚拟表中没有2012年12月销售额,因此2013年1月的环比为空。然后往下到第二行,2013年2月销售额为当期,那么上期就是上一行,也就是2013年1月销售额,这时候按照内置的计算逻辑:(2013年2月销售额-2013年1月销售额)/2013年1月销售额*100,就得到了2013年2月环比增长率,后面以此类推,直接2016年12月销售额计算完毕,整个表计算也就结束。

有同学会问,如果不是升序排列,而是降序呢?那么只要在“相对于”这里,选择“下一”就可以了:

再提高一点,除了通过可视化了解环比,还可以通过Tableau自动生成的代码来学习环比计算,我们可以双击“标记”区的“总计(销售额(复制))”字段,将里面的代码拷贝出来,贴到一个文本文件:

是不是看了有点晕,没关系,我们先解释下几个函数:

ZN函数是指如果括号里的表达式结果不为NULL,则返回它,否则返回0。用这个函数主要是处理NULL值。

ABS函数是取括号里表达式的绝对值。

重点来了,赶紧记赶紧记,LOOKUP函数是这段代码的灵魂,括号内分两部分,逗号前面是当前值,后面的-1表示上一个值,翻译成人话就是根据当前值,找它的上一个值。

三个函数明白了以后,这段代码的含义就可以理解为:

(当前值 - 根据当前值找到它的上一个值)/根据当前值找到它的上一个值的绝对值。虽然有点绕口,但这就是“表计算——百分比差异”在Tableau中的语法。

掌握了这个公式,其实我们就可以直接用代码来快速实现同比了。

同比

根据百度得到,同比增长率=(本期数-同期数)/同期数×100%。

以2016年10月销售额为例,环比增长率=(2016年10月销售额-2015年10月销售额)/2015年10月销售额*100。下面我们看下如何快速实现同比。我们复制刚才的“环比”工作表,重命名为“同比”:

然后我们双击“标记”——“总计(销售额(复制))”,将公式修改如下:

(ZN(SUM([销售额 (复制)])) - LOOKUP(ZN(SUM([销售额 (复制)])),-12)) / ABS(LOOKUP(ZN(SUM([销售额 (复制)])),-12))

想一下,为什么这里不是-1,而是-12了?

因为同比,只要日期中间没有中断,那么上一个值就应该是去年同月,自然等于当前年月-12了。

我们来看下结果:

2013年的12个月份,由于没有对应的2012年数据,因此同比也没有数据,第一个应该是从2014年1月开始。有兴趣同学可以逐一核对。

如果日期按降序排列,那么代码中只需要将-12替换成12就可以了,是不是非常的简单方便!

掌握了这个计算公式后,不论同比、环比,还是当前值与之前、之后的任一值进行比较,我们都可以快速通过修改代码,迅速得到正确结果,就是辣么爽!

注意事项:

1.日期序列中间不能有缺失,比如2016年12个月,如果没有5月份,那就变成6月-4月,这是不对的。因此需要对数据源做出处理,人为添加5月份,值为0即可。

2.由于这个方法与日期字段的排序有紧密关系,因此当用户修改了排序顺序后,原来的计算公式就失效了,聪明的你,是否有更好的解决方案呢?

3.有关表计算的更多内容,请参考课程:Tableau数据分析可视化高手进阶(新)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容