M 引擎使用 其 Kind 和 Path 的组合标识数据源。 在查询评估期间遇到数据源时,M 引擎会尝试查找匹配的凭据。 如果未找到凭据,引擎将返回一个特定错误,从而在 Power Query 中触发凭据提示。
Kind 值来自数据源种类定义。
Path 值派生自数据源函数的必需参数。 可选参数不会纳入数据源路径标识符。 因此,与数据源类型关联的所有数据源函数必须具有相同的参数。 对于只有一个Uri.Type类型参数的函数,会有特殊处理。 有关详细信息,请转到 包含 URI 参数的 Functions 。
可以看到如何在 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 的标识符的数据源非常常见,因此处理基于 Uri 的数据源路径时,Power Query UI 中存在特殊处理。 遇到基于 URI 的数据源时,凭据对话框会提供一个下拉列表,该下拉列表允许用户选择基本路径,而不是完整路径(以及中间的所有路径)。
在 M 语言中,Uri.Type 是一种归属类型,而不是一种原始类型,因此你需要使用 Value.ReplaceType 函数来指示应将文本参数视为 Uri。
shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.type) as any);