量值 vs. 計算資料行:DAX 效能優化的第一步
搞不懂 Power BI 的「量值」和「計算資料行」?這是區分 DAX 新手與專家的第一道分水嶺。本文用最直觀的比喻,帶你徹底理解兩者的本質差異與運作時機,並提供一套清晰的決策框架(包含 Power Query vs. DAX 的進階選擇),讓你從此能為分析任務選擇最正確、最高效的武器,踏出效能優化的第一步。

你好,我是 Kiro。
如果你是從 Excel 踏入 Power BI 的世界,你腦中肯定縈繞過這個問題:「我到底該用『新增量值』還是『新增資料行』?它們看起來都能做計算,究竟差在哪?」
這不是一個無關緊要的問題。事實上,能否清晰地辨別這兩者的差異,是區分 DAX 新手與專業分析師的第一道分水嶺。
選擇錯誤,輕則讓你的報表效能低落、檔案臃腫;重則會導致你的計算結果完全錯誤,引導出災難性的商業決策。
這篇文章,就是你的終極澄清手冊。我們將徹底告別模糊地帶,用最直觀的比喻,帶你理解這兩種 DAX 計算的本質區別,並提供一套清晰的決策框架,讓你從此能為你的分析任務,選擇最正確、最高效的武器。
第一部分:計算資料行 (Calculated Column) —— 靜態的「標籤」
讓我們從你最熟悉的概念開始。計算資料行,在行為上最接近你在 Excel 表格中新增一欄公式。
核心比喻: 計算資料行就像一個在工廠就貼好的、永久性的「產品標籤」。
它的運作方式是:
- 計算時機: 在你每次刷新或載入資料時計算一次。
- 儲存方式: 計算結果會被實體儲存在你的資料表中,成為新的一欄。這意味著它會增加你 Power BI 檔案的大小,並消耗 RAM 記憶體。
- 運作環境: 它在「列上下文 (Row Context)」中運作,也就是逐行計算。DAX 引擎會拿著你的公式,從第一列跑到最後一列,為每一列都產生一個值。
何時該使用計算資料行?
當你需要一個新的「維度」來進行篩選、分類或分組時。
- 場景一:建立分類標籤
- 商業問題: 「我想將產品根據單價,分為『高單價』和『一般』兩類。」
- 為何適用: 你需要一個可以放進圖表「圖例」或「交叉分析篩選器」的欄位,
Value Tier
完美符合這個需求。
- 場景二:進行「列級別」的數學運算
- 商業問題: 「我的資料表中只有『數量』和『單價』,我需要計算出每一筆訂單明細的『總金額』。」
- 為何適用: 這個計算是在每一列內部獨立完成的,是典型的列上下文操作。
DAX 寫法:
Line Total = 'Fact_Sales'[Quantity] * 'Fact_Sales'[UnitPrice]
DAX 寫法:
Value Tier = IF('Dim_Product'[UnitPrice] > 1000, "高單價", "一般")
第二部分:量值 (Measure) —— 動態的「計算機」
如果說計算資料行是靜態的標籤,那麼量值就是一把在你需要時才啟動的、強大的動態計算機。
核心比喻: 量值就像超市結帳櫃檯的「掃碼槍」。它本身不儲存價格,只有當你把商品(篩選上下文)放到櫃檯上時,它才會即時掃描並計算出總金額。
它的運作方式是:
- 計算時機: 即時計算 。 只有當你將它拖入圖表,或當使用者與報表互動(例如點擊篩選器)時,它才會根據當下的「篩選上下文」進行計算。
- 儲存方式: 它不儲存任何資料,只儲存公式本身。因此,它幾乎不增加檔案大小。
- 運作環境: 它在「篩選上下文 (Filter Context)」中運作,也就是對被篩選出的多筆資料進行聚合計算。
何時該使用量值?
當你需要一個 聚合的「指標」來回答商業問題時。
- 場景一:計算總和或平均值
- 商業問題: 「我們上個季度的總銷售額是多少?」
- 為何適用: 這是最典型的聚合計算,需要在使用者選定的時間範圍(篩選上下文)內進行加總。
- 場景二:計算比例或百分比
- 商業問題: 「『高單價』產品的銷售額,佔所有產品總銷售額的百分之多少?」
- 為何適用: 佔比計算是動態的,它會隨著你在報表上篩選不同的地區或時間而改變,必須使用量值來即時回應。
DAX 寫法:
高單價產品銷售佔比 =
DIVIDE(
CALCULATE([總銷售額], 'Dim_Product'[Value Tier] = "高單價"),
CALCULATE([總銷售額], ALL('Dim_Product'[Value Tier]))
)
DAX 寫法:
總銷售額 = SUM('Fact_Sales'[Line Total])
第三部分:正面對決 —— 一張表看懂所有差異
比較維度 | 計算資料行 (Calculated Column) | 量值 (Measure) |
---|---|---|
核心比喻 | 靜態的「產品標籤」 | 動態的「掃碼槍」 |
計算時機 | 資料刷新時 (預先計算) | 查詢時 (即時計算) |
儲存方式 | 實體儲存,消耗 RAM 與檔案空間 | 只儲存公式,幾乎不佔空間 |
運作環境 | 列上下文 (逐行處理) | 篩選上下文 (聚合處理) |
主要用途 | 分類 (用於圖表的軸、圖例、篩選器) | 計算 (用於圖表的值) |
效能影響 | 增加檔案大小與刷新時間 | 增加報表互動時的 CPU 負載 |
Kiro 的黃金準則:
當你有疑問時,優先建立量值。 95% 的商業計算都應該用量值來完成。只有當你明確需要一個新的「分類標籤」來進行篩選時,才回頭考慮使用計算資料行。
第四部分:【進階思考】計算資料行:該用 Power Query 還是 DAX?
好的,我們已經決定要建立一個計算資料行。但下一個問題來了:我應該在 Power Query 編輯器中(用 M 語言)新增,還是在載入模型後(用 DAX)新增?
一句話總結:Power Query 在「數據進工廠前」的原料加工區運作;DAX 計算資料行則是在「數據進工廠後」的組裝線上運作。
它們的「視野」和「工具」完全不同,這決定了它們各自的適用場景。
本質差異:一場「引擎」與「視野」的對決
比較維度 | Power Query 新增資料行 (M 語言) | DAX 新增資料行 (DAX 語言) |
---|---|---|
執行引擎 | M 引擎 (Mashup Engine) | DAX 引擎 (VertiPaq / xVelocity Engine) |
執行時機 | 資料刷新時。 在數據被載入到 Power BI 模型之前,一步步地執行。 | 資料刷新後。 在數據已經被載入並壓縮到模型之後,才進行計算。 |
核心能力 | 資料塑形與清理。 強項在於處理文字、合併、分割、轉換資料類型等 ETL 任務。 | 基於「列上下文」的業務邏輯。 強項在於根據模型中已建立的「關係」,進行跨表的複雜運算。 |
資料視野 | 狹隘但專注。 在任何一個步驟,它只能看到當前正在處理的那一張表。它對其他表的存在一無所知。 | 宏觀且立體。 在計算任何一列時,它都能看到整個已經建立好關係的資料模型。它可以透過關係,「跳」到另一張關聯表中去查找資料。 |
決策樹:我到底該用哪一個?
✅ 90% 的情況下,你應該優先使用 Power Query 新增資料行
這是業界公認的最佳實踐,因為它通常能帶來更好的資料壓縮率(進而提升效能)和更清晰的 ETL 流程。
- 場景一:所有基礎的資料清理與轉換。
- 範例: 從
OrderID
(例如台北-1001
) 中分割出Region
欄位;將大小寫混亂的ProductSKU
統一為大寫。 - 原因: 這是 M 引擎的拿手好戲。
- 範例: 從
- 場景二:基於「單一表格內」資訊的條件判斷。
- 範例: 在
產品表
中,根據UnitPrice
欄位,新增一個ValueTier
欄位來標記「高單價」或「一般」。 - 原因: 這個邏輯所需的所有資訊 (
UnitPrice
) 都在同一張表內,完全在 Power Query 的視野範圍內。
- 範例: 在
- 場景三:將多個表格「壓平」成一個維度表。
- 範例: 將
產品分類
、產品子分類
和產品主檔
這三張表,透過合併查詢 (Merge) 組合成一張扁平化的星型模型維度表。 - 原因: 「合併查詢」是 Power Query 的核心武器,專門用來處理這種在資料載入前就需要完成的結構性整合。
- 範例: 將
⚠️ 只有在這 10% 的特殊情況下,才使用 DAX 新增資料行
- 範例: 你需要在
產品維度表
中,新增一個欄位來計算「該產品的總銷售額」。 - 原因: 這個計算需要「跳」到
銷售事實表
中,去篩選並加總對應的銷售額。Power Query 看不到銷售事實表
,但 DAX 可以透過已建立的關係 (Relationship),輕鬆地使用RELATEDTABLE
或CALCULATE
函數完成這個任務。
唯一關鍵場景:計算需要「跨表查找」的資訊。
// 這是在「產品維度表」中新增的 DAX 計算資料行
Product Total Sales =
SUMX(
RELATEDTABLE('Fact_Sales'),
'Fact_Sales'[SalesAmount]
)
Kiro 的黃金準則 (最終決策流程):
當你需要新增一個資料行時,請這樣問自己:「這個計算需要的所有資訊,是否都在『同一張表』裡?」 -> 是 -> 請務必使用 Power Query。「這個計算是否需要『跳』到另一張有關聯的表中去拿資料?」 -> 是 -> 這就是 DAX 計算資料行 的專屬任務。
總結來說:Power Query 負責為你的數據「整容塑形」,而 DAX 計算資料行則負責為已經定型的數據「貼上跨部門的智慧標籤」。
結論:為你的任務選擇正確的武器
量值與計算資料行的選擇,從來不只是語法問題,而是一個關乎報表效能、準確性與可維護性的架構決策。
- 用計算資料行來建立分類,為你的數據貼上清晰的標籤。
- 用量值來執行計算,讓你的指標能靈活地回應分析需求。
現在,讓我們回頭審視第一部分提到的兩個計算資料行場景:
- 建立
Value Tier
分類標籤: 由於判斷標準UnitPrice
來自同一張產品表,它的最佳實踐是在 Power Query 中使用「條件資料行」來完成。 - 計算
Line Total
: 由於Quantity
和UnitPrice
都在同一張銷售表中,它的最佳實踐同樣是在 Power Query 中使用「自訂資料行」的乘法運算來完成。
掌握了這個核心區別,你就踏出了從「會用 DAX 的人」到「懂得如何高效使用 DAX」的關鍵一步,這也是你優化報表效能的第一步。
🚀 從心法到實戰,只差一步
恭喜你,你已經掌握了 DAX 的完整思維藍圖!如果你渴望將這些心法,轉化為可以放進作品集的亮眼專案,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。
【Power BI x AI 終極實戰:打造高效數據分析工作流】
✨ 超過 5 小時的 DAX 專門單元,帶你逐行拆解 DAX 在真實商業專案中的應用。
🎯 親手實作三大商業儀表板,將理論化為你的實戰超能力。
💬 專屬學員社團,由我親自為你解答學習路上的所有疑惑。
這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。
👉 點擊這裡,立即加入超過千名學員的行列,將 DAX 從夢魘變為超能力!
🎁 想持續升級你的數據決策系統嗎?
覺得這篇文章對你有幫助嗎?這只是個開始。
免費加入,立即解鎖『會員資源中心』(內含完整電子書、練習檔案與更多專屬內容)!
你將不僅能立即下載排版精美的 【數據分析師的養成心法 (2025 終極指南)】 完整版電子書 (PDF) ,更重要的是,你將開始每週收到我的獨家框架、實踐案例與工具推薦。
讓我們一起,將數據轉化為智慧,打造屬於自己的理想人生。