top of page

Tableau教學06 - 1月、2月數字加總後相除(一月和二月的平均銷售額),再跟當年度其他月份比較之公式詳解

作家相片: Ernie LiuErnie Liu

有些公司因一月或二月過年,在做業績或產量檢討時,實際工作天數驟減,會有數字加總失真的情況發生,所以在比較數字的時候,會將1月跟2月的數字加總之後相除,接著把這樣的數字再去跟其他月份的數字作比較。



一月和二月的平均銷售額,實際應用場景


假設你有一張銷售數據表,包含 [訂單日期] 和 [銷售額] 兩欄。這段公式可能用於:

  • 分析一月和二月的平均銷售額(例如冬季促銷效果),而其他月份則顯示總銷售額。

  • 按年份標準化一月和二月的數據(因為它們被平均),以便與其他月份進行比較。



如下圖示意:2021年1月實際業績22,638加上2021年2月業績36,805除以2,等於29,721。

Tableau 1月、2月數字加總後相除,再跟當年度其他月份比較

在excel中這類型表計算式很好實現的,但如果要直接在 Tableau 中計算就要去理解以下幾個關鍵的建立計算欄位的觀念:

  • 寫 IF 函式中常出現的報錯:不能在「IF」運算式中混合彙總和非彙總比較或結果

    • 解決方法:外包一層 ATTR函數

  • Fixed函數核心精神:用於計算指定維度範圍內的聚合值,並忽略視圖中其他篩選條件或維度的影響



公式詳解

//計算式命名為:avg_sales_of_1_2

IF ATTR(MONTH([訂單日期]))=1 or ATTR(MONTH([訂單日期]))=2 THEN
AVG({ FIXED YEAR([訂單日期]):SUM(

    IF MONTH([訂單日期]) IN (1,2) THEN [銷售額]END

)}/2)
ELSE SUM([銷售額])END


以下內容將逐步解釋這段 Tableau 公式,觀念相當重要。


這段公式是一個條件計算,主要用於根據訂單日期的月份來計算銷售額的平均值。


---


公式全文


IF ATTR(MONTH([訂單日期]))=1 or ATTR(MONTH([訂單日期]))=2 THEN

AVG({ FIXED YEAR([訂單日期]):SUM(

	IF MONTH([訂單日期]) IN (1,2) THEN [銷售額] END

)}/2)

ELSE SUM([銷售額]) END



1. 條件部分


IF ATTR(MONTH([訂單日期]))=1 or ATTR(MONTH([訂單日期]))=2 THEN

  • MONTH([訂單日期]):從 [訂單日期]欄位中提取月份(1 表示一月,2 表示二月,依此類推)。

  • ATTR():這是一個聚合函數,表示「屬性」。它用於確保 MONTH([訂單日期]) 在該層級上返回單一值。如果數據有多個值,它會強制要求聚合。

  • 條件:檢查當前 [訂單日期]的月份是否為 1(一月)或 2(二月)。

  • 如果條件成立(即月份是一月或二月),執行 THEN 後面的計算;否則,執行 ELSE 後的計算。



2. THEN 分支(一月或二月的計算)


AVG({ FIXED YEAR([訂單日期]):SUM(
IF MONTH([訂單日期]) IN (1,2) THEN [銷售額] END

)}/2)

這部分計算一月和二月的銷售額平均值,並按年份分組。分解如下:


(1) 內層 IF 條件


IF MONTH([訂單日期]) IN (1,2) THEN [銷售額] END

  • 檢查 [訂單日期] 的月份是否在一月(1)或二月(2)中。

  • 如果是,返回 [銷售額] 的值;如果不是,返回 NULL(因為 END 後沒有指定其他值)。


(2) SUM()


SUM(IF MONTH([訂單日期]) IN (1,2) THEN [銷售額] END)

  • 將滿足條件的 [銷售額] 值(即一月和二月的銷售額)加總起來。

  • 由於非一月和非二月的數據返回 NULL,SUM()`會忽略這些空值,只計算一月和二月的總和。


(3) FIXED 層級計算


{ FIXED YEAR([訂單日期]):SUM(...) }

  • FIXED 是一種 LOD(Level of Detail,詳細層級)表達式,表示計算結果固定在某個維度層級上。

  • YEAR([訂單日期]):指定計算按年份分組。這意味著,對每一年的數據,計算一月和二月的 [銷售額] 總和。

  • 綜合以上,FIXED YEAR 使得計算獨立於視圖中的其他維度,始終按年份分組。


(4) 除以 2


{ FIXED YEAR([訂單日期]):SUM(...)} / 2

  • 將每年的一月和二月銷售額總和除以 2,得到這兩個月的平均值。


(5) 外層 AVG()


AVG({ FIXED YEAR([訂單日期]):SUM(...)} / 2)

  • AVG() ,這一步可用 SUM() 替代,它確保最終輸出是一個聚合值,符合 Tableau 的要求。



3. ELSE 分支(非一月或二月的計算)


ELSE SUM([銷售額]) END

  • 如果當前月份不是 1 或 2(即三月至十二月),則直接計算 [銷售額] 的總和。




關於潤謙



協助有穩定營運基礎但想要追求新成長動能的客戶,將企業成功經驗和員工知識自動化、資訊化、最佳化幫助優質人力專注在新市場、新產品、新通路


如果您對 Tableau 的導入、客製化專案、教育訓練感興趣,我們可安排專業夥伴為您做需求訪談與產品Demo,歡迎至此連結查看更多說明並提交需求,我們會盡快聯繫您:














Comments


©2025 by 潤謙科技股份有限公司

bottom of page