Tableau, 數據分析

【Tableau 進階教學】做出MOM、YOY、YTD互動式報表

Tableau 進階應用:做出MOM、YOY、YTD互動式報表

數據分析最重要的分析方式就是比較,沒有比較,數字很難讓我們了解數字代表含義是什麼,舉例來說,同樣是月營收1000萬,對於過去每月營收平均是500萬的公司來說,1000萬代表著營收有突破性的成長,但對平均月營收2000萬的公司,則意味著這個月的經營出現大問題,需要好好檢視並調整經營策略。

比較分析的方式很多,這篇來分享比較常用的比較方式之一:時間維度比較,常見的時間維度比較包括:月度間比較的MOM (Month on Month)、年度間的比較 YOY(Year on Year)、年初至今與去年同期的比較 YTD(Year To Date),這篇文章我將分享如何建立出互動式的時間比較儀表板(如下示範),讓你只要按下一個按鈕,就可以立刻順暢切換YOY、MOM的數據比較區間,快速找到數據趨勢與判斷問題點!

p.s. 這一篇的操作較進階,如果對參數以及邏輯函式不太熟悉的話,建議先閱讀官方對於參數、計算公式的用法與說明:

  1. 參數參考文章
  2. IF…ELSEIF…ELSE…END 參考文章
  3. CASE WHEN…THEN…WHEN… THEN…END 參考文章
  4. MONTH() 、YEAR() 參考文章

數據比較區間說明

實作案例會做出三種數據比較區間,以月份為單位比較,第一種是本月跟上個月的數據比較,第二種是本月跟去年同期的數據比較,第三種則是今年年初(1/1)到本月的數據,與去年年初(1/1)的數據比較。都是時間區間的數據比較,這三種數據比較區間有什麼差別跟用途呢?

  1. 本月跟上個月的數據比較
    強調的是了解這個月跟上個月的差異,比較常會用這個指標來判斷如果這個月有做什麼特別的產品發佈或宣傳,有沒有達到預期的效果,而當與上個月各種公司資源投入與工作事項投入都差不多的時候,這個比較則可以讓我們確認數據是否持平,以及我們需要在加強什麼。不過,使用這個比較基準最需要注意的就是淡旺季以及是否有特殊促銷活動影響到前後兩月的營收差異,這也就是為什麼要加入去年同期來當作比較基準的原因。

  2. 今年本月跟去年同期的數據比較
    每間公司都會希望業績蒸蒸日上,今年的業績可以比去年來的更好,而與去年同期的比較,一來可以避免掉產業淡旺季的影響(因為如果對產業A來說,淡季都是在每年2月,那麼用去年同期的2月和今年2月比較,就會比只比較今年的1、2月來得更適合,只看今年的1、2月會讓我們誤以為2月發生了什麼重大的問題,但可能其實只是淡季的影響)。

  3. 今年年初(1/1)到本月的數據,與去年年初(1/1)的數據比較
    這個指標則是確保今年的累計數據與去年的累計數據是有成長的。因為公司常常會做月度的數據結算,就可能會忽略掉總體加總。例如說可能1月比起去年1月成長10%,2月比起去年2月衰退5%、3月比起去年衰退3%,那麼整體累積到3月的收益,是成長還是衰退的呢?單看每個月的成長和衰退數字我們無法知道,所以才要再搭配一個年度累計總和來比較今年比起去年,整體是否成長或衰退。

為了做出互動式的儀表板,我們需要善用 Tableau 參數與計算欄位,可以分成五個步驟的設定。

步驟一:使用「參數」作為報表篩選器

1. 建立「數據比較期間」的參數

2. 建立篩選年份的參數

3. 建立篩選月份的參數

步驟二:使用「計算」計算當期的數據資料

設定完參數,第二步我們來計算依照參數篩選器指定的「數據比較區間」、「年份」與「月份」,指定期間的銷售額是多少,也就是互動報表這邊當月份或累積月份的數據。

1. 將日期改成以月份、年份的資料呈現
由於原始資料是以日期呈現,不過報表的目標是以月份為單位比較,所以我們需要透過計算,讓資料可以只截取日期資料的「月份」以及「年份」。

擷取月份資料公式:MONTH([Order Date])

擷取年份資料公式:YEAR([Order Date])

2. 當數據比較區間是「與上個月比較(MOM)」或「與去年同期比較(YOY)」的當月銷售額
不論是「與上個月比較(MOM)」或「與去年同期比較(YOY)」的篩選,都是計算當月的銷售額。

