Power BI 時間智慧函數實戰:輕鬆計算 YoY, MoM 與 YTD

厭倦了在 Excel 中手動計算 YoY、YTD 嗎?這篇實戰指南將提供你一套可複製的 DAX 時間智慧模式,告別手動地獄,用幾行優雅的程式碼,讓你的 Power BI 報表瞬間提升一個專業檔次。

Power BI 時間智慧函數實戰:輕鬆計算 YoY, MoM 與 YTD

你好,我是 Kiro。

時間智慧是商業分析的關鍵應用。在開始施展這些魔法前,確保你已了解 Power BI 的基本運作模式,將讓學習事半功倍。

在上一篇文章中,我們一起馴服了 CALCULATE 這隻神獸,掌握了它新增、覆蓋和移除篩選的三大超能力。現在,我們要將這股強大的力量,應用在商業分析中最有價值、也最常見的場景——時間智慧分析 (Time Intelligence)

你是否也曾為了計算「年對年成長率 (Year-over-Year, YoY)」,而在 Excel 表格中用 VLOOKUP 查到眼花撩亂?或是為了計算「年初至今 (Year-to-Date, YTD)」的累計業績,而寫下長到看不見盡頭的 SUM 公式?

這些手動計算不僅耗時、痛苦,更充滿了出錯的風險。

這篇文章將提供你一套可複製的「DAX 時間智慧模式」。學會它,你就能告別手動地獄,用幾行優雅的 DAX 程式碼,輕鬆應對 80% 的同期比較與趨勢分析需求,讓你的報表瞬間提升一個專業檔次。

🎁 邊讀邊做,學得更快!
我同樣為這篇文章準備了專屬的 Power BI 練習檔 (.pbix)。免費訂閱我的電子報,即可立即前往會員資源中心下載,跟著文章一起動手操作!

第一誡:你必須有一個完美的「日期表」

在我們施展任何時間智慧魔法之前,有一條不可動搖的黃金法則,也是所有新手最常犯錯的地方:

你必須在你的資料模型中,建立一個獨立且完整的日曆資料表。

為什麼?因為 DAX 的時間智慧函數,就像一群只會說「標準時間語」的專業嚮導。如果你給它們一張零散、不連續、甚至有重複日期的「地圖」(例如直接使用你的銷售訂單日期欄位),它們會立刻迷路並罷工。

一個完美的日期表,是所有時間智慧分析不可動搖的基石。它必須:

  • 包含一個擁有唯一值的日期欄位。
  • 涵蓋你所有事實表中完整的日期範圍(不能有遺漏)。
  • 與你的事實表(如銷售資料表)建立有效的關係

別擔心,你不需要手動建立。以下是一段你可以直接複製使用的 DAX 程式碼範本,用它來建立一個動態、完美的日期表:

Dim_Dates = 
ADDCOLUMNS (
    CALENDAR ( MIN ( 'Fact_Sales'[SaleDate] ), MAX ( 'Fact_Sales'[SaleDate] ) ),
    "Year", YEAR ( [Date] ),
    "Quarter", "Q" & FORMAT ( [Date], "Q" ),
    "MonthNum", MONTH ( [Date] ),
    "MonthName", FORMAT ( [Date], "mmm" ),
    "YearMonth", FORMAT ( [Date], "YYYY-MM" )
)

(註:請將 'Fact_Sales'[SaleDate] 替換成你事實表中主要的日期欄位)

建立好這張專為時間分析而生的日期表,並確保它與你的事實表正確地透過日期欄位連接起來(通常是「一對多」關係),我們才算真正做好了施法的準備。


核心需求一:年對年 (YoY) 成長率

商業問題: 「我們今年的業績,跟去年同期相比,是成長還是衰退?」

這是老闆每天都會問的問題,也是衡量業務健康度的核心指標。要回答它,我們需要計算兩個數字:「今年的銷售額」和「去年同期的銷售額」。

「今年的銷售額」很簡單,就是我們常用的 [總銷售額] 量值。而計算「去年同期銷售額」,就輪到我們的第一個時間智慧函數登場了:SAMEPERIODLASTYEAR

計算去年同期銷售額

這個函數的名字非常直觀。它會取得目前篩選上下文中的日期範圍(例如 2024 年 5 月),然後像時光機一樣,返回「去年完全相同的期間」(也就是 2023 年 5 月)作為一個新的篩選條件。

我們可以將它與 CALCULATE 完美結合:

去年同期銷售額 = 
CALCULATE(
    [總銷售額],
    SAMEPERIODLASTYEAR('Dim_Dates'[Date])
)

提供完整的「YoY 成長率 %」量值寫法範本

有了「今年」和「去年」的數字,計算成長率就輕而易舉了。這裡提供一個包含除錯(避免分母為零)的完整寫法範本:

YoY 銷售額成長率 % = 
VAR CurrentSales = [總銷售額]
VAR PriorYearSales = [去年同期銷售額]
RETURN
    IF(
        NOT ISBLANK(PriorYearSales),
        DIVIDE(CurrentSales - PriorYearSales, PriorYearSales)
    )

現在,你可以將「YearMonth」放在資料列,並把 [總銷售額][去年同期銷售額][YoY 銷售額成長率 %] 放進矩陣中。一個專業的同期比較報表就誕生了!


核心需求二:年初至今 (YTD) 累計

商業問題: 「我們今年的年度 KPI 目標是 1,000 萬,現在 5 月份了,達成率是多少?」

要回答這個問題,我們需要計算「從今年 1 月 1 日開始,一直累加到今天為止」的總銷售額。這就是年初至今 (Year-to-Date, YTD) 的概念。

DAX 為此提供了極其方便的函數:DATESYTDTOTALYTD

計算 YTD 銷售額

DATESYTD 會取得目前篩選上下文中的最後一個日期(例如 2024 年 5 月 31 日),然後返回「從該年份的第一天,到這個最後日期」的完整日期範圍。

YTD 總銷售額 = 
CALCULATE(
    [總銷售額],
    DATESYTD('Dim_Dates'[Date])
)

-- 語法糖版本,結果完全相同
-- YTD 總銷售額 = TOTALYTD([總銷售額], 'Dim_Dates'[Date])
YTD 總銷售額達成率 % = DIVIDE([YTD 總銷售額], 200000000)

當你將這2個量值放入矩陣中,你會看到,每一列的數字都是從該年一月開始的累加值。這對於追蹤年度目標的達成進度至關重要。

延伸介紹:QTD 與 MTD

同樣的邏輯,DAX 也提供了:

  • DATESQTD (Quarter-to-Date): 計算「季初至今」的累計值。
  • DATESMTD (Month-to-Date): 計算「月初至今」的累計值。

掌握了這組累計函數,你就能輕鬆應對各種期間的業績追蹤需求。


進階應用:移動平均 (Moving Average)

商業問題: 「我們的單月業績波動很大,很難看出長期的真實趨勢。有沒有辦法平滑這些雜訊?」

當然有!移動平均就是為了解決這個問題而生的。例如,「滾動 12 個月平均銷售額」可以幫助我們消除季節性等短期因素的干擾,看清業務的長期走向。

要實現這個計算,我們需要另一個强大的時間智慧函數:DATESINPERIOD

計算滾動 12 個月平均銷售

DATESINPERIOD 像一個靈活的「滑動視窗」。它需要四個參數:

  1. 日期表
  2. 開始日期
  3. 要移動的期數(負數代表往前)
  4. 移動的單位(日/月/季/年)

我們可以這樣寫:

滾動 12 個月總銷售額 = 
CALCULATE(
    [總銷售額],
    DATESINPERIOD(
        'Dim_Dates'[Date],
        MAX('Dim_Dates'[Date]),
        -12,
        MONTH
    )
)

這個公式的意涵是:在目前的篩選上下文中,找到最後一個日期 (MAX('Dim_Date'[Date])),並從那天開始,往前滑動 12 個月,將這個完整的「滑動視窗」期間內的銷售額加總起來。

最後,只要將這個結果除以 12,就能得到平滑後的趨勢線,幫助決策者洞察未來。


結論:讓時間成為你的朋友

時間,是所有商業故事中最關鍵的維度。掌握了 DAX 時間智慧函數,你就不再是一個只能呈現靜態數字的報表製作者,而是一位能夠:

  • 回顧過去: 透過 SAMEPERIODLASTYEAR 進行精準的同期比較。
  • 衡量現在: 透過 DATESYTD 等函數追蹤目標的累計進度。
  • 洞察未來: 透過 DATESINPERIOD 計算移動平均,看清長期趨勢。

這些函數與 CALCULATE 結合,將是你武器庫中最鋒利的寶劍,能幫助你斬斷資料的雜訊,直達商業問題的核心。


下一步:從標準到客製

🎁 下載練習檔,親手操作!

為了讓你真正掌握這些強大的時間函數,我已經準備好了這篇文章的完整 Power BI 練習檔 (.pbix),包含所有範例資料、完美的日期表和本篇提到的所有 DAX 量值。

立即免費訂閱我的「人生算法」實踐筆記,即可前往會員資源中心下載練習檔!

🚀 準備好接受更深度的挑戰了嗎?

本篇介紹的都是基於標準日曆年的計算。但在真實世界中,你可能會遇到更複雜的場景,例如公司的「財年」是從 7 月 1 日開始,或是需要處理 4-4-5 零售日曆等特殊需求。

如果你已經準備好挑戰這些進階場景,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。

【Power BI x AI 終極實戰:打造高效數據分析工作流】

在課程中,我們將深入探討如何客製化你的時間智慧計算,以應對任何刁鑽的商業規則。這不只是一堂工具課,更是一趟將你打造成真正資料專家的旅程。

👉 點擊這裡,立即加入超過千名學員的行列,讓時間智慧分析成為你無可取代的專業技能!

Read more

n8n 自動化流程選擇最佳資料庫:Google Sheets、Notion、Airtable 與 Baserow 深度對決

n8n 自動化流程選擇最佳資料庫:Google Sheets、Notion、Airtable 與 Baserow 深度對決

在為我的 n8n 自動化流程尋找完美資料庫的旅程中,我深度評比了 Google Sheets、Notion、Airtable 與 Baserow。從最初的熟悉工具,到專業級的正面對決,這不僅是一場技術選擇,更是一場關於成本、擴展性與未來自由的戰略思考。最終,我找到了一條從 Baserow 雲端版起步,邁向 Zeabur 自架無限宇宙的最佳路徑。一同來看看我的完整決策過程。

By Kiro