使用 M 內建 的 Odbc.DataSource 函式是為已有 ODBC 驅動程式及/或支援 SQL 查詢語法的資料來源建立自訂連接器的推薦方式。 封裝 Odbc.DataSource 函式後,你的連接器可以繼承由驅動程式回報能力所基礎的預設查詢摺疊行為。 這種行為使 M 引擎能根據使用者在 Power Query 體驗中定義的過濾器及其他轉換產生 SQL 語句,而無需在連接器本身提供這些邏輯。
ODBC 擴充功能可選擇啟用 DirectQuery 模式,讓 Power BI 能在執行時動態產生查詢,而不會預快取使用者的資料模型。
備註
啟用 DirectQuery 支援會提升連接器的難度與複雜度。 啟用 DirectQuery 時,Power BI 會阻止 M 引擎對無法完全推送到底層資料來源的操作進行補償。
本文假設你熟悉基本自訂連接器的製作過程。
以下章節大部分程式碼範例請參考 SqlODBC 範例 。 其他樣本可在ODBC樣本目錄中找到。
ODBC 擴充性函數
M 引擎提供兩個與 ODBC 相關的資料來源函式: Odbc.DataSource 與 Odbc.Query。
Odbc.DataSource 函式提供一個預設的導覽表,包含系統中所有資料庫、資料表和檢視。 此功能也支援查詢摺疊,並提供多種自訂選項。 大多數基於 ODBC 的擴充功能將此函式作為主要的擴充功能。 這個函式接受兩個參數——一個連接字串,以及一個選項記錄,用來提供行為覆寫。
Odbc.Query 函式允許你透過 ODBC 驅動程式執行 SQL 語句。 它作為查詢執行的直通通道。 與 Odbc.DataSource 函式不同,它不提供查詢摺疊功能,且 SQL 查詢必須由連接器(或終端使用者)提供。 當你建立自訂連接器時,這個函式通常會在內部執行查詢,以取得可能無法透過一般 ODBC 通道暴露的元資料。 函式接受兩個參數——一個連接字串和一個 SQL 查詢。
資料來源功能指引
自訂連接器可以接受任意數量的函式參數。 但為了與 Power Query 內建的資料來源功能保持一致,建議遵循以下指引:
只需要用來建立與伺服器連線的最低限度參數。 終端使用者需要提供的參數越少,連接器就越容易使用。
雖然你可以定義固定數量的參數(例如在 UI 中的下拉清單),但參數是在使用者驗證前輸入的。 任何在使用者認證後可透過程式系統發現的值(如目錄或資料庫名稱)都應可透過導航器選擇。 Odbc.DataSource 函式的預設行為是回傳一個階層式的導覽表,包含目錄(資料庫)、結構(Schema)和資料表名稱。 不過,這種行為可以在你的連接器內被覆蓋。
如果你覺得使用者通常知道從導航器中要輸入的項目值(例如資料庫名稱),請將這些參數設為可選。 不應該強制要求可以由程式自動發現的參數。
你函式的最後一個參數應該是一個可選的紀錄,叫做「options」。 此參數通常允許進階使用者設定常見的 ODBC 相關屬性(例如
CommandTimeout),設定連接器專用的行為,並允許未來擴充性,而不影響您功能的向後相容性。安全/憑證相關的參數絕不能成為資料來源函式參數的一部分,因為在連接對話框中輸入的值會被永續保存到使用者的查詢中。 憑證相關參數應作為連接器支援的認證方法之一指定。
預設情況下,資料來源函式的所有必要參數都會納入用於識別使用者憑證的資料來源路徑(Data Source Path)值中。
雖然內建的 Odbc.DataSource 函式介面提供下拉選單,讓使用者選擇 DSN,但此功能並未透過擴充性提供。 如果您的資料來源設定複雜到需要完全自訂的設定對話框,我們建議您要求終端使用者預先設定系統 DSN,並讓您的功能以文字欄位接收 DSN 名稱。