當月的銷售額公式:
SUM(IF [年份] = [篩選年份] AND [月份] = [篩選月份] THEN [Sales] ELSE NULL END)
意思是當資料訂單日期的「年份」以及「月份」 等同於我們一開始建立參數的「篩選年份」與「篩選月份」時,就加總這些訂單日期的銷售額,如果年份月份不一樣,那就以NULL補值,就可以算出參數選定年月的銷售額。

3. 當數據比較區間是「累計至今與去年同期比較(YTD)」當年 1/1 到選定月份的銷售額
當年年初至當月的銷售額公式:
SUM(IF [年份] = [篩選年份] AND [月份] <= [篩選月份] THEN [Sales] ELSE NULL END)
意思是當資料訂單日期的「年份」等於我們一開始建立參數的「篩選年份」且「月份」小於等於「篩選月份」時,就加總這些訂單日期的銷售額,就可以算出參數選定當年度的年初到當月的銷售額。

步驟三:使用「計算」建立參數與比較的日期區間

接下來,在我們計算前月、去年同期以及去年年初累計至篩選月份的數據之前,我們要設定規則,讓BI報表可以依照這個規則去找出前月、去年同期的年份與月份。

1. 計算前月年份數與月份數
前月只有一種情況年份數會跟今年不一樣,那就是當我們篩選1月的資料的時候,前月的月份就會是前一年的12月,年份就會是篩選年份的前一年,所以我們可以寫判斷式,讓篩選月份 = 1 時,就以篩選年份的前一年當作前月的年份,如果是其他月份,就直接回傳篩選年份的年份數就可以了,公式:
IF [篩選月份] =1 THEN [篩選年份] -1 ELSE [篩選年份] END

同理,我們計算月份數時,只要在篩選月份是1月的時候,月份回傳12,篩選月份是其他月的時候,則是用篩選月份 -1 ,就可以回推前一個月的月份數了,公式:
IF [篩選月份] =1 THEN 12 ELSE [篩選月份]-1 END

2. 將月份的「數值」轉換成「字串」
計算完月份數與年份數之後,我們再來做格式對照轉換,畢竟儀表板還是需要有利於溝通,所以我們做些數字與文字的轉換對照,方便在儀表板上一目瞭然。總共需要做4個名稱對照,下面前兩個寫的「篩選月份」就是我們最一開始做的用來當月份篩選器的參數名稱,我們要為數字格式的參數寫對照的月份文字。

  • 篩選月份顯示名稱,公式:
    CASE [篩選月份]
    WHEN 1 THEN "Jan" WHEN 2 THEN "Feb" WHEN 3 THEN "Mar"
    WHEN 4 THEN "Apr" WHEN 5 THEN "May" WHEN 6 THEN "Jun"
    WHEN 7 THEN "Jul" WHEN 8 THEN "Aug" WHEN 9 THEN "Sep"
    WHEN 10 THEN "Oct" WHEN 11 THEN "Nov" WHEN 12 THEN "Dec"
    END

  • 篩選月份前月顯示名稱,公式:
    CASE [篩選月份]
    WHEN 2 THEN "Jan" WHEN 3 THEN "Feb" WHEN 4 THEN "Mar"
    WHEN 5 THEN "Apr" WHEN 6 THEN "May" WHEN 7 THEN "Jun"
    WHEN 8 THEN "Jul" WHEN 9 THEN "Aug" WHEN 10 THEN "Sep"
    WHEN 11 THEN "Oct" WHEN 12 THEN "Nov" WHEN 1 THEN "Dec"
    END

  • 前月年月顯示名稱,公式:[篩選月份前月顯示名稱] + " " + STR([計算前月年份數])
  • 去年同期年月顯示名稱,公式:[篩選月份顯示名稱] + " " + STR([篩選年份]-1)

3. 加入「數據比較期間」參數,判斷比對範圍更換比較區間
當使用「數據比較期間」參數當作篩選器時,我會期待當篩選 Jun 2016,並切換成MOM比較時,比較的時間區間是 May 2016,當切換成YOY比較時,比較的時間區間會變成 Jun 2015,再當切換成YTD比較時,比較的時間區間會變成 YTD Jun 2015。要達到這樣的效果,Again,又要來下判斷式了,讓比對的日期可以依照我們選定的「數據比較期間」參數值做變化。
公式是:
CASE [數據比較期間]
WHEN "與上個月比較(MOM)" THEN [前月年月顯示名稱 ]
WHEN "與去年同期比較(YOY)" THEN [去年同期年月顯示名稱]
WHEN "累計至今與去年同期比較(YTD)" THEN "YTD " + [去年同期年月顯示名稱]
END

步驟四:使用「計算」計算與比較區間相比的差異(%)

