Del via


Håndtering af datakildesti

M-motoren identificerer en datakilde ved hjælp af en kombination af dens Type og Path. Når en datakilde støder på under en forespørgselsevaluering, forsøger M-motoren at finde matchende legitimationsoplysninger. Hvis der ikke findes nogen legitimationsoplysninger, returnerer motoren en særlig fejl, der resulterer i en legitimationsprompt i Power Query.

Kind-værdien kommer fra definitionen Data Source Kind.

Path-værdien udledes fra de nødvendige parametre for din datakildefunktion. Valgfrie parametre indgår ikke i datakildesti-identifikatoren. Som følge heraf skal alle datakildefunktioner, der er tilknyttet en datakildetype, have de samme parametre. Der findes særlig håndtering for funktioner, der har en enkelt parameter af typen Uri.Type. Gå til Funktioner med en URI-parameter for detaljer.

Du kan se et eksempel på, hvordan legitimationsoplysninger gemmes, i dialogen Data source settings i Power BI Desktop. I denne dialog repræsenteres Kind af et ikon, og Path-værdien vises som tekst.

Skærmbillede af datakildens indstillingsoplysninger.

Notat

Hvis du ændrer de nødvendige parametre for din datakildefunktion under udviklingen, virker tidligere lagrede legitimationsoplysninger ikke længere (fordi stiværdierne ikke længere matcher). Du bør slette alle lagrede legitimationsoplysninger hver gang du ændrer dine datakildefunktionsparametre. Hvis der findes inkompatible legitimationsoplysninger, kan du få en fejl under kørsel.

Datakildestiformat

Sti-værdien for en datakilde udledes fra datakildefunktionens krævede parametre. Nødvendige parametre kan udelukkes fra stien ved at tilføje DataSource.Path = false til funktionens metadata. For mere information, gå til Udelukkelse af nødvendige parametre fra din datakildesti.

Som standard kan du se den faktiske strengværdi i dialogen Data source settings i Power BI Desktop og i legitimationsprompten. Hvis definitionen Data Source Kind har inkluderet en Label værdi, vil du se label-værdien i stedet.

For eksempel har datakildefunktionen i HelloWorldWithDocs-eksemplet følgende signatur:

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

Funktionen har en enkelt krævet parameter (message) af typen text, og bruges til at beregne datakildestien. Den valgfrie parameter (count) ignoreres. Stien ville blive vist som følger:

Legitimationsprompt

Skærmbillede af legitimationsprompten med sti.

Datakildeindstillinger UI

Skærmbillede af datakildeindstillingernes brugerflade.

Når en Label-værdi defineres, vises datakildesti-værdien ikke:

Skærmbillede af datakildeindstillingerne med en defineret label.

Notat

Vi anbefaler i øjeblikket, at du ikke inkluderer en Label til din datakilde, hvis din funktion har de nødvendige parametre, da brugerne ikke vil kunne skelne mellem de forskellige legitimationsoplysninger, de har indtastet. Vi håber at forbedre dette i fremtiden (det vil sige at lade dataforbindelser vise deres egne brugerdefinerede datakildestier).

Udelukkelse af nødvendige parametre fra din datakildesti

Hvis du vil have en funktionsparameter som påkrævet, men ikke inkluderet som en del af din datakildesti, kan du tilføje DataSource.Path = false metadata til funktionsdokumentationen. Denne egenskab kan tilføjes til en eller flere parametre for din funktion. Dette felt fjerner værdien fra din datakildesti (hvilket betyder, at den ikke længere sendes til din TestConnection funktion), så den bør kun bruges til parametre, der ikke er nødvendige for at identificere din datakilde eller skelne mellem brugerlegitimationsoplysninger.

For eksempel vil connectoren i HelloWorldWithDocs-eksemplet kræve forskellige legitimationsoplysninger for forskellige message værdier. Tilføjelse DataSource.Path = false til parameteren message fjerner den fra datakildestiens beregning, hvilket effektivt gør stikket til en "singleton". Alle kald behandles HelloWorldWithDocs.Contents 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

Fordi datakilder med en URI-baseret identifikator er så almindelige, er der særlig håndtering i Power Query-brugerfladen, når man håndterer Uri-baserede datakildestier. Når en Uri-baseret datakilde støder på, giver legitimationsdialogen en dropdown, som tillader brugeren at vælge basisstien i stedet for hele stien (og alle stier imellem).

Skærmbillede af legitimationsdialogen, der viser indstillingsstien, som legitimationsoplysningerne gælder for.

Da Uri.Type det er en tilskrevet type i M-sproget i stedet for en primitiv type , skal du bruge funktionen Value.ReplaceType til at angive, at din tekstparameter skal behandles som en Uri.

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