Power BI 匯入模式:匯入、DirectQuery有什麼不同?
在建立 Power BI 報表的第一步,就是選擇資料的連接模式。
常見的選項有匯入 (Import) 和 DirectQuery,這兩種方式看起來都能連到資料庫,但實際上差異很大,會影響你報表的效能、即時性與功能使用。
這篇文章會針對匯入 (Import) 與 DirectQuery 模式做深入比較,並補充常見的 SQL 應用情境,幫助你根據實際需求選擇最適合的連接方式。
當你選擇從 SQL Server 要匯入資料時,會產生下列視窗

匯入模式 (Import):最穩定、效能最佳
匯入 (Import) 是 Power BI 的預設連接方式,會在每次資料重新整理時,將資料「整批匯入」Power BI Desktop 或服務端的記憶體中。
查詢速度快、功能支援完整,是目前最多人使用的模式。
適合情境:
- 資料量中等,可接受每日或每週更新一次
- 需要大量運算、使用複雜 DAX 計算
- 希望使用者在報表互動時有最佳效能表現(無延遲)
SQL 應用範例:
假設你每天早上從 ERP 系統中匯出上日銷售資料,放入 SalesSummary
資料表中,透過匯入模式載入 Power BI,讓管理階層每天查看更新後的銷售概況。
SELECT Region, ProductCategory, SUM(SalesAmount) AS TotalSales
FROM SalesSummary
WHERE SaleDate = CAST(GETDATE() - 1 AS DATE)
GROUP BY Region, ProductCategory
匯入模式 (Import )下,這段查詢只會在排程更新時執行一次,資料就會快取在報表中。
DirectQuery 模式:查詢即時資料來源
DirectQuery 不會匯入資料,而是在使用者點選篩選器、下拉選單時,每一次互動都即時向資料來源(例如 SQL Server、Azure、Databricks)發出查詢。
適合情境:
- 資料即時性要求高,如即時監控儀表板
- 資料表數量大,不適合匯入整批快取
- 有穩定且效能良好的資料庫可支援即時查詢
SQL 應用範例:
假設你要建立一個即時訂單報表,查詢目前過去 1 小時的訂單情況。使用 DirectQuery 模式時,使用者每次切換篩選條件時,Power BI 都會向下列 SQL 查詢發送請求:
SELECT TOP 100 OrderID, CustomerID, OrderTime, Status
FROM Orders
WHERE OrderTime >= DATEADD(HOUR, -1, GETDATE())
ORDER BY OrderTime DESC
這可以保證資料是最新的,但查詢效能會依賴資料庫設計與回應速度。
Import 與 DirectQuery 差異比較
項目 | Import 模式 | DirectQuery 模式 |
---|---|---|
資料更新頻率 | 固定排程(非即時) | 每次互動即時查詢 |
查詢效能 | 高(資料快取在記憶體) | 中(依賴資料庫效能) |
支援的 DAX 功能 | 全面支援 | 有些函數不支援(如部分時間函數) |
是否可離線瀏覽 | 可以 | 不可以(需連線資料庫) |
資料量控制 | 匯入前須控制匯入量 | 可應對大表,但查詢慢易 timeout |
補充說明:Direct Lake 模式(僅適用 Microsoft Fabric)
目前 Power BI 也推出了一種新的資料模式叫做 Direct Lake,主要搭配 Microsoft Fabric 使用。它結合了 Import 的查詢速度與 DirectQuery 的即時性,不需排程即可讀取最新資料。
不過要注意,這種模式僅能在 Microsoft Fabric 平台中使用,並要求資料為 Delta 格式。如果你目前尚未導入 Fabric,可以暫時不考慮這個模式。
未來若你開始使用 Microsoft Fabric,再進一步了解 Direct Lake 會比較有意義。
結語
簡單來說,如果你重視查詢效能與 DAX 的完整支援,匯入模式 (Import ) 仍是最穩定的選擇
若你需要查詢即時資料,且資料庫效能良好,DirectQuery 則可考慮導入
例如:報表設計者是能撰寫高效 SQL 查詢語法,那我認為使用 DirectQuery 對於報表及時性會提升很多,這邊我在整理若你是 Power BI Pro 使用者的匯入情境比較
在 Power BI Pro 下的兩種模式更新邏輯比較:
模式 | 是否有排程更新限制 | 是否需要使用者互動才會更新 | 更新觸發方式 |
---|---|---|---|
Import 模式 | ✅ 每天最多 8 次 | ❌不需要 | 依照排程或手動重新整理才會更新資料 |
DirectQuery 模式 | ❌ 無排程限制 | 需要 | 使用者每次互動(點圖表、下拉選單)時即時觸發查詢 |