【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 分鐘內就能搞定:
- 打開 Power BI Desktop。
- 上方選單切換到 「模型化」 (Modeling) 頁籤。
- 點選 「新增資料表」 (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)
- 在右側資料區對
DateTable按右鍵。 - 選擇 「標記為日期資料表」 → 「標記為日期資料表」。
- 在欄位選單中選擇
Date欄位即可。
為什麼? 這樣 Power BI 才會知道這是標準日期維度表,未來在寫SAMEPERIODLASTYEAR或TOTALYTD等時間智慧函數時才不會跑出奇怪的算式錯誤。
💡 重點包: 日期表一定要連續無缺口,並且用「年週」拿來做圖表 X 軸,報表畫面才會順暢有邏輯!快去套用到你的 Power BI 專案試試看吧!
留言
張貼留言