Del via


Håndtering af datakildesti

M-programmet identificerer en datakilde ved hjælp af en kombination af dens type og sti. Når der registreres en datakilde under en forespørgselsevaluering, forsøger M-programmet at finde matchende legitimationsoplysninger. Hvis der ikke findes nogen legitimationsoplysninger, returnerer programmet en særlig fejl, der resulterer i en prompt om legitimationsoplysninger i Power Query.

Værdien Kind kommer fra definitionen af datakildetypen .

Værdien Path er afledt af de påkrævede parametre for din datakildefunktion. Valgfrie parametre indregnes ikke i id'et for datakildestien. Derfor skal alle datakildefunktioner, der er knyttet til en datakildetype, have de samme parametre. Der er særlig håndtering af funktioner, der har en enkelt parameter af typen Uri.Type. Gå til Funktioner med en URI-parameter for at få flere oplysninger.

Du kan se et eksempel på, hvordan legitimationsoplysninger gemmes i dialogboksen Indstillinger for datakilde i Power BI Desktop. I denne dialogboks repræsenteres Kind af et ikon, og værdien Path vises som tekst.

Skærmbillede af legitimationsoplysningerne for datakildeindstillinger.

Bemærk

Hvis du ændrer din datakildefunktions påkrævede parametre under udviklingen, fungerer tidligere gemte legitimationsoplysninger ikke længere (fordi stiværdierne ikke længere stemmer overens). Du bør slette alle gemte legitimationsoplysninger, hver gang du ændrer parametrene for datakildefunktionen. Hvis der findes inkompatible legitimationsoplysninger, får du muligvis vist en fejl under kørsel.

Stiformat for datakilde

Værdien Path for en datakilde er afledt af datakildefunktionens påkrævede parametre. Obligatoriske parametre kan udelades fra stien ved at føje DataSource.Path = false til funktionens metadata. Du kan få flere oplysninger ved at gå til Udelade påkrævede parametre fra datakildestien.

Som standard kan du se den faktiske strengværdi i dialogboksen Indstillinger for datakilde i Power BI Desktop og i prompten om legitimationsoplysninger. Hvis definitionen Datakildetype har inkluderet en Label værdi, får du i stedet vist mærkatværdien.

Datakildefunktionen i Eksemplet HelloWorldWithDocs har f.eks. følgende signatur:

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

Funktionen har en enkelt påkrævet parameter (message) af typen text, og den bruges til at beregne datakildestien. Den valgfri parameter (count) ignoreres. Stien vises på følgende måde:

Prompt om legitimationsoplysninger

Skærmbillede af prompten om legitimationsoplysninger med stien.

Brugergrænsefladen for indstillinger for datakilde

Skærmbillede af brugergrænsefladen for datakildeindstillinger.

Når der er defineret en etiketværdi, vises værdien for datakildestien ikke:

Skærmbillede af indstillingerne for datakilden, hvor der er defineret en etiket.

Bemærk

Vi anbefaler i øjeblikket, at du ikke inkluderer en mærkat til din datakilde, hvis din funktion har påkrævede parametre, da brugerne ikke kan skelne mellem de forskellige legitimationsoplysninger, de har angivet. Vi håber at kunne forbedre dette fremover (dvs. tillade, at dataconnectorer viser deres egne brugerdefinerede datakildestier).

Udelader påkrævede parametre fra datakildestien

Hvis du ønsker, at en funktionsparameter skal være påkrævet, men ikke skal medtages som en del af datakildestien, kan du føje DataSource.Path = false metadata til funktionsdokumentationen. Denne egenskab kan føjes til en eller flere parametre for din funktion. Dette felt fjerner værdien fra datakildestien (hvilket betyder, at den ikke længere overføres til din TestConnection funktion), så den bør kun bruges til parametre, der ikke er nødvendige for at identificere datakilden, eller skelne mellem brugerlegitimationsoplysninger.

Connectoren i Eksemplet HelloWorldWithDocs kræver f.eks. forskellige legitimationsoplysninger til forskellige message værdier. Hvis du føjer DataSource.Path = false til message parameteren, fjernes den fra beregningen af datakildestien, hvilket gør connectoren til en "singleton". Alle kald til HelloWorldWithDocs.Contents behandles som den samme datakilde, og brugeren giver kun legitimationsoplysninger én gang.

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

Da datakilder med et URI-baseret id er så almindelige, er der særlig håndtering i brugergrænsefladen i Power Query, når du arbejder med URI-baserede datakildestier. Når der findes en URI-baseret datakilde, indeholder dialogboksen med legitimationsoplysninger en rulleliste, som gør det muligt for brugeren at vælge basisstien i stedet for hele stien (og alle stier mellem dem).

Skærmbillede af dialogboksen med legitimationsoplysninger, der viser den indstillingssti, som legitimationsoplysningerne gælder for.

Som Uri.Type det er en tilskrevet type i stedet for en primitiv type på M-sproget, skal du bruge funktionen Value.ReplaceType til at angive, at tekstparameteren skal behandles som en URI.

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