举个栗子!Tableau 技巧(165):快速计算工作日
來自銀行用戶的需求:我們的業務數據源表多、量大(超過 10 萬行),并且常常需要分析工作日數據。這種情況,Tableau 能快速實現嗎?
其實,在實際分析場景中,對于工作日的數據呈現,是普遍需求。尤其在中國,各種節日小長假的周末調休,給工作日數據分析帶來了更多的難度。
圖片來自網絡
那么,如何在 Tableau 中快速計算工作日呢?今天的栗子,將帶來三種不同場景的方法,一睹為快吧~
本期《舉個栗子》,我們要給大家分享的 Tableau 技巧是:快速計算工作日。
為方便學習,栗子使用 Tableau 自帶的“示例-超市”數據源。掌握栗子方法后,數據粉可嘗試使用自己的數據源。
---------------------------------------------->>
具體步驟如下:
場景一
計算兩個日期間的工作日數
此方法僅適用于:兩個日期之間沒有法定節日的情況,如果兩個日期之間有法定節日并涉及調休,請了解場景三的方法。
1、創建計算字段
打開 Tableau Desktop,連接“示例-超市”數據源,新建工作表。
然后,創建計算字段:右鍵單擊“數據”窗格空白處,在下拉菜單中選擇:創建計算字段。
? 計算字段:訂單日期(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [訂單日期]) = 1
THEN DATEADD(‘day’, 1, [訂單日期])
ELSEIF DATEPART(‘weekday’, [訂單日期]) = 7
THEN DATEADD(‘day’, 2, [訂單日期])
ELSE [訂單日期]
END
? 創建字段【發貨日期(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [發貨日期]) = 1
THEN DATEADD(‘day’, -2, [發貨日期])
ELSEIF DATEPART(‘weekday’, [發貨日期]) = 7
THEN DATEADD(‘day’, -1, [發貨日期])
ELSE [發貨日期]
END
Tips:為何要特別對待等于 1 或 7 的情況呢?因為 1 或 7 在該計算中,對應的是周日和周六(一周的第一天是周日),當碰到這種情況,就需要往前推 2 天或往后推 1 天。
? 創建字段:從下單到發貨的工作日數,鍵入函數
MIN(DATEDIFF(‘day’, [訂單日期(轉工作日)], [發貨日期(轉工作日)])+ 1- 2 * DATEDIFF(‘week’, [訂單日期(轉工作日)], [發貨日期(轉工作日)]))
2、創建視圖
將維度“訂單ID”拖放至行,再將維度“訂單日期”和“發貨日期”也拖放至行,設置為:精確日期和離散。
將計算字段“從下單到發貨的工作日數”拖放至“標記”卡的文本中(有必要的話,可以篩選一下數據)。
場景二
計算每個月的工作日數
1、創建計算字段
打開 Tableau Desktop,連接“示例-超市”數據源,新建工作表。
然后,創建計算字段:右鍵單擊“數據”窗格空白處,在下拉菜單中選擇:創建計算字段。
? 計算字段:每月第一天,鍵入函數
DATETRUNC(‘month’, [訂單日期])
? 計算字段:每月最后一天,鍵入函數
DATEADD(‘day’, -1, DATEADD(‘month’, 1, DATETRUNC(‘month’, [訂單日期])))
在上述的兩個字段的基礎上,再創建2個字段:
? 計算字段:每月第一天(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [每月第一天]) = 1
THEN DATEADD(‘day’, 1, [每月第一天])
ELSEIF DATEPART(‘weekday’, [每月第一天]) = 7
THEN DATEADD(‘day’, 2, [每月第一天])
ELSE [每月第一天]
END
? 計算字段:每月最后一天(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [每月最后一天]) = 1
THEN DATEADD(‘day’, -2, [每月最后一天])
ELSEIF DATEPART(‘weekday’, [每月最后一天]) = 7
THEN DATEADD(‘day’, -1, [每月最后一天])
ELSE [每月最后一天]
END
? 計算字段:每月工作日數,鍵入函數
MIN(DATEDIFF(‘day’, [每月第一天(轉工作日)], [每月最后一天(轉工作日)])
+1
- 2 * DATEDIFF(‘week’, [每月第一天(轉工作日)], [每月最后一天(轉工作日)])
)
2、創建視圖
將維度“訂單日期”拖放至行,右鍵單擊該膠囊,設置為“年月”模式和離散。再將計算字段“每月第一天”和“每月最后一天”拖放至行,也設置為“年月”模式和離散。
將計算字段“每月工作日數”拖放至列,并拖放至“標記”卡的文本中。
場景三
計算兩個日期間的工作日數(排除節日)
此方法適用于:兩個日期之間有法定節日的情況,如果兩個日期之間沒有法定節日,請了解場景二的方法。
1、準備及聯接數據
示例的場景說明:2018 年 10 月國慶 7 天小長假,這 7 天中必然包含周六和周日。
提前準備一份不含周末的節日數據:節假日(2018年10月)。因為 2018 年 10 月國慶節日假期中的 6 日和 7 日是周六和周日,所以這份數據源不要包含這兩天。
打開 Tableau Desktop,連接“示例-超市”和“節假日(2018年10月)”數據源。打開聯接數據源,將增加的新的數據源“sheet1”拖放至右側,選擇“左側”聯接,并添加聯接子句,如圖所示。
2、創建計算字段
接著,右鍵單擊“數據”窗格空白處,在下拉菜單中選擇:創建計算字段。
? 計算字段:訂單日期(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [訂單日期]) = 1
THEN DATEADD(‘day’, 1, [訂單日期])
ELSEIF DATEPART(‘weekday’, [訂單日期]) = 7
THEN DATEADD(‘day’, 2, [訂單日期])
ELSE [訂單日期]
END
? 計算字段:發貨日期(轉工作日),鍵入函數
IF DATEPART(‘weekday’, [發貨日期]) = 1
THEN DATEADD(‘day’, -2, [發貨日期])
ELSEIF DATEPART(‘weekday’, [發貨日期]) = 7
THEN DATEADD(‘day’, -1, [發貨日期])
ELSE [發貨日期]
END
? 計算字段:從下單到發貨的工作日數(剔除節假日),鍵入函數
MIN(DATEDIFF(‘day’, [訂單日期(轉工作日)], [發貨日期(轉工作日)])+ 1- 2 * DATEDIFF(‘week’, [訂單日期(轉工作日)], [發貨日期(轉工作日)])) - COUNTD([節假日])
3、創建視圖
將維度“訂單ID”拖放至行,再將維度“訂單日期”和“發貨日期”也拖放至行,并設置為:精確日期和離散。
將計算字段“從下單到發貨的工作日數(剔除節假日)”拖放至“標記”卡中的文本中。將維度“訂單日期”拖放至“篩選器”卡,篩選到到2018年10月(因為只準備了 2018 年 10 月的節日數據)。
補充說明
中國特有的“調休”方式,會將周末挪到節日前后一并休假。這種情況,可采用場景三中的類似計算方法,區別在于:
新增加的數據源,需要把所有的節日假日放入其中。用作假期調休的周末,因為要上班,所以不需要放入數據源中;
計算字段不需要創建場景二中的兩個轉工作日的字段,計算字段“從下單到發貨的工作日數(剔除節假日)”可直接用原本的兩個字段。
今天的 Tableau 技巧,你 Get 到了嗎?趕快試試看吧!
文章部分信息來源于網絡,如有侵權請告知
總結
以上是生活随笔為你收集整理的举个栗子!Tableau 技巧(165):快速计算工作日的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 章泽天加入微软实习 网友:提升程序员整体
- 下一篇: 腊八节的传说计算机导论,老潍县地区春节习