同比和環(huán)比是統(tǒng)計分析中常見的功能,在Tableau中,通過表計算,我們不用寫一行代碼,就可以快速實現(xiàn)同比和環(huán)比。
環(huán)比
根據(jù)百度得到,環(huán)比增長率=(本期數(shù)-上期數(shù))/上期數(shù)×100%。
以2016年10月銷售額為例,環(huán)比增長率=(2016年10月銷售額-2016年9月銷售額)/2016年9月銷售額*100。那么在Tableau中,怎么才能不寫代碼就得到環(huán)比增長率呢?不寫代碼?我書讀的少,不要忽悠我哦!
以10.2版本為例,數(shù)據(jù)源使用自帶的《示例 - 超市》,讀取數(shù)據(jù)源后,將訂單日期拖到行功能區(qū),右鍵選擇下面的“月”格式,并設(shè)置為離散,效果如下:

然后復(fù)制度量窗格的“銷售額”,將“度量名稱”拖到列功能區(qū),按住ctrl鍵將“度量名稱”從列功能區(qū)拖到篩選器區(qū),并選擇“銷售額”、“銷售額(復(fù)制)”兩個度量字段:

將“度量”窗格的“度量值”拖到“標記”——“文本”:

這樣我們就得到了一個按年月升序排列的銷售額數(shù)據(jù),接下來右鍵“標記”區(qū)的“總計(銷售額(復(fù)制))”字段,選擇“快速表計算”——“百分比差異”,就得到了我們想要的環(huán)比數(shù)據(jù)啦:


設(shè)置下字體格式,編輯下字段別名:

你沒有看錯,就是辣么簡單!就是不寫一行代碼!就是辣么任性!環(huán)比就搞定了!??!
先不要高興的太早,老話說,知其然,還要知其所以然。為什么Tableau計算環(huán)比這么簡單,我們來看看原因在哪里。
在前面的操作中,我們使用了Tableau一個強大的功能,表計算。這里的表,并不是數(shù)據(jù)源對應(yīng)的那個表,而是一個虛擬表,是在工作表開發(fā)界面由選擇的維度和度量構(gòu)成的一張?zhí)摂M表。在環(huán)比這個例子中,虛擬表是由“訂單日期”按照年月格式顯示的一個維度字段,和“銷售額”、“銷售額(復(fù)制)”兩個度量字段,按照“訂單日期”升序排列而創(chuàng)建。升序排列讓Tableau知道該如何選擇“本期”和“上期”,兩個度量字段用于實際計算環(huán)比,但是最關(guān)鍵一步,還是在于選擇的表計算類型“百分比差異“。讓我們右鍵“總計(銷售額(復(fù)制))”字段,選擇“編輯表計算”,一探“百分比差異”的神奇之處:

這里有幾個關(guān)鍵之處,首先我們看到“計算依據(jù)”選擇了“表(向下)”,由于虛擬表是按照訂單日期升序排列,因此“表(向下)”告訴了Tableau你計算“百分比差異”的順序是往下,另外下面可以看到“相對于”——“上一”,這就是告訴Tableau,“上期”的位置是“當期”的上面一個數(shù)值。翻譯成人話就是,從2013年1月開始計算,往下一直到2016年12月。第一個當期是2013年1月銷售額,上期就是上一行,也就是2012年12月銷售額,但是虛擬表中沒有2012年12月銷售額,因此2013年1月的環(huán)比為空。然后往下到第二行,2013年2月銷售額為當期,那么上期就是上一行,也就是2013年1月銷售額,這時候按照內(nèi)置的計算邏輯:(2013年2月銷售額-2013年1月銷售額)/2013年1月銷售額*100,就得到了2013年2月環(huán)比增長率,后面以此類推,直接2016年12月銷售額計算完畢,整個表計算也就結(jié)束。
有同學(xué)會問,如果不是升序排列,而是降序呢?那么只要在“相對于”這里,選擇“下一”就可以了:

再提高一點,除了通過可視化了解環(huán)比,還可以通過Tableau自動生成的代碼來學(xué)習(xí)環(huán)比計算,我們可以雙擊“標記”區(qū)的“總計(銷售額(復(fù)制))”字段,將里面的代碼拷貝出來,貼到一個文本文件:

是不是看了有點暈,沒關(guān)系,我們先解釋下幾個函數(shù):
ZN函數(shù)是指如果括號里的表達式結(jié)果不為NULL,則返回它,否則返回0。用這個函數(shù)主要是處理NULL值。
ABS函數(shù)是取括號里表達式的絕對值。
重點來了,趕緊記趕緊記,LOOKUP函數(shù)是這段代碼的靈魂,括號內(nèi)分兩部分,逗號前面是當前值,后面的-1表示上一個值,翻譯成人話就是根據(jù)當前值,找它的上一個值。
三個函數(shù)明白了以后,這段代碼的含義就可以理解為:
(當前值 - 根據(jù)當前值找到它的上一個值)/根據(jù)當前值找到它的上一個值的絕對值。雖然有點繞口,但這就是“表計算——百分比差異”在Tableau中的語法。
掌握了這個公式,其實我們就可以直接用代碼來快速實現(xiàn)同比了。
同比
根據(jù)百度得到,同比增長率=(本期數(shù)-同期數(shù))/同期數(shù)×100%。
以2016年10月銷售額為例,環(huán)比增長率=(2016年10月銷售額-2015年10月銷售額)/2015年10月銷售額*100。下面我們看下如何快速實現(xiàn)同比。我們復(fù)制剛才的“環(huán)比”工作表,重命名為“同比”:

然后我們雙擊“標記”——“總計(銷售額(復(fù)制))”,將公式修改如下:
(ZN(SUM([銷售額 (復(fù)制)])) - LOOKUP(ZN(SUM([銷售額 (復(fù)制)])),-12)) / ABS(LOOKUP(ZN(SUM([銷售額 (復(fù)制)])),-12))
想一下,為什么這里不是-1,而是-12了?
因為同比,只要日期中間沒有中斷,那么上一個值就應(yīng)該是去年同月,自然等于當前年月-12了。
我們來看下結(jié)果:

2013年的12個月份,由于沒有對應(yīng)的2012年數(shù)據(jù),因此同比也沒有數(shù)據(jù),第一個應(yīng)該是從2014年1月開始。有興趣同學(xué)可以逐一核對。
如果日期按降序排列,那么代碼中只需要將-12替換成12就可以了,是不是非常的簡單方便!
掌握了這個計算公式后,不論同比、環(huán)比,還是當前值與之前、之后的任一值進行比較,我們都可以快速通過修改代碼,迅速得到正確結(jié)果,就是辣么爽!
注意事項:
1.日期序列中間不能有缺失,比如2016年12個月,如果沒有5月份,那就變成6月-4月,這是不對的。因此需要對數(shù)據(jù)源做出處理,人為添加5月份,值為0即可。
2.由于這個方法與日期字段的排序有緊密關(guān)系,因此當用戶修改了排序順序后,原來的計算公式就失效了,聰明的你,是否有更好的解決方案呢?
3.有關(guān)表計算的更多內(nèi)容,請參考課程:Tableau數(shù)據(jù)分析可視化高手進階(新)。