处理数据源路径

M 引擎使用 其 KindPath 的组合标识数据源。 在查询评估期间遇到数据源时,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)。 路径如下所示:

凭证提示

路径凭据提示的屏幕截图。

数据源设置用户界面

数据源设置 UI 的屏幕截图。

定义标签值时,不会显示数据源路径值:

数据源设置的屏幕截图,其中定义了标签。

注释

我们目前建议,如果函数具有所需的参数,则 不要 包含数据源的标签,因为用户无法区分他们输入的不同凭据。 我们希望在未来改进这一点(也就是说,允许数据连接器显示自己的自定义数据源路径)。

从数据源路径中排除所需的参数

如果希望函数参数是必需的,但不希望其作为数据源路径的一部分包含在内,可以在函数文档元数据中添加 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);