本主題提供 DirectQuery 模型設計和部署程式的逐步解說。 您可以將 DirectQuery 設定為僅使用關係型數據(僅限 DirectQuery),也可以設定模型,以僅使用快取數據或僅限關係型數據來切換 (混合模式)。 本主題說明這兩種模式的實作程式,並說明查詢結果的可能差異,視模式和安全性設定而定。
設計和部署步驟
步驟 1. 建立解決方案
無論您使用哪一種模式,都必須檢閱描述 DirectQuery 模型中數據限制的資訊。 例如,模型和報表中使用的所有數據都必須來自單一 SQL Server 資料庫。 如需詳細資訊,請參閱 DirectQuery 模式(SSAS 表格式)。
此外,請檢閱量值和匯出數據行的限制,並判斷您想要使用的公式是否與 DirectQuery 模式相容。 您可能需要移除或修改下列元素:
不支援計算欄位。
無法使用複製貼上的數據。 如果您匯入 PowerPivot 模型以啟動解決方案,請務必在匯入方案之前先刪除鏈接的數據表,因為無法刪除此數據,而且會封鎖 DirectQuery 驗證。
步驟 2. 在模型設計工具中啟用 DirectQuery 模式
根據預設,DirectQuery 會停用。 因此,您必須設定設計環境以支援 DirectQuery 模式。
以滑鼠右鍵按兩下 [方案總管] 中的 Model.bim 節點,並將 屬性 DirectQuery 模式設定為 On。
您可以隨時開啟 DirectQuery;不過,為了確保您不會建立與 DirectQuery 模式不相容的數據行或公式,建議您從頭開始啟用 DirectQuery 模式。
一開始,即使是 DirectQuery 模型一律會在記憶體中建立。 工作區資料庫的預設查詢模式也會設定為 DirectQuery 與記憶體內部。 此混合式工作模式可讓您在模型設計程式期間使用匯入數據的快取來改善效能,同時根據 DirectQuery 需求驗證模型。
步驟 3. 解決驗證錯誤
如果您在開啟 DirectQuery 或新增數據或公式時收到驗證錯誤,請開啟 Visual Studio 錯誤清單,然後採取必要的動作。
變更 DirectQuery 模式的任何必要屬性設定,如錯誤訊息中所述。
移除計算欄位。 如果您需要某個特定量值的計算欄位,您都可以使用表格匯入精靈中提供的 關係型查詢設計工具(SSAS) 來建立此欄位。
修改或移除與 DirectQuery 模式不相容的公式。 如果您需要特定功能來進行計算,請考慮使用 Transact-SQL 實現等效功能的方式。
視需要新增數據。 如果您的模型先前使用 SQL Server 以外的提供者複製貼上數據或數據,您可以在現有連接內建立新的檢視和衍生數據行,或使用分散式查詢。 DirectQuery 模型中所使用的所有資料都必須可透過單一 SQL Server 數據源存取。
步驟 4. 設定在模型上回答查詢的慣用方法
| 僅限 DirectQuery | 將屬性設定為 DirectQuery。 |
| 混合模式 | 將屬性設定為 In-Memory With DirectQuery 或 DirectQuery With In-Memory。 您稍後可以變更此值以使用不同的喜好設定。 請注意,用戶端可以覆蓋連接字串中的優選方法。 |
步驟 5. 指定 DirectQuery 分割區
| 僅限 DirectQuery | 選擇性。 只有 DirectQuery 模型就不需要分割區。 不過,如果您在設計階段在模型中建立分割區,請記住,只有一個分割區可以當做數據源使用。 根據預設,您建立的第一個分割區會作為 DirectQuery 磁碟分區。 若要確保模型所需的所有數據都可從 DirectQuery 數據分割取得,請選擇 DirectQuery 數據分割並編輯 SQL 語句以取得整個數據集。 |
| 混合模式 | 如果您的模型中有任何數據表有多個分割區,您必須選擇單一分割區做為 DirectQuery 分割區。 如果您未指派分割區,根據預設,建立的第一個分割區將會作為 DirectQuery 磁碟分區。 在 DirectQuery 以外的所有分割區上設定處理選項。 通常永遠不會處理 DirectQuery 分割區,因為數據是從關係型來源傳遞而來。 如需詳細資訊,請參閱數據分割和 DirectQuery 模式(SSAS 表格式)。 |
步驟 6. 設定冒用
只有 DirectQuery 模型支援模擬使用。 模擬選項 [模擬設定] 會定義檢視來自指定 SQL Server 數據源之數據時所使用的認證。
| 僅限 DirectQuery | 針對 [模擬設定 ] 屬性,指定將用來連線到 SQL Server 數據源的帳戶。 如果您使用值 ImpersonateCurrentUser,裝載模型的 Analysis Services 實例會將模型的目前使用者認證傳遞至 SQL Server 資料庫。 |
| 混合模式 | 針對 [模擬設定 ] 屬性,指定將用來存取 SQL Server 數據源中數據的帳戶。 此設定不會影響用來處理模型所用快取的認證。 |
步驟 7。 部署模型
當您準備好部署模型時,請開啟 Visual Studio 的 [ 專案 ] 選單,然後選取 [ 屬性]。 將 QueryMode 屬性設定為下表所述的其中一個值:
如需詳細資訊,請參閱 從 SQL Server Data Tools 部署 (SSAS 表格式) 。
| 僅限 DirectQuery |
DirectQueryOnly 因為您只指定了直接查詢,因此模型的元數據會部署到伺服器,但不會處理模型。 請注意,工作區資料庫所使用的快取不會自動刪除。 如果您想要確保使用者看不到快取的數據,您可能想要清除設計時間快取。 如需更多資訊,請參閱 清除分析服務快取。 |
| 混合模式 |
具有記憶體內部的 DirectQuery In-Memory 搭配使用 DirectQuery 這兩個值都可讓您視需要使用快取或關係型數據源。 此順序會定義在回應模型的查詢時,預設會使用哪一個數據源。 在混合模式中,快取必須同時處理模型元數據部署至伺服器。 您可以在部署之後變更此設定。 |
步驟 8。 確認已部署的模型
在 SQL Server Management Studio 中,開啟您部署模型的 Analysis Services 實例。 以滑鼠右鍵按兩下資料庫的名稱,然後選取 [ 屬性]。
當您定義部署屬性時,已設定 DirectQueryMode 屬性。
當您定義使用者模擬選項時,會設定屬性 [數據源模擬資訊]。 如需詳細資訊,請參閱設定模擬選項 (SSAS - 多維度)。
您可以在部署模型之後隨時變更這些屬性。
比較 DirectQuery 選項
僅限 DirectQuery
當您想要保證單一數據源,或數據太大而無法容納記憶體時,會偏好使用此選項。 如果您使用非常大的關係型數據源,您可以在設計時間使用某些數據子集來建立模型。 當您以僅限 DirectQuery 模式部署模型時,可以編輯數據源定義以包含所有必要的數據。
如果您想要使用關係型數據源所提供的安全性來控制使用者對數據的存取權,也偏好使用此選項。 使用快取表格式模型,您也可以使用 Analysis Services 角色來控制數據存取,但儲存在快取中的數據也必須受到保護。 如果您的安全性內容要求永遠不要快取數據,您應該一律使用此選項。
下表說明 DirectQuery 僅限模式的可能部署結果:
| DirectQuery 不使用快取 | 不會將數據載入快取中。 此模型永遠無法被處理。 只能使用支援 DAX 查詢的客戶端來查詢模型。 查詢結果一律會從原始數據源傳回。 DirectQueryMode = OnQueryMode = DirectQuery |
| 僅限於針對快取查詢的 DirectQuery | 部署失敗。 不支援此設定。 DirectQueryMode = OnQueryMode = 內存中 |
混合模式
在混合模式中部署模型有許多優點:您可以視需要從 SQL Server 數據源取得 up-to日期數據,但保留快取可讓您在設計報表或測試模型時,更快速地處理記憶體中的數據。
如果您的模型非常大,DirectQuery 混合模式也很有用。 與其讓使用者取得過時的數據或在快取處理時無法使用模型,不如在處理進行時將模型切換至 DirectQuery 模式。 使用者可能會遇到稍微慢一點的效能,但他們將能夠直接從關係型存放區取得數據,確保結果 up-to日期。
下表比較 DirectQuery 選項之每個組合中的部署結果。
| 混合模式優先使用快取 | 您可以處理模型,並將數據載入快取中。 查詢預設會使用快取。 如果用戶端想要使用 DirectQuery 來源,則必須在連接字串中插入參數。 DirectQueryMode = OnQueryMode = In-Memory 使用 DirectQuery |
| 優先使用 DirectQuery 的混合模式 | 模型已處理,現在數據可以載入快取。 不過,查詢預設會使用 DirectQuery。 如果用戶端想要使用快取的數據,則必須在連接字串中插入參數。 如果模型中的數據表已分割,快取的主要分割區也會設定為 使用 DirectQueryIn-Memory。 DirectQueryMode = OnQueryMode = 具有記憶體內部的 DirectQuery |