想要計算區間數值差異,除了我們一開始算好的當期數據外,最重要的就是比較區間的數據,包括前月的數據、去年同期數據以及去年年初累計到篩選月份的數據。最後一個步驟,我們來計算比較區間的數據。

1. 當數據比較區間是「與上個月比較(MOM)」的前月銷售額
公式:SUM(IF [年份] = [計算前月年份數] AND [月份] = [計算前月月份數] THEN [Sales] ELSE NULL END)

2. 當數據比較區間是「與去年同期比較(YOY)」的去年同期銷售額
公式:SUM(IF [年份] = [篩選年份]-1 AND [月份] = [篩選月份] THEN [Sales] ELSE NULL END)

3. 當數據比較區間是「累計至今與去年同期比較(YTD)」的去年累計至篩選月份的累計銷售額
公式:SUM(IF [年份] = [篩選年份]-1 AND [月份] <= [篩選月份] THEN [Sales] ELSE NULL END)

4. 透過判斷式判斷篩選年份與篩選月份的當期數值
各自算完當期與比較區間的銷售額之後,一樣要將參數納入計算當中,才可以做到用參數來當篩選器的效果,當我們篩選2016年7月,比較區間分別選擇MOM、YOY或YTD,銷售額的加總數字依序就是2016年7月(當期)的銷售額總計、2016年7月(當期)的銷售額總計以及2016年1月到2016年7月的累計銷售額。公式:
CASE [數據比較期間]
WHEN "與上個月比較(MOM)" THEN [銷售額 (本月)]
WHEN "與去年同期比較(YOY)" THEN [銷售額 (本月)]
WHEN "累計至今與去年同期比較(YTD)" THEN [銷售額 (今年至本月)]
END

5. 透過判斷式判斷篩選年份與篩選月份的比較區間數值
比較區間數值也同理,當我們篩選2016年7月,比較區間分別選擇MOM、YOY或YTD,比較區間的銷售額的加總數字依序就是2016年6月的銷售額總計、2015年7月的銷售額總計以及2015年1月到2015年7月的累計銷售額。公式:
CASE [數據比較期間]
WHEN "與上個月比較(MOM)" THEN [銷售額 (前月)]
WHEN "與去年同期比較(YOY)" THEN [銷售額 (去年同月)]
WHEN "累計至今與去年同期比較(YTD)" THEN [銷售額 (去年至去年同月)]
END

6. 計算當期值與比較值數據差異
簡單來說,就是用當期值 – 比較值,計算出兩者間的差異,以銷售額來說,結果如果是正數就代表成長,負數就表示衰退。公式:ZN([銷售額(當期值)]) - ZN([銷售額(比較值)])

7. 計算當期值與比較值數據差異比率
用當期值與比較值的差異,再除以比較值數據,就可以算出當期值比起比較值的成長率或衰退率。公式:ZN([銷售額(與比較區間差異)] / ABS([銷售額(比較值)]))

8. 依照成長或衰退比例,回傳成長或衰退的符號
還記得我們在儀表板上有看到 △▽ 這兩個成長或衰退的符號嗎?這個也是用判斷式創造出來的,我們透過判斷當期與比較期數值的正負數差異,給予不同的符號結果,公式:
CASE sign([銷售額(與比較區間差異)])
WHEN 1 THEN "△ "
WHEN 0 THEN " "
WHEN -1 THEN "▽ "
ELSE " "
END

9. 組裝各個計算公式到工作表
一個銷售額的KPI 卡片包括:銷售額(當期值)、銷售額(與比較區間差異)(符號)、銷售額(與比較區間差異%)以及依比較區間判斷年月,這四個計算數值,操作方式如下影片示範。

步驟五:使用「計算」判斷與比較區間是維持、成長還是衰退

公式:IF [銷售額(與比較區間差異%)]<0 then '衰退' elseif [銷售額(與比較區間差異%)] >0 then '成長' else '持平' end

最後,再將做好的銷售額、產品銷售長條圖,建立到儀表板窗格,就可以做出像文章一開始展示的Tableau互動式儀表板了。文章雖然沒有一一介紹到利潤、數量、客戶數以及訂單數的作法,但其實只需要重複步驟二與步驟四的計算,將Sale欄位改成數量、利潤或任何你想加總的數字,就能做出一樣的效果了~

文章的最後一樣提供這份儀表板使用的資源供參考:

1. Tableau 儀表板連結,可以自行下載研究報表內的公式與操作

2. 資料源:Sample – Superstore,來自Tableau論壇

Sharon


Buy me a coffee  用行動支持我的內容創作

如果我的文章對你有幫助,歡迎用行動支持我的內容創作,小額贊助請我喝咖啡、留言或是寄信來跟我分享你的收穫,都會讓我持續有動力分享更多內容唷~