量值 vs. 計算資料行:DAX 效能優化的第一步

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

量值 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),輕鬆地使用 RELATEDTABLECALCULATE 函數完成這個任務。

唯一關鍵場景:計算需要「跨表查找」的資訊。

// 這是在「產品維度表」中新增的 DAX 計算資料行
Product Total Sales = 
SUMX(
    RELATEDTABLE('Fact_Sales'),
    'Fact_Sales'[SalesAmount]
)

Kiro 的黃金準則 (最終決策流程):

當你需要新增一個資料行時,請這樣問自己:「這個計算需要的所有資訊,是否都在『同一張表』裡?」 -> -> 請務必使用 Power Query「這個計算是否需要『跳』到另一張有關聯的表中去拿資料?」 -> -> 這就是 DAX 計算資料行 的專屬任務。

總結來說:Power Query 負責為你的數據「整容塑形」,而 DAX 計算資料行則負責為已經定型的數據「貼上跨部門的智慧標籤」。

結論:為你的任務選擇正確的武器

量值與計算資料行的選擇,從來不只是語法問題,而是一個關乎報表效能、準確性與可維護性架構決策

  • 計算資料行建立分類,為你的數據貼上清晰的標籤。
  • 量值執行計算,讓你的指標能靈活地回應分析需求。

現在,讓我們回頭審視第一部分提到的兩個計算資料行場景:

  1. 建立 Value Tier 分類標籤: 由於判斷標準 UnitPrice 來自同一張產品表,它的最佳實踐是在 Power Query 中使用「條件資料行」來完成
  2. 計算 Line Total 由於 QuantityUnitPrice 都在同一張銷售表中,它的最佳實踐同樣是在 Power Query 中使用「自訂資料行」的乘法運算來完成

掌握了這個核心區別,你就踏出了從「會用 DAX 的人」到「懂得如何高效使用 DAX」的關鍵一步,這也是你優化報表效能的第一步。


🚀 從心法到實戰,只差一步

恭喜你,你已經掌握了 DAX 的完整思維藍圖!如果你渴望將這些心法,轉化為可以放進作品集的亮眼專案,我誠摯地邀請你加入我在 Hahow 好學校的線上課程。

【Power BI x AI 終極實戰:打造高效數據分析工作流】
✨ 超過 5 小時的 DAX 專門單元,帶你逐行拆解 DAX 在真實商業專案中的應用。
🎯 親手實作三大商業儀表板,將理論化為你的實戰超能力。
💬 專屬學員社團,由我親自為你解答學習路上的所有疑惑。

這不只是一堂工具課,更是一趟將你打造成真正數據專家的旅程。

👉 點擊這裡,立即加入超過千名學員的行列,將 DAX 從夢魘變為超能力!


🎁 想持續升級你的數據決策系統嗎?

覺得這篇文章對你有幫助嗎?這只是個開始。

免費加入,立即解鎖會員資源中心』(內含完整電子書、練習檔案與更多專屬內容)!

你將不僅能立即下載排版精美的 【數據分析師的養成心法 (2025 終極指南)】 完整版電子書 (PDF) ,更重要的是,你將開始每週收到我的獨家框架、實踐案例與工具推薦。

讓我們一起,將數據轉化為智慧,打造屬於自己的理想人生。

Read more

《內容電力公司》實戰讀書筆記 (四):從發電廠到電力網,為你的王國建立真正的護城河

《內容電力公司》實戰讀書筆記 (四):從發電廠到電力網,為你的王國建立真正的護城河

讀完《內容電力公司》前幾章,我們已打造了內容事業的「發電廠」。但一座孤立的電廠無法照亮城市。這篇筆記將深入本書的「電網工程篇」(13-16章),探討如何透過建立直接的「訂閱者」關係,來回應職場上那份因價值觀被踐踏而生的痛苦,並策略性地運用 SEO 與社群媒體,為你的王國建立真正的護城河。

By Kiro