表格式模型中的 DirectQuery 模式
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
本文說明 Analysis Services 表格式模型在 1200 和更高相容性層級 DirectQuery 模式。 您可以針對您在 Visual Studio 中設計的模型啟用 DirectQuery 模式,或針對已部署的表格式模型,您可以使用 SQL Server Management Studio (SSMS) 變更為 DirectQuery 模式。 選擇 DirectQuery 模式之前,請務必瞭解優點和限制。
好處
根據預設,表格式模型會使用記憶體內部快取來儲存和查詢數據。 當表格式模型查詢記憶體內部的數據時,即使是複雜的查詢也可以非常快速。 不過,使用快取的數據有一些限制,例如,非常大型的數據集可能會超過記憶體內部模型的可用記憶體和處理(重新整理)可能需要過多的可用資源。
DirectQuery 會克服這些限制,同時利用 RDBMS 功能,讓查詢執行更有效率。 使用 DirectQuery:
數據 up-to-date。 因為數據一律會在數據源查詢,因此用戶端應用程式一律會取得最新的數據。
不需要維護個別數據復本的額外管理額外負荷(在記憶體內部快取中)。 不需要處理(重新整理)模型數據。 基礎源數據的變更可以立即反映在對數據模型的查詢中。
數據集可以大於 Analysis Services 伺服器資源的記憶體容量。
DirectQuery 可以利用提供者端查詢加速,例如記憶體優化數據行索引所提供的加速。
後端源資料庫可以使用資料庫的數據列層級安全性功能來強制執行安全性(或者,您可以使用使用 DAX 在模型中定義的數據列層級安全性規則)。
如果模型包含可能需要多個查詢的複雜公式,Analysis Services 可以執行優化,以確保針對後端資料庫執行的查詢計劃將盡可能有效率。
局限性
DirectQuery 模式中的表格式模型有一些限制。 在切換模式之前,請務必判斷後端伺服器上查詢執行的優點是否超過任何減少的功能。 如果您在 Visual Studio 中變更現有模型的模式,表格式模型設計工具會通知您模型中與 DirectQuery 模式不相容的任何功能。 請記住下列限制:
特徵 | 限制 |
---|---|
數據源 | DirectQuery 模型只能使用來自下列類型之單一關係資料庫的數據:Azure SQL Database、Azure Synapse Analytics、SQL Server、Oracle 和 Teradata。 |
SQL 預存程式 | 對於 DirectQuery 模型,預存程式無法在 SQL 語句中指定來定義資料表。 |
匯出數據表 | DirectQuery 模型中不支援匯出資料表,但計算結果列為 。 如果您嘗試轉換包含匯出數據表的表格式模型,就會發生錯誤,指出模型不能包含貼上的數據。 |
查詢限制 | 默認數據列限制為一百萬個數據列。 您可以藉由指定 maxIntermediateRowSize 來增加此限制。 若要深入瞭解,請參閱 DAX 屬性。 |
DAX 公式 | 在 DirectQuery 模式中查詢表格式模型時,Analysis Services 會將 DAX 公式和量值定義轉換成 SQL 語句。 包含無法轉換成 SQL 語法之元素的 DAX 公式,將會傳回模型的驗證錯誤。 這項限制大多僅限於特定的 DAX 數據表函式。 針對量值,DAX 公式會轉換成針對關係型數據存放區設定型作業。 這表示支援隱含建立的所有量值。 發生驗證錯誤時,您必須重新撰寫公式、替代不同的函式,或使用數據源中的衍生數據行加以因應措施。 如果表格式模型包含包含不相容函式的公式,當您在設計工具中切換至 DirectQuery 模式時,將會報告它。 注意:當您將模型切換至 DirectQuery 模式時,模型中的某些公式可能會驗證,但在針對快取與關係型數據存放區執行時傳回不同的結果。 這是因為針對快取的計算會使用記憶體內部分析引擎的語意,其中包含模擬 Excel 行為的功能,而關係型數據源中所儲存數據的查詢會使用 SQL 的語意。 |
公式一致性 | 在某些情況下,相較於只使用關係型數據存放區的 DirectQuery 模型,相同的公式可以在快取模型中傳回不同的結果。 這些差異是記憶體內部分析引擎與數據源之間語意差異的結果。 |
MDX 限制 | 沒有相對物件名稱。 所有物件名稱都必須完整。 沒有會話範圍 MDX 語句(命名集、匯出成員、匯出單元格、視覺總計、預設成員等等),但您可以使用查詢範圍建構,例如 'WITH' 子句。 MDX 子選取子句中沒有具有不同層級成員的 Tuple。 沒有使用者定義的階層。 沒有原生 SQL 查詢(通常 Analysis Services 支援 T-SQL 子集,但不支援 DirectQuery 模型)。 |
連接到數據源
在 Visual Studio 中設計 DirectQuery 模型時,連接到數據源,並選取要包含在模型中的數據表和字段,與記憶體內部模型大致相同。
如果您已經開啟 DirectQuery,但尚未連線到數據源,您可以使用 [取得數據] [或舊版提供者數據源的數據匯入精靈] 連線至數據源、選取數據表和欄位等等。 差異在於當您完成時,不會實際將數據匯入記憶體內部快取。
如果您已經使用 [取得數據] 匯入數據,但尚未開啟 DirectQuery 模式,當您這麼做時,將會清除記憶體內部快取。
將範例數據新增至 DirectQuery 模型專案
根據預設,在Visual Studio中使用表格式模型設計工具來設計 DirectQuery 表格式模型專案時,模型的工作區資料庫不包含任何數據。 每個數據表都有一個預設分割區,此分割區會將所有查詢導向數據源。 由於第一次引進 DirectQuery,表格式模型設計工具會在數據分割管理員中包含 設定為範例 功能。 這項功能允許將複製數據分割新增至數據表,可用來將少量的範例數據匯入工作區資料庫。 這項功能有助於驗證模型化決策,而不會影響數據源。
重要
目前不支援在表格式模型設計工具中將 設定為範例 功能 。 忽略 table <TableName> 不包含範例分割區 數據表;若要在 SSDT 中使用數據,請新增範例分割區 警告。
部署 DirectQuery 模型
DirectQuery 模型會部署與匯入模型相同。 不過,不同於匯入模型,如果 DirectQuery 模型包含計算結果列或計算群組等導出專案,則部署之後,您必須在所有數據表上執行 Process Recalc。 若要深入瞭解,請參閱 處理資料庫、資料表或分割區。
另請參閱
在 Visual Studio 中啟用 DirectQuery 模式
在 SSMS 中啟用 DirectQuery 模式
在 DirectQuery 模型中定義分割區,在 DirectQuery 模式中測試模型
Azure Analysis Services 支持的數據源
SQL Server Analysis Services 表格式 1400 和更新版本的數據來源。