表格式模型中的 DirectQuery 模式

適用于:SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

本文說明 1200 和更高相容性層級 Analysis Services 表格式模型的 DirectQuery 模式 。 您可以針對您在 Visual Studio 中設計的模型,或已部署的表格式模型啟用 DirectQuery 模式,您可以使用 SQL Server Management Studio (SSMS) 來變更為 DirectQuery 模式。 選擇 DirectQuery 模式之前,請務必瞭解優點和限制。

優點

根據預設,表格式模型會使用記憶體中快取來儲存和查詢資料。 當表格式模型查詢位於記憶體內部的資料時,即使是複雜的查詢也可以非常快速。 不過,使用快取的資料有一些限制,例如,非常大型的資料集可能會超過可用的記憶體和處理 (重新整理) 記憶體內部模型資料可能需要大量可用的資源。

DirectQuery 會克服這些限制,同時也利用 RDBMS 功能,讓查詢執行更有效率。 使用 DirectQuery:

  • 資料是最新的。 因為資料一律會在資料來源查詢,所以用戶端應用程式一律會取得最新的資料。

  • 在記憶體內部快取) 中,不需要維護個別資料複本 (的額外管理額外負荷。 不需要處理 (重新整理模型資料) 。 基礎來源資料的變更可立即反映在對資料模型的查詢中。

  • 資料集可以大於 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 subselect 子句中的不同層級成員的 Tuple。

無使用者定義的階層。

沒有原生 SQL 查詢 (一般來說,Analysis Services 支援 T-SQL 子集,但 DirectQuery 模型則不適用)。

連線到資料來源

在 Visual Studio 中設計 DirectQuery 模型時,連接到資料來源並選取要包含在模型中的資料表和欄位,與記憶體內部模型大致相同。

如果您已經開啟 DirectQuery 但尚未連線到資料來源,您可以使用舊版提供者資料來源的取得資料 (或資料匯入精靈,) 連線到資料來源、選取資料表和欄位等等。 差別在於完成時,記憶體內部快取實際上未匯入任何資料。

DirectQuery 匯入成功

如果您已經使用 [取得資料] 匯入資料,但尚未開啟 DirectQuery 模式,當您這麼做時,將會清除記憶體內部快取。

將範例資料新增至 DirectQuery 模型專案

根據預設,在 Visual Studio 中使用表格式模型設計工具 (SSDT) 來設計 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 和更新版本中支援的資料來源