Del via


Behandle datakildebane

M-motoren identifiserer en datakilde ved hjelp av en kombinasjon av typen og banen. Når det oppstår en datakilde under en spørringsevaluering, prøver M-motoren å finne samsvarende legitimasjon. Hvis ingen legitimasjon blir funnet, returnerer motoren en spesiell feil som resulterer i en legitimasjonsmelding i Power Query.

Typeverdien kommer fra definisjonen datakildetype.

Baneverdien er avledet fra de nødvendige parameterne for datakildefunksjonen. Valgfrie parametere tas ikke med i datakildebaneidentifikatoren. Som et resultat må alle datakildefunksjoner som er knyttet til en datakildetype, ha de samme parameterne. Det finnes en spesiell håndtering for funksjoner som har én enkelt parameter av typen Uri.Type. Gå til Funksjoner med en Uri-parameter for mer informasjon.

Du kan se et eksempel på hvordan legitimasjon lagres i dialogboksen Innstillinger for datakilde i Power BI Desktop. I denne dialogboksen representeres typen av et ikon, og Bane-verdien vises som tekst.

Skjermbilde av legitimasjonen for datakildeinnstillinger.

Merk

Hvis du endrer datakildefunksjonens nødvendige parametere under utvikling, fungerer ikke tidligere lagrede legitimasjoner lenger (fordi baneverdiene ikke lenger samsvarer). Du bør slette eventuell lagret legitimasjon når du endrer datakildefunksjonsparameterne. Hvis det blir funnet inkompatibel legitimasjon, kan det hende du får en feil under kjøring.

Datakildebaneformat

Baneverdien for en datakilde er avledet fra datakildefunksjonens nødvendige parametere. Obligatoriske parametere kan utelates fra banen ved å legge DataSource.Path = false til i funksjonens metadata. Hvis du vil ha mer informasjon, kan du gå til Utelate nødvendige parametere fra datakildebanen.

Som standard kan du se den faktiske strengverdien i dialogboksen Innstillinger for datakilde i Power BI Desktop, og i ledeteksten for legitimasjon. Hvis definisjonen for datakildetype har inkludert en Label verdi, ser du etikettverdien i stedet.

Datakildefunksjonen i HelloWorldWithDocs-eksemplet har for eksempel følgende signatur:

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

Funksjonen har en enkelt obligatorisk parameter (message) av typen text, og brukes til å beregne datakildebanen. Den valgfrie parameteren (count) ignoreres. Banen vises på følgende måte:

Ledetekst for legitimasjon

Skjermbilde av legitimasjonsledeteksten med bane.

Brukergrensesnitt for datakildeinnstillinger

Skjermbilde av brukergrensesnittet for datakildeinnstillinger.

Når en etikettverdi er definert, vises ikke datakildebaneverdien:

Skjermbilde av datakildeinnstillingene med en definert etikett.

Merk

Vi anbefaler for øyeblikket at du ikke inkluderer en etikett for datakilden hvis funksjonen har nødvendige parametere, siden brukere ikke kan skille mellom de ulike legitimasjonene de har angitt. Vi håper å forbedre dette i fremtiden (det vil være slik at datakoblinger kan vise sine egne egendefinerte datakildebaner).

Utelate nødvendige parametere fra datakildebanen

Hvis du vil at en funksjonsparameter skal være nødvendig, men ikke inkluderes som en del av datakildebanen, kan du legge DataSource.Path = false til metadataene for funksjonsdokumentasjon. Denne egenskapen kan legges til i én eller flere parametere for funksjonen. Dette feltet fjerner verdien fra datakildebanen (noe som betyr at den ikke lenger sendes til TestConnection funksjonen), så den bør bare brukes for parametere som ikke kreves for å identifisere datakilden, eller skille mellom brukerlegitimasjon.

Koblingen i HelloWorldWithDocs-eksemplet krever for eksempel forskjellig legitimasjon for ulike message verdier. Hvis du legger DataSource.Path = false til parameteren message , fjernes den fra beregningen av datakildebanen, noe som effektivt gjør koblingen til en «singleton». Alle kall som skal HelloWorldWithDocs.Contents behandles som samme datakilde, og brukeren oppgir bare legitimasjon é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""}})"
        ]}
    ];

Funksjoner med en Uri-parameter

Siden datakilder med en URI-basert identifikator er så vanlige, er det spesiell håndtering i Brukergrensesnittet for Power Query når du arbeider med Uri-baserte datakildebaner. Når det oppstår en Uri-basert datakilde, gir legitimasjonsdialogboksen en rullegardinliste som gjør det mulig for brukeren å velge basisbanen i stedet for den fullstendige banen (og alle baner i mellom).

Skjermbilde av legitimasjonsdialogboksen som viser innstillingsbanen som legitimasjonen gjelder for.

Som Uri.Type er en tilskrevet type i stedet for en primitiv type på M-språket, må du bruke Value.ReplaceType-funksjonen til å angi at tekstparameteren skal behandles som en URI.

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