M 引擎透過資料來源的類型與路徑組合來識別資料來源。 當查詢評估中遇到資料來源時,M 引擎會嘗試尋找匹配的憑證。 若未找到憑證,引擎會回傳特殊錯誤,導致 Power Query 中出現憑證提示。
Kind 值來自資料來源 Kind 定義。
路徑值是根據資料來源函式所需的參數推導而來。 可選參數不會被納入資料來源路徑識別碼。 因此,所有與資料來源類型相關的資料來源函式必須擁有相同的參數。 對於只有一個參數 Uri.Type的函式,有特殊的處理方式。 詳情請到 帶有 Uri 參數的函式 。
你可以在 Power BI Desktop 的資料 來源設定 對話框中看到憑證如何儲存的範例。 在此對話框中,Kind 以圖示表示,路徑值以文字顯示。
備註
如果你在開發時更改了資料來源函式所需的參數,先前儲存的憑證就無法運作(因為路徑值不再匹配)。 每次更改資料來源函式參數時,都應該刪除所有儲存的憑證。 如果發現憑證不相容,執行時可能會收到錯誤。
資料來源路徑格式
資料來源的 路徑 值是根據資料來源函式所需的參數推導而來。 可以透過在函式的元資料中加入 DataSource.Path = false,將必要的參數排除於路徑之外。 欲了解更多資訊,請參考 「排除資料來源路徑中的必要參數」。
預設情況下,你可以在 Power BI Desktop 的資料 來源設定 對話框和憑證提示中看到實際的字串值。 如果資料來源類型定義包含Label值,你將會看到標籤值。
例如, HelloWorldWithDocs 範例 中的資料來源函式具有以下簽名:
HelloWorldWithDocs.Contents = (message as text, optional count as number) as table => ...
該函數有一個必須的參數(message),型別為 text,用於計算資料來源路徑。 可選參數count()則被忽略。 路徑會顯示如下:
憑證提示
資料來源設定介面
當定義標籤值時,資料來源路徑值不會顯示:
備註
我們目前建議,如果你的功能有必要的參數, 不要 為資料來源加上標籤,因為使用者無法區分他們輸入的不同憑證。 我們希望未來能改進這點(也就是讓資料連接器能顯示自己的自訂資料來源路徑)。
排除資料來源路徑中所需的參數
如果你希望函式參數是必須的,但不包含在資料來源路徑中,你可以在函式文件的元資料中加入 DataSource.Path = false。 這個屬性可以加到你函數的一個或多個參數上。 這個欄位會移除資料來源路徑上的該值(也就是不再傳給你的 TestConnection 函式),所以它應該只用於不需要用來辨識資料來源或區分使用者憑證的參數。
例如,HelloWorldWithDocs 範例中的連接器會需要不同值的憑證。message
將DataSource.Path = falsemessage加入參數中後,該參數從資料來源路徑計算中移除,實際上使連接器成為「單例」。 所有呼叫 HelloWorldWithDocs.Contents 都視為同一資料來源,使用者僅提供一次憑證。
HelloWorldType = type function (
message as (type text meta [
DataSource.Path = false,
Documentation.FieldCaption = "Message",
Documentation.FieldDescription = "Text to display",
Documentation.SampleValues = {"Hello world", "Hola mundo"}
]),
optional count as (type number meta [
Documentation.FieldCaption = "Count",
Documentation.FieldDescription = "Number of times to repeat the message",
Documentation.AllowedValues = { 1, 2, 3 }
]))
as table meta [
Documentation.Name = "Hello - Name",
Documentation.LongDescription = "Hello - Long Description",
Documentation.Examples = {[
Description = "Returns a table with 'Hello world' repeated 2 times",
Code = "HelloWorldWithDocs.Contents(""Hello world"", 2)",
Result = "#table({""Column1""}, {{""Hello world""}, {""Hello world""}})"
],[
Description = "Another example, new message, new count!",
Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
Result = "#table({""Column1""}, {{""Goodbye""}})"
]}
];
具有 Uri 參數的函數
由於使用 Uri 識別碼的資料來源非常常見,Power Query 介面在處理基於 Uri 的資料來源路徑時有特別的處理方式。 當遇到基於 Uri 的資料來源時,憑證對話框會提供下拉選單,讓使用者選擇基礎路徑而非完整路徑(以及中間所有路徑)。
在 M 語言中,由於 Uri.Type 是指定型別而非原始型別,因此你需要使用 Value.ReplaceType 函式來表示你的文字參數應被視為 Uri。
shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.type) as any);