Dela via


Hantera datakällans sökväg

M-motorn identifierar en datakälla med hjälp av en kombination av dess typ och sökväg. När en datakälla påträffas under en frågeutvärdering försöker M-motorn hitta matchande autentiseringsuppgifter. Om inga autentiseringsuppgifter hittas returnerar motorn ett särskilt fel som resulterar i en fråga om autentiseringsuppgifter i Power Query.

Kind-värdet kommer från datakällans typdefinition.

Värdet Sökväg härleds från de obligatoriska parametrarna för datakällans funktion. Valfria parametrar räknas inte in i sökvägsidentifieraren för datakällan. Därför måste alla datakällans funktioner som är associerade med en datakälla ha samma parametrar. Det finns särskild hantering för funktioner som har en enda parameter av typen Uri.Type. Gå till Funktioner med en URI-parameter för mer information.

Du kan se ett exempel på hur autentiseringsuppgifter lagras i dialogrutan Inställningar för datakälla i Power BI Desktop. I den här dialogrutan representeras Sort av en ikon och värdet Sökväg visas som text.

Skärmbild av autentiseringsuppgifterna för datakällans inställningar.

Kommentar

Om du ändrar datakällfunktionens obligatoriska parametrar under utvecklingen fungerar inte längre tidigare lagrade autentiseringsuppgifter (eftersom sökvägsvärdena inte längre matchar). Du bör ta bort alla lagrade autentiseringsuppgifter när du ändrar funktionsparametrarna för datakällan. Om inkompatibla autentiseringsuppgifter hittas kan du få ett fel vid körning.

Sökvägsformat för datakälla

Sökvägsvärdet för en datakälla härleds från datakällans obligatoriska parametrar. Obligatoriska parametrar kan undantas från sökvägen genom att lägga DataSource.Path = false till i funktionens metadata. Mer information finns i Exkludera obligatoriska parametrar från datakällans sökväg.

Som standard kan du se det faktiska strängvärdet i dialogrutan Inställningar för datakälla i Power BI Desktop och i kommandotolken för autentiseringsuppgifter. Om definitionen Typ av datakälla har inkluderat ett Label värde visas etikettvärdet i stället.

Till exempel har datakällans funktion i Exemplet HelloWorldWithDocs följande signatur:

HelloWorldWithDocs.Contents = (message as text, optional count as number) as table => ...

Funktionen har en enda obligatorisk parameter (message) av typen text, och används för att beräkna datakällans sökväg. Den valfria parametern (count) ignoreras. Sökvägen visas på följande sätt:

Fråga om autentiseringsuppgift

Skärmbild av uppmaningen om autentiseringsuppgifter med sökvägen.

Användargränssnitt för datakällainställningar

Skärmbild av användargränssnittet för datakällans inställningar.

När ett etikettvärde har definierats visas inte sökvägsvärdet för datakällan:

Skärmbild av inställningarna för datakällan med en definierad etikett.

Kommentar

Vi rekommenderar för närvarande att du inte tar med en etikett för datakällan om funktionen har obligatoriska parametrar, eftersom användarna inte kan skilja mellan de olika autentiseringsuppgifter som de har angett. Vi hoppas kunna förbättra detta i framtiden (d.v.s. tillåta att dataanslutningar visar sina egna anpassade datakällsökvägar).

Exkludera obligatoriska parametrar från datakällans sökväg

Om du vill att en funktionsparameter ska krävas, men inte inkluderas som en del av datakällans sökväg, kan du lägga till DataSource.Path = false i funktionens dokumentationsmetadata. Den här egenskapen kan läggas till i en eller flera parametrar för din funktion. Det här fältet tar bort värdet från din datakällsökväg (vilket innebär att det inte längre skickas till din TestConnection funktion), så det bör endast användas för parametrar som inte krävs för att identifiera datakällan eller skilja mellan användarautentiseringsuppgifter.

Anslutningsappen i HelloWorldWithDocs-exemplet skulle till exempel kräva olika autentiseringsuppgifter för olika message värden. Om du lägger DataSource.Path = false till parametern message tar du bort den från beräkningen av datakällans sökväg, vilket i praktiken gör anslutningsappen till en "singleton". Alla anrop till HelloWorldWithDocs.Contents behandlas som samma datakälla och användaren tillhandahåller bara autentiseringsuppgifter en gång.

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""}})"
        ]}
    ];

Funktioner med en URI-parameter

Eftersom datakällor med en Uri-baserad identifierare är så vanliga, finns det särskild hantering i Power Query-användargränssnittet när du hanterar Uri-baserade sökvägar för datakällor. När en Uri-baserad datakälla påträffas innehåller dialogrutan autentiseringsuppgifter en listruta som gör att användaren kan välja bassökvägen i stället för den fullständiga sökvägen (och alla sökvägar däremellan).

Skärmbild av dialogrutan för autentiseringsuppgifter som visar den inställningssökväg som autentiseringsuppgifterna gäller för.

Som Uri.Type är en tillskriven typ i stället för en primitiv typ på M-språket måste du använda funktionen Value.ReplaceType för att indikera att textparametern ska behandlas som en URI.

shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.type) as any);