啟用 ODBC 型連接器的 DirectQuery
建議使用 M 的內 建 Odbc.DataSource 函式,為具有現有 ODBC 驅動程式和/或支援 SQL 查詢語法的數據源建立自定義連接器。 包裝 Odbc.DataSource 函式可讓您的連接器根據驅動程式所報告的功能繼承預設查詢折迭行為。 此行為可讓 M 引擎根據 Power Query 體驗中使用者所定義的篩選和其他轉換產生 SQL 語句,而不需要在連接器本身內提供此邏輯。
ODBC 延伸模組可以選擇性地啟用 DirectQuery 模式,讓 Power BI 在運行時間動態產生查詢,而不需要預先呼叫用戶的數據模型。
注意
啟用 DirectQuery 支援可提高連接器的難度和複雜度。 啟用 DirectQuery 時,Power BI 會防止 M 引擎補償無法完全推送至基礎數據源的作業。
本文假設熟悉建立基本自定義連接器。
如需下列各節中大部分的程式代碼範例,請參閱 SqlODBC 範例。 您可以在 ODBC 範例目錄中找到其他範例。
M 引擎提供兩個 ODBC 相關的數據源函式: Odbc.DataSource 和 Odbc.Query。
Odbc.DataSource 函式會提供預設導覽數據表,其中包含來自您系統的所有資料庫、數據表和檢視表。 此函式也支持查詢折疊,並允許一系列自定義選項。 大部分 ODBC 型延伸模組都會使用此函式作為其主要擴充性函式。 函式會接受兩個自變數:連接字串,以及提供行為覆寫的選項記錄。
Odbc.Query 函式可讓您透過 ODBC 驅動程式執行 SQL 語句。 它會做為查詢執行的傳遞。 不同於 Odbc.DataSource 函式,它不提供查詢折疊功能,而且需要連接器(或使用者)提供 SQL 查詢。 當您建置自定義連接器時,此函式通常會在內部用來執行查詢,以擷取可能未透過一般 ODBC 通道公開的元數據。 函式接受兩個自變數:連接字串 和 SQL 查詢。
自定義連接器可以接受任意數目的函式自變數。 但若要與 Power Query 隨附的內建數據源函式保持一致,建議使用下列指導方針:
需要用來建立伺服器連線的最低參數集。 使用者需要提供的參數越少,連接器就越容易使用。
雖然您可以使用固定值數目來定義參數(例如 UI 中的下拉式清單),但在使用者通過驗證之前輸入參數。 在使用者通過驗證之後,可以以程序設計方式探索的任何值(例如目錄或資料庫名稱)都應該可透過 [導覽器] 來選取。 Odbc.DataSource 函式的預設行為是傳回包含目錄(資料庫)、架構和數據表名稱的階層式導覽數據表。 不過,您可以在連接器內覆寫此行為。
如果您覺得您的使用者通常知道要輸入的專案值,他們會從 [導覽器] 中選取哪些值(例如資料庫名稱),請讓這些參數成為選擇性參數。 不需要以程序設計方式探索的參數。
函式的最後一個參數應該是名為 「options」 的選擇性記錄。 此參數通常可讓進階使用者設定常見的 ODBC 相關屬性(例如 CommandTimeout
),設定行為會覆寫您連接器特有的屬性,並允許未來的擴充性,而不會影響函式的回溯相容性。
安全性/認證相關自變數絕對不能是數據源函式參數的一部分,因為聯機對話框中輸入的值會保存到使用者的查詢中。 認證相關參數應指定為連接器支持的驗證方法的一部分。
根據預設,數據源函式的所有必要參數都會納入用來識別使用者認證的數據源路徑值。
雖然內 建 Odbc.DataSource 函式的 UI 提供下拉式清單,可讓用戶選取 DSN,但此功能無法透過擴充性來使用。 如果您的數據源組態夠複雜,需要完全可自定義的組態對話框,建議您要求終端用戶預先設定系統 DSN,並讓函式在 DSN 名稱中採用為文字欄位。