【Power BI教學】如何建立萬用日期表 (Date Table)?跨年、週別排序不打結

【Power BI教學】如何建立萬用日期表 (Date Table)?跨年、週別排序不打結!

CONCEPT // 觀念建立與維度說明

一、搞懂日期表:為什麼單純「週別」不夠用?

很多人第一次用 Power BI 建立日期表(Date Table / Calendar Table)時,最常踩到的坑就是「跨年資料全部擠在一起」或是「月份、週別順序亂排序」。這篇文章用最輕鬆簡單的方式,帶你一次搞懂為什麼日期表要這樣建,並奉上懶人必備的 DAX 貼上即用範例!

你可能會想:「我就拉個年、月、週別不就好了嗎?」事情沒那麼簡單!如果你只留 1~52 的純週別(WeekNo),到了跨年份(例如 2025 和 2026 年)的時候,Power BI 會直接把 2025 年第 10 週 與 2026 年第 10 週 的數據打包加在一起!趨勢圖直接變懸疑片。

最佳的實務做法是「兩個都留,但分工合作」:

  • 年週(YearWeek,如 2026-W30): 放在折線圖 X 軸、報表矩陣。明確定位時間,時間軸不會跨年打結。
  • 純週別(WeekNo,如 30): 當你想做「今年第 30 週 vs 去年第 30 週」這種同週跨年比較(YoY)時使用。

● 欄位超值大禮包:建議建立的維度

欄位名稱 範例結果 為什麼需要它?
Date 2026/07/24 日期表的主鍵,必須保持每天連續無缺口。
Year / Month 2026 / 7 基本的年份與月份數字。
YearMonth 2026-07 最常用的月度 X 軸維度。
YearMonthNo 202607 排序神器!防止月度圖表被按字母或數字排錯。
WeekNo 30 單純週別數字,做同週跨年對比超好用。
YearWeek 2026-W30 圖表必備!帶年份的週別,趨勢不串線。
YearWeekNo 202630 週別排序碼,確保 W01~W52 順序萬無一失。
DayOfWeek / Name 5 / 週五 分析「一週內哪一天最忙/賣最好」。
IsYTD TRUE / FALSE 動態標記「今年初至今」,做 YTD 快速過濾器超省力。
STEP-BY-STEP // DAX 建立步驟

二、如何新增 DAX 日期表?

● STEP 01:建立新資料表

只需 3 個步驟,3 分鐘內就能搞定:

  1. 打開 Power BI Desktop。
  2. 上方選單切換到 「模型化」 (Modeling) 頁籤。
  3. 點選 「新增資料表」 (New Table)

路徑提示:[模型化] -> [新增資料表] -> 貼上 DAX 程式碼

建立新資料表

● STEP 02:複製貼上 DAX 萬用範例

在上方公式欄直接貼上這段程式碼(已貼心地將一週開頭設定為科技業與多數工廠最常用的週一):

DateTable = 
VAR MinYear = 2020 -- 👈 直接改為您想要的起始年份(例如 2020)
VAR MaxYear = YEAR ( TODAY () ) + 1
RETURN
ADDCOLUMNS (
    CALENDAR ( DATE ( MinYear, 1, 1 ), DATE ( MaxYear, 12, 31 ) ),
    
    -- 基本年月日
    "Year", YEAR ( [Date] ),
    "Month", MONTH ( [Date] ),
    "MonthName", FORMAT ( [Date], "mmm" ),
    
    -- 年月與排序碼
    "YearMonth", FORMAT ( [Date], "YYYY-MM" ),
    "YearMonthNo", INT ( FORMAT ( [Date], "YYYYMM" ) ),
    
    -- 週別維度(WEEKNUM 第二個參數 2 = 週一為一週開頭)
    "WeekNo", WEEKNUM ( [Date], 2 ),
    "YearWeek", FORMAT ( [Date], "YYYY" ) & "-W" & RIGHT ( "0" & WEEKNUM ( [Date], 2 ), 2 ),
    "YearWeekCN", YEAR ( [Date] ) & "年第" & WEEKNUM ( [Date], 2 ) & "週",
    "YearWeekNo", YEAR ( [Date] ) * 100 + WEEKNUM ( [Date], 2 ),
    
    -- 星期幾與動態標記
    "DayOfWeek", WEEKDAY ( [Date], 2 ),
    "DayOfWeekName", FORMAT ( [Date], "aaa" ),
    "IsYTD", IF ( [Date] <= TODAY () && YEAR ( [Date] ) = YEAR ( TODAY () ), TRUE (), FALSE () )
)

● STEP 03:關鍵設定(沒做這步等於只做半套!)

表格建出來後,請務必完成以下兩項「點點滑鼠」的設定:

1. 設定「依欄位排序」(Sort by Column)

點選欄位後,在上方 「資料表工具」 點選 「依欄位排序」

  • 點選 YearMonth → 設定依 YearMonthNo 排序
  • 點選 YearWeek → 設定依 YearWeekNo 排序
  • 點選 MonthName → 設定依 Month 排序
為什麼? 沒設定的話,Power BI 會把 "2026-10" 排在 "2026-02" 前面(因為字串比對 A-Z),設定排序碼後才會乖乖按時間前後排序!

2. 標記為日期資料表(Mark as Date Table)

  1. 在右側資料區對 DateTable 按右鍵。
  2. 選擇 「標記為日期資料表」 → 「標記為日期資料表」
  3. 在欄位選單中選擇 Date 欄位即可。
為什麼? 這樣 Power BI 才會知道這是標準日期維度表,未來在寫 SAMEPERIODLASTYEARTOTALYTD 等時間智慧函數時才不會跑出奇怪的算式錯誤。

💡 重點包: 日期表一定要連續無缺口,並且用「年週」拿來做圖表 X 軸,報表畫面才會順暢有邏輯!快去套用到你的 Power BI 專案試試看吧!

留言

相關文章 / 薪資情報

文章載入中...

你可能有興趣

精選文章 / 推薦情報

文章載入中...