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.
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
Brukergrensesnitt for datakildeinnstillinger
Når en etikettverdi er definert, vises ikke datakildebaneverdien:
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).
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);