知識庫

計算日期之間的工作日數


發佈時間 : 17 Feb 2017
上次修改日期 : 05 Jun 2023

問題

如何計算兩個日期之間的工作日(或營業日)數。例如,資料來源中的兩個日期欄位、兩個參數日期之間的工作日數,或一個月內的工作日數。

環境

Tableau Desktop

答案

    
         
按一下以展開解決方案        

選項 1:對資料來源中兩個日期欄位之間的工作日進行計數

步驟 1:建立導出欄位
  1. 選擇「分析」>「創建計算欄位」
  2. 在打開的「計算欄位」對話框中,執行以下作業,然後按一下「確定」:
    1. 命名此計算欄位。在此範例中,導出欄位名為 "Order Date (shifted to weekday)"
    2. 在公式欄位中,建立一個類似如下的計算:
       
      IF DATEPART('weekday', [Order Date]) = 1
      THEN DATEADD('day', 1, [Order Date])
      ELSEIF DATEPART('weekday', [Order Date]) = 7
      THEN DATEADD('day', 2, [Order Date])
      ELSE [Order Date]
      END
  3. 使用類似如下的計算建立一個名稱類似 "Ship Date (shifted to weekday)"(發貨日期(轉移到工作日))的導出欄位:
     
    IF DATEPART('weekday', [Ship Date]) = 1
    THEN DATEADD('day', -2, [Ship Date])
    ELSEIF DATEPART('weekday', [Ship Date]) = 7
    THEN DATEADD('day', -1, [Ship Date])
    ELSE [Ship Date]
    END
  4. 使用類似如下的計算建立一個名稱類似 "# of Weekdays from Order to Shipping"(從訂購到發貨的工作日數)的導出欄位:
     
    MIN(
    DATEDIFF('day', [Order Date (shifted to weekday)], [Ship Date (shifted to weekday)])
    + 1
    - 2 * DATEDIFF('week', [Order Date (shifted to weekday)], [Ship Date (shifted to weekday)])
    )
步驟 2: 生成視圖
  1. 將 [Order ID](訂單 ID)拖曳到「列」架
  2. 可選:將 [Order Date](訂單日期)和 [Ship Date](發貨日期)拖曳到「列」架
  3. 將 [# of Weekdays from Order to Shipping](從訂購到發貨的工作日數)拖曳到「標記」卡片上的「文字」
 
按一下以展開解決方案        

選項 2:對每個日期欄位每個月的工作日進行計數

此範例使用範例資料集合「Superstore」,針對訂單日期尋找每個月內的工作日數。
  1. 選擇「分析」>「創建計算欄位」
  2. 在打開的「計算欄位」對話框中,執行以下作業,然後按一下「確定」:
    1. 命名此計算欄位。在此範例中,導出欄位名為 "Start of Month Date"(月開始日期)
    2. 在公式欄位中,建立一個類似如下的計算:

      DATETRUNC('month', [Order Date])
  3. 使用類似於如下的計算建立一個名稱類似 "End of Month Date"(月結束日期)的導出欄位:

    DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [Order Date])))
  4. 按照“選項 1”中的指引進行動作,並使用“[Start of Month Date]”(月開始日期)而不是“[Order Date]”(訂單日期),使用“[End of Month Date]”(月結束日期)而不是“[Ship Date]”(發貨日期) 
         
按一下以展開解決方案

選項 3:排除假日的工作日計數

此範例使用範例資料集合「Superstore」,針對每個訂單尋找訂單日期和發貨日期之間的工作日數。

步驟 1:設定資料
  1. 將包含一系列假日日期的表新增到原始資料來源。在此範例中,此表名為 "Holidays"(假日)
  2. 導覽到 Tableau Desktop 中的「資料來源」索引標籤
  3. 將 "Holidays"(假日)表新增到畫布區域
  4. 在「加入」對話方塊中,執行以下動作:
    1. 選擇「左」
    2. 在「資料來源」下,選擇 Order Date(訂單日期)
    3. 在 Holidays(假日)下,選擇 Holiday Date(假日日期)
    4. 按一下等號,並選擇 <=
    5. 在「資料來源」下,按一下「新增新的加入子句」,並選擇 Ship Date(發貨日期)
    6. 在 Holidays(假日)下,選擇 Holiday Date(假日日期)
    7. 按一下等號,並選擇 >=
 
附註: 應將 [Order Date](訂單日期)和 [Ship Date](發貨日期)分別取代為實際開始日期和結束日期。如果開始日期和結束日期是導出欄位,則可以在加入計算中重新建立這些計算。如果無法將包含假日的表新增到原始資料來源,則建立一個加入到包含假日的外部表的跨資料庫聯結。這須升級到 Tableau Desktop 10.5 或更高版本,方便利用跨資料庫聯結功能的加入子句中的不等式。
 
步驟 2:創建計算
  1. 導覽到一個工作表
  2. 按照選項 1 指引中的步驟 1-1 至 1-3 進行動作,建立 [Order Date (shifted to weekday)] 和 [Ship Date (shifted to weekday)] 計算
  3. 使用類似如下的計算建立一個名稱類似 # of Weekdays from Order to Shipping(從訂購到發貨的工作日數)的導出欄位:
     
    MIN(
    DATEDIFF('day', [Order Date (shifted to weekday)], [Ship Date (shifted to weekday)])
    + 1
    - 2 * DATEDIFF('week', [Order Date (shifted to weekday)], [Ship Date (shifted to weekday)])
    ) - COUNTD([Holiday Date])

步驟 3:建立視圖
  1. 將 [Order ID](訂單 ID)拖曳到「列」架
  2. 可選:將 [Order Date](訂單日期)和 [Ship Date](發貨日期)拖曳到「列」架
  3. 將 [# of Weekdays from Order to Shipping (excluding holidays)](從訂購到發貨的工作日數,不包括假日)拖曳到「標記」卡片上的「文字」
這篇文章是否解決了問題?