共用方式為


DirectQuery 模式 (SSAS 表格式)

Analysis Services 可讓您使用 DirectQuery 模式,直接從關係資料庫系統擷取數據和匯總,從表格式模型擷取數據並建立報表。 本主題介紹只位於記憶體中的標準表格式模型與可查詢關係型數據源的表格式模型之間的差異,並說明如何撰寫和部署模型以用於 DirectQuery 模式。

本主題中的章節:

DirectQuery 模式的優點

根據預設,表格式模型會使用記憶體內部快取來儲存和查詢數據。 因為表格式模型會使用位於記憶體中的數據,因此即使是複雜的查詢也會非常快速。 不過,使用快取數據有一些缺點:

  • 源數據變更時,不會重新整理數據。 您必須處理模型以取得數據的更新。

  • 當您關閉裝載模型的計算機時,快取會儲存至磁碟,而且必須在載入模型或開啟 PowerPivot 檔案時重新開啟。 儲存和載入作業可能很耗時。

相反地,DirectQuery 模式會使用儲存在 SQL Server 資料庫中的數據。 一般而言,您會在撰寫模型時,將所有或小型的數據範例匯入快取,而當您部署模型時,您會指定針對模型的查詢數據源應該是 SQL Server,而不是快取的數據。 Analysis Services 會將數據上的任何 DAX 查詢轉譯為對指定關係型數據源的對等 SQL 語句。

使用 DirectQuery 模式部署模型有許多優點:

  • 有可能擁有一個模型,它能處理無法完全載入到 Analysis Services 伺服器記憶體的大型數據集。

  • 數據保證是 up-to最新,並且不需要額外的管理負荷來維護單獨的數據副本。 基礎源數據的變更可以立即反映在對數據模型的查詢中。

  • DirectQuery 可以利用供應商端的查詢加速技術,例如 xVelocity 記憶體優化列索引提供的加速。

  • 使用列級安全性,以保證強制執行後端資料庫所強制執行的任何安全性。 相反地,如果您使用了快取的數據,可能很難確保快取能像伺服器一樣得到妥善保護。

  • 如果模型包含可能需要多個查詢的複雜公式,Analysis Services 可以執行優化,以確保針對後端資料庫執行的查詢計劃將盡可能有效率。

撰寫與 DirectQuery 模式搭配使用的模型

表格式模型是使用模型設計工具 SQL Server Data Tools (SSDT) 所撰寫。 模型設計工具會在記憶體中建立所有模型,這表示當您建立模型時,如果您的數據太大而無法放入記憶體中,您應該只將數據子集匯入工作區資料庫所使用的快取中。

當您準備好切換到 DirectQuery 模式時,您可以變更啟用 DirectQuery 模式的屬性。 如需詳細資訊,請參閱啟用 DirectQuery 設計模式(SSAS 表格式)。

當您這樣做時,模型設計工具會自動將工作區資料庫設定為以混合模式執行,讓您繼續使用快取的數據。 模型設計工具也會通知您模型中與 DirectQuery 模式不相容的任何功能。 下列清單摘要說明要記住的主要需求:

  • 數據源: DirectQuery 模型只能使用來自單一 SQL Server 數據源的數據。 當模型開啟 DirectQuery 模式時,您無法在模型設計工具中使用其他類型的數據,包括複製貼上作業所新增的數據表。 所有其他匯入選項都會停用。 查詢中包含的任何數據表都必須是 SQL Server 數據源的一部分。 如需詳細資訊 ,請參閱 DirectQuery 模型的數據源

  • 支援匯出數據行: DirectQuery 模型不支援導出數據行。 不過,您可以建立量值和 KPI,其可透過資料集運作。 如需詳細資訊,請參閱 驗證 一節。

  • DAX 函式的使用有限: 某些 DAX 函式無法在 DirectQuery 模式中使用,因此您必須以其他函式取代它們,或使用數據源中的衍生數據行來建立值。 模型設計工具會針對建立與 DirectQuery 模式不相容的公式時所發生的任何錯誤,提供設計時間驗證。 如需詳細資訊,請參閱下列各節: 驗證

  • 公式相容性: 在某些情況下,相較於只使用關係型數據存放區的 DirectQuery 模型,相同的公式可以在快取或混合式模型中傳回不同的結果。 這些差異是 xVelocity 記憶體內部分析 (VertiPaq) 引擎與 SQL Server 之間的語意差異的結果。 如需這些差異的詳細資訊,請參閱本節: 公式相容性

  • 安全: 您可以根據模型部署方式,使用不同的方法來保護模型。 表格式模型的快取數據會利用 Analysis Services 實例的安全性模型來保護。 DirectQuery 模型可以使用角色來保護,但您也可以使用關係型數據存放區中定義的安全性。 您可以設定此模型,讓僅限 DirectQuery 模型的使用者在開啟報表時,只能看到符合其 SQL Server 許可權的資料。 如需詳細資訊,請參閱本節: 安全性

  • 用戶端限制: 當模型處於 DirectQuery 模式時,只能使用 DAX 進行查詢。 您無法使用 MDX 來建立查詢。 這表示您無法使用 Excel Pivot 用戶端,因為 Excel 使用 MDX。

    不過,如果您使用 DAX 數據表查詢做為 XMLA Execute 語句的一部分,您可以在 SQL Server Management Studio 中針對 DirectQuery 模型建立查詢,如需詳細資訊,請參閱 [DAX 查詢語法參考](/dax/dax-syntax-reference

當您解決所有設計問題並測試模型時,即可進行部署。 此時,您可以設定針對模型響應查詢的慣用方法。 您希望用戶能夠存取快取,還是一律只使用關係型數據源?

如果您在 混合模式中部署模型,快取仍可供使用,並可用於查詢。 混合模式提供許多選項:

  • 當快取和關係型數據源都可供使用時,您可以使用 DirectQueryMode 連接字串屬性來設定慣用的連接方法,但最終用戶端會控制要使用哪一個來源。

  • 您也可以在快取上配置分割區,使用於 DirectQuery 模式的主要分割區永遠不被處理,而且必須始終參考關係型來源。 有許多方式可以使用分割區來優化模型設計和報告體驗。 如需詳細資訊,請參閱數據分割和 DirectQuery 模式(SSAS 表格式)。

  • 部署模型之後,您可以變更慣用的連接方法。 例如,您可能使用混合模式進行測試,並且只有在徹底測試使用模型的任何報表或查詢之後,才將模型切換至 僅限 DirectQuery 模式。 如需詳細資訊,請參閱 設定或變更 DirectQuery 的慣用連接方法

DirectQuery 模型的數據源

一旦您變更設計環境以啟用 DirectQuery 模式,就會驗證工作區資料庫的數據源,以確保它們來自單一 SQL Server 數據源。 DirectQuery 模型中不允許來自其他來源的數據,包括複製貼上的數據。

如果您想要在 DirectQuery 模式中使用模型,您必須確定報表所需的所有資料都會儲存在指定的 SQL Server 資料庫中。 如果該來源中沒有模型化所需的數據,請考慮使用 Integration Services 或其他數據倉儲工具來將數據匯入做為 DirectQuery 數據源的 SQL Server 資料庫。

DirectQuery 模式的驗證和設計限制

當您撰寫模型以用於 DirectQuery 模式時,您一開始必須將部分數據載入快取。 如果您最終使用的資料太大而無法放入記憶體中,您可以使用 [數據表匯入精靈] 中的 [預覽和篩選 ] 選項來選取數據子集,或撰寫 SQL 腳本來取得您想要的數據。

警告

由於 DirectQuery 模式不支援使用計算欄,因此,如果有需要合併或執行其他作業的欄,您應該提前規劃,並將欄定義建立為數據匯入查詢語句或腳本的一部分。

若要檢視並解決驗證錯誤,請在 SQL Server Data Tools 中開啟 [錯誤清單 ]。 防止使用 DirectQuery 模式的重要錯誤會顯示在 [ 錯誤 ] 索引標籤上。您必須先修正這些錯誤,才能變更為 DirectQuery 模式。 較難解決的驗證錯誤通常與 DirectQuery 模式不支援的公式相關。 如需與公式和匯出數據行相關的錯誤概觀,請參閱 公式相容性一節。

下列清單說明撰寫 DirectQuery 存取模型時要記住的其他考慮:

  • 當處於 僅限 DirectQuery 模式時,報表中的結果可能會根據檢視結果的使用者的安全性內容而有所不同。 您應該使用不同的認證來測試模型,以確保使用者取得預期的結果。

  • 如果您將模型設定為在混合模式中運作,以允許使用 SQL Server 的快取或數據,您應該知道連線到每個來源的用戶端可能會看到不同的結果,視連接字串中指定的模式而定。 如果您需要確保報表使用者只看到來自 SQL Server 的數據,您必須清除快取,或將模型變更為 DirectQueryOnly。

DirectQuery 模型的公式相容性

某些模型可能包含 DirectQuery 模式不支援的公式,而且必須重新設計模型,以避免驗證錯誤。 DirectQuery 模式所支援的公式限制包括下列各項:

  • 任何啟用 DirectQuery 模式的表格式模型都不支援計算欄位,即使是混合模型也不支援。 如果您需要模型的計算欄位,請考慮在匯入設定中使用 Transact-SQL 將它們轉換成衍生欄位。

  • DirectQuery 模型支援使用 DAX 公式,用於度量值,這些公式會被轉換成針對關係型數據存放區的集合操作。 您使用隱含量值所建立的所有量度皆受到支援。

  • 並非所有函式都受到支援。 因為 Analysis Services 會在查詢 DirectQuery 模型時將所有 DAX 公式和量值定義轉換成 SQL 語句,所以任何包含無法轉換成 Transact-SQL 的公式都會觸發模型的驗證錯誤。 例如,不支援時間智慧函式。 即使是支援的函式也會以不同的方式運作,例如統計函數。 如需相容性問題的完整清單,請參閱 DirectQuery 模式中的公式相容性

  • 當您將模型切換至 DirectQuery 模式時,模型中的某些公式可能會驗證,但在針對快取與關係型數據存放區執行時傳回不同的結果。 這是因為針對快取的計算會使用 xVelocity 記憶體內部分析 (VertiPaq) 引擎的語意,其中包含許多用來模擬 Excel 行為的功能,而針對儲存在關係型數據存放區中的數據進行查詢時,一定會使用 SQL Server 的語意。 如需當模型部署到即時時可能會傳回不同結果的 DAX 函式清單,請參閱 DirectQuery 模式中的公式相容性

線上到 DirectQuery 模型

使用 MDX 做為查詢語言的用戶端無法連線到使用 DirectQuery 模式的模型。 例如,如果您嘗試針對 DirectQuery 模型建立 MDX 查詢,您會收到錯誤,指出找不到或尚未處理 Cube。 您可以使用Power View、DAX 公式或 XMLA 查詢,針對 DirectQuery 模型建立查詢。 如需如何對表格式模型執行臨機作查詢的詳細資訊,請參閱 表格式模型數據存取

如果您使用混合式模型,您可以藉由指定連接字串屬性 DirectQueryMode 來指定使用者連線到快取或使用 DirectQuery 數據。

DirectQuery 模式中的安全性

在模型撰寫期間,您可以指定用來擷取源數據的許可權。 這通常是您自己的認證,或用於開發的帳戶。 不過,當您將模型切換為使用 DirectQuery 模式時,安全性內容會比較複雜:

  • 請考慮使用者是否具有關係型數據存放區中數據的必要存取層級。

  • 視使用者的安全性內容而定,檢視相同模型或報表的使用者可能會看到不同的數據。

  • 如果已保留模型快取,則會使用 Analysis Services 安全性模型(角色)來保護快取。 快取可能包含模型設計工具有權查看但用戶沒有許可權的數據。 模型和報表設計師應該清除快取,或透過角色控制存取來保護此數據。

  • 一個從快取回答查詢的模型在連接到數據源時無法冒充當前使用者。 如果您想要在連接到數據源時模擬目前的使用者,您必須使用 DirectQuery 模式。

  • 如果您的報表模型需要安全性,您有兩個選項:您可以使用 Analysis Services 角色,也可以設定數據源的數據列層級許可權。 關係型數據源中的安全性可用來控制數據表的存取權,而且不支援數據行層級安全性。 因此,如果某個區域中的使用者無權檢視不同區域的銷售數據,則包含以 Sales 數據表為基礎的量值報表會傳回空白或錯誤。

模擬設定屬性會指定當您使用 DirectQuery 連接到模型時所使用的認證,無論是針對僅限 DirectQuery 模型,還是針對使用 DirectQuery 回應查詢的混合式模型。 屬性具有下列值:

預設值
使用匯入精靈中指定的認證來連線到數據源。 這可以是特定的 Windows 用戶或服務帳戶。

ImpersonateCurrentUser
使用目前使用者的認證來連線到數據源。

如需如何設定這些屬性的資訊,請參閱 DirectQuery 部署案例(SSAS 表格式)。

DirectQuery 屬性

下表列出您可以在 SQL Server Data Tools 和 SQL Server Management Studio 中設定的屬性,以啟用 DirectQuery 並控制針對模型查詢所使用的數據源。

屬性名稱 說明
DirectQueryMode 屬性 這個屬性可讓您在模型設計工具中使用 DirectQuery 模式。 您必須將此屬性設定為 On ,才能變更任何其他 DirectQuery 屬性。

如需詳細資訊,請參閱啟用 DirectQuery 設計模式(SSAS 表格式)。
QueryMode 屬性 此屬性會指定 DirectQuery 模型的預設查詢方法,您可以在部署模型時在模型設計工具中設定此屬性,但稍後可以覆寫它。 屬性具有下列值:

DirectQuery - 此設定會指定模型的所有查詢應該只使用關係型數據源。

具有記憶體內部的 DirectQuery - 此設定預設會指定使用關係型來源來響應查詢,除非在用戶端的連接字串中另有指定。

記憶中 - 該設定僅使用快取來回應查詢。

In-Memory DirectQuery - 此設定預設會指定。 除非在用戶端的連接字串中另有指定,否則應該使用快取來回答查詢。



如需詳細資訊,請參閱 設定或變更 DirectQuery 的慣用連接方法
DirectQueryMode 屬性 部署模型之後,您可以在 SQL Server Management Studio 中變更此屬性,以變更 DirectQuery 模型的慣用查詢數據源

和上一個屬性一樣,這個屬性會指定模型的預設數據源,並具有下列值:

InMemory:查詢只能使用快取。

DirectQuerywithInMemory:除非客戶端的連接字串另有指定,否則查詢預設會使用關係型數據源。

InMemorywithDirectQuery:除非客戶端的連接字串另有指定,否則查詢預設會使用快取。

DirectQuery:查詢只會使用關係型數據源。



如需詳細資訊,請參閱 設定或變更 DirectQuery 的慣用連接方法
模擬設定屬性 這個屬性會定義用來在查詢時連接到 SQL Server 數據源的認證。 您可以在模型設計工具中設定此屬性,並在部署模型之後變更值。

請注意,這些認證僅用於響應關係型數據存放區的查詢;它們與用來處理混合式模型快取的認證不同。

當模型僅在記憶體中使用時,不能使用偽裝。 除非模型使用 DirectQuery 模式,否則設定 ImpersonateCurrentUser無效。

此外,如果您的模型包含分割區,您必須選擇一個分割區作為 DirectQuery 模式中查詢的來源。 如需詳細資訊,請參閱數據分割和 DirectQuery 模式(SSAS 表格式)。

主題 說明
資料分割和 DirectQuery 模式 (SSAS 表格式) 描述如何在針對 DirectQuery 模式設定的模型中使用分割區。
DirectQuery 模式中的 DAX 公式相容性 說明您可以在針對 DirectQuery 模式設定的模型中使用的公式限制和相容性需求。
開啟 DirectQuery 設計模式 (SSAS 表格式) 描述如何變更設計時間環境,使其支援使用 DirectQuery 模式
變更 DirectQuery 分割區 (SSAS 表格式) 描述如何變更 DirectQuery 分割區。
設定或變更 DirectQuery 的慣用連接方法 描述如何設定或變更針對 DirectQuery 設定之模型的連接方法。
DirectQuery 部署案例 (SSAS 表格式) 描述 DirectQuery 部署案例。
為表格模型資料庫設定In-Memory或DirectQuery存取 瞭解 DirectQuery 組態
清除 Analysis Services 的快取記憶體 清除表格式模型的快取

另請參閱

分區(SSAS 表格模型)
表格式模型專案 (SSAS 表格式)
在 Excel 中分析 (SSAS 表格式)