Del via


Bruke egendefinerte funksjoner

Hvis du befinner deg i en situasjon hvor du må bruke det samme settet med transformasjoner på forskjellige spørringer eller verdier, kan det være fordelaktig å lage en egendefinert Power Query-funksjon som kan gjenbrukes så mange ganger du trenger. En egendefinert Power Query-funksjon er en tilordning fra et sett med inndataverdier til én enkelt utdataverdi, og opprettes fra opprinnelige M-funksjoner og operatorer.

Du kan manuelt lage din egen egendefinerte Power Query-funksjon ved å bruke Power Query M-formelspråket, eller Power Query-brukergrensesnittet tilbyr deg funksjoner som gjør prosessen med å lage og administrere en egendefinert funksjon raskere, forenkle og forbedre prosessen.

Først skal vi dekke de grunnleggende stegene for å lage en egendefinert funksjon med kode i brukergrensesnittet, deretter vil vi fokusere på å bruke grensesnittet for å gjøre komplekse handlinger om til en gjenbrukbar funksjon.

Viktig!

Denne artikkelen forklarer hvordan man lager en egendefinert funksjon med Power Query ved bruk av vanlige transformasjoner tilgjengelig i Power Query-brukergrensesnittet. Den fokuserer på kjernekonseptene for å lage tilpassede funksjoner, og lenker til andre artikler i Power Query-dokumentasjonen for mer informasjon om spesifikke transformasjoner som refereres til i denne artikkelen.

Lag en egendefinert funksjon fra kode i UI-en

Note

Følgende steg kan følges i Power BI Desktop eller ved å bruke Power Query-opplevelsen som finnes i Excel for Windows.

  1. Bruk koblingsopplevelsen til å koble til dataene dine der de er lagret. Når du har valgt dataene dine, velg knappen Transformer data eller Rediger . Dette vil ta deg til Power Query-opplevelsen.
  2. Høyreklikk på et tomt område i Spørringspanelet til venstre.
  3. Velg blank spørring.
  4. I det nye tomme spørringsvinduet velger du Hjem-menyen , deretter Avansert redigerer.
  5. Erstatt malen med din egendefinerte funksjon. Eksempel:
    let
     HelloWorld = () => ("Hello World")
    in
     HelloWorld
    
  6. Velg Ferdig.

For mer informasjon om utvikling av egendefinerte funksjoner med formelspråket Power Query M, se denne artikkelen: Forstå Power Query M-funksjoner. I de følgende seksjonene finnes det veiledninger som beskriver hvordan du kan bruke Power Query-brukergrensesnittet til å utvikle egendefinerte funksjoner uten å skrive kode, samt instruksjoner om hvordan du kan bruke din egendefinerte funksjon i spørringen din.

Lag en egendefinert funksjon fra en tabellreferanseveiledning

Note

Følgende eksempel ble laget med skrivebordsopplevelsen som finnes i Power BI Desktop, og kan også følges med Power Query-opplevelsen i Excel for Windows.

Du kan følge dette eksempelet ved å laste ned eksempelfilene brukt i denne artikkelen fra følgende nedlastingslenke. For enkelhets skyld bruker denne artikkelen Folder-koblingen. For å lære mer om Mappe-koblingen, gå til Mappe. Målet med dette eksempelet er å lage en egendefinert funksjon som kan brukes på alle filene i den mappen før all data fra alle filene kombineres i én enkelt tabell.

Start med å bruke Folder Connector-opplevelsen for å navigere til mappen der filene dine befinner seg, og velg Transform Data eller Rediger. Disse stegene tar deg til Power Query-opplevelsen. Høyreklikk på den binære verdien du velger fra Innhold-feltet og velg alternativet Legg til som ny spørring . For dette eksempelet ble valget gjort for den første filen fra listen, som tilfeldigvis er filen april 2019.csv.

Skjermbilde av hvordan du velger en fil som din prøvefil.

Dette alternativet oppretter effektivt en ny spørring med et navigasjonssteg direkte til den filen som en binærfil, og navnet på denne nye spørringen er filstien til den valgte filen. Gi denne spørringen nytt navn til Eksempelfil.

Skjermbilde som viser den nye prøvefil-forespørselen.

Opprett en ny parameter med navnet Filparameter og typen binærfil. Bruk eksempelfil-spørringen som standardverdi og nåværende verdi.

Skjermbilde med filparameterverdiene fylt ut.

Note

Vi anbefaler at du leser artikkelen om parametere for bedre å forstå hvordan du oppretter og administrerer parametere i Power Query.

Egendefinerte funksjoner kan opprettes med hvilken som helst parametertype. Det er ikke noe krav om at noen egendefinert funksjon skal ha en binær parameter som parameter.

Den binære parametertypen vises kun i dialogmenyen ParametersType når du har en spørring som evalueres til en binærfil.

Det er mulig å lage en egendefinert funksjon uten en parameter. Dette sees ofte i situasjoner der en input kan utledes fra miljøet der funksjonen påkalles. For eksempel en funksjon som tar miljøets nåværende dato og tid, og lager en spesifikk tekststreng fra disse verdiene.

Høyreklikk på File Parameter fra Queries-panelet . Velg referansevalget .

Ta skjermbilde med Referanse-alternativet valgt for filparameteren.

Gi den nyopprettede spørringen nytt navn fra filparameter (2) til Transform Sample-fil.

Skjermbilde med den omdøpte Transform Sample-filforespørselen.

Høyreklikk på denne nye Transform Sample-filforespørselen og velg alternativet Lag funksjon .

Skjermbilde av Create-funksjonen som brukes for Transform Sample-filspørringen.

Denne operasjonen skaper effektivt en ny funksjon som kobler seg til Transform Sample-filspørringen . Alle endringer du gjør i Transform Sample-filspørringen blir automatisk replikert til din egendefinerte funksjon. Under opprettelsen av denne nye funksjonen, bruk Transform-filen som funksjonsnavn.

Skjermbilde fra Create-funksjonsvinduet for Transform-filen.

Etter at du har opprettet funksjonen, legg merke til at en ny gruppe opprettes for deg med navnet på funksjonen din. Denne nye gruppen inneholder:

  • Alle parametere som ble referert til i din Transform Sample-filspørring .
  • Din Transform Sample-filspørring , vanligvis kjent som eksempelsspørringen.
  • Din nyopprettede funksjon, i dette tilfellet Transform-filen.

Skjermbilde av funksjonsgruppen i Spørringspanelet.

Anvendelse av transformasjoner på en eksempelspørring

Med din nye funksjon opprettet, velg spørringen med navnet Transform Sample-fil. Denne spørringen er nå koblet til Transform-filfunksjonen , slik at eventuelle endringer i denne spørringen reflekteres i funksjonen. Denne forbindelsen er det som kalles konseptet med en eksempelssøk knyttet til en funksjon.

Den første transformasjonen som må skje for denne spørringen er en som tolker binærfilen. Du kan høyreklikke på binærfilen fra forhåndsvisningspanelet og velge CSV-alternativet for å tolke binærfilen som en CSV-fil.

Skjermbilde av den binære nedtrekksmenyen med CSV fremhevet.

Formatet på alle CSV-filene i mappen er det samme. De har alle en header som dekker de fire øverste radene. Kolonneoverskriftene er plassert i rad 5, og dataene starter fra rad 6 og nedover, som vist i neste bilde.

Skjermbilde av eksempel-CSV-dataene før behandling.

Det neste settet med transformasjonssteg som må anvendes på Transform Sample-filen er:

  1. Fjern de fire øverste radene—Denne handlingen fjerner radene som regnes som en del av overskriftsdelen av filen.

    Ta skjermbilde etter at de øverste radene er fjernet fra Transform Sample-filen.

    Note

    For å lære mer om hvordan du fjerner rader eller filtrerer en tabell etter radposisjon, gå til Filtrer etter radposisjon.

  2. Forfremmelsesoverskrifter—Overskriftene for din endelige tabell er nå i første rad i tabellen. Du kan promotere dem som vist i neste bilde.

    Skjermbilde etter første rad brukes som overskrifter.

Etter å ha promotert kolonneoverskriftene dine, legger Power Query som standard automatisk til et nytt Endret Type-steg som automatisk oppdager datatypene for hver kolonne. Din Transform Sample-filspørring ser ut som neste bildet.

Note

For å lære mer om hvordan du kan promotere og degradere overskrifter, gå til Promoter eller nedgrader kolonneoverskrifter.

Skjermbilde av det endelige transformasjonseksempel-spørsmålet.

Forsiktig! 

Transform-filfunksjonen din er avhengig av stegene utført i Transform Sample-filspørringen. Men hvis du prøver å manuelt endre koden for Transform-filfunksjonen , vil du bli møtt med en advarsel som lyder The definition of the function 'Transform file' is updated whenever query 'Transform Sample file' is updated. However, updates will stop if you directly modify function 'Transform file'.

Start en egendefinert funksjon som en ny kolonne

Med den egendefinerte funksjonen nå opprettet og alle transformasjonstrinnene integrert, kan du gå tilbake til den opprinnelige spørringen hvor du har listen over filer fra mappen (CSV-filer i dette eksempelet). Inne i fanen Legg til kolonne i båndet, velg Aktiver egendefinert funksjon fra Generell-gruppen . Inne i vinduet Anrop egendefinert funksjon , skriv inn Output Table som navnet på den nye kolonnen. Velg navnet på funksjonen din, Transform-fil, fra nedtrekksmenyen for Funksjonsspørring . Etter at du har valgt funksjonen fra nedtrekksmenyen, vises parameteren for funksjonen, og du kan velge hvilken kolonne fra tabellen som skal brukes som argument for denne funksjonen. Velg kolonnen Innhold som verdien / argumentet som skal sendes for filparameteren.

Skjermbilde med knappen Invoke Custom Function understreket med innstillingene i dialogen Invoke Custom Function.

Etter at du har valgt OK, opprettes en ny kolonne med navnet Output Table . Denne kolonnen har tabellverdier i sine celler, som vist i neste bilde. For enkelhets skyld, fjern alle kolonner fra denne tabellen unntatt Navn og Utdatatabell.

Skjermbilde med den egendefinerte funksjonen aktivert og kun Navn- og Utdatatabell-kolonnene igjen.

Note

For å lære mer om hvordan du velger eller fjerner kolonner fra en tabell, gå til Velg eller fjern kolonner.

Funksjonen din ble brukt på hver eneste rad i tabellen ved å bruke verdiene fra Innhold-kolonnen som argument for funksjonen din. Nå som dataene er transformert til formen du leter etter, kan du utvide kolonnen Utdatatabell ved å velge Utvid-ikonet. Ikke bruk noe prefiks for de utvidede kolonnene.

Skjermbilde av dialogen for utvidet utdatatabell med alle tabellkolonnene valgt.

Du kan verifisere at du har data fra alle filene i mappen ved å sjekke verdiene i kolonnen Navn eller Dato . I dette tilfellet kan du sjekke verdiene fra Dato-kolonnen , siden hver fil kun inneholder data for én måned fra et gitt år. Hvis du ser mer enn én, betyr det at du har kombinert data fra flere filer til én enkelt tabell.

Skjermbilde med dato-nedtrekksmenyen som bekrefter at den endelige tabellen inneholder data fra alle filene.

Note

Det du har lest så langt er i bunn og grunn den samme prosessen som skjer under Combine-filopplevelsen , men gjort manuelt.

Vi anbefaler at du også leser artikkelen om oversikt over Combine-filer og Combine-CSV-filer for å forstå bedre hvordan combine-filopplevelsen fungerer i Power Query og hvilken rolle egendefinerte funksjoner spiller.

Legg til ny parameter i eksisterende egendefinert funksjon

Tenk deg at det er et nytt krav i tillegg til det du allerede har bygget. Det nye kravet krever at før du kombinerer filene, filtrerer du dataene inni dem slik at de kun får radene der landet er lik Panama.

For å oppfylle dette kravet, opprett en ny parameter kalt Market med tekstdatatypen. For nåværende verdi, skriv inn verdien Panama.

Skjermbilde av den nye parameteren med de nødvendige verdiene.

Med denne nye parameteren, velg Transform Sample-filspørringen og filtrer Country-feltet ved å bruke verdien fra Market-parameteren .

Skjermbilde av filterrad-dialogen med kolonnen Filter Land ved bruk av den nye Markedsparameteren.

Note

For å lære mer om hvordan du filtrerer kolonner etter verdier, gå til Filter values.

Å anvende dette nye steget på spørringen din oppdaterer automatisk Transform-filfunksjonen , som nå krever to parametere basert på de to parameterne Transform Sample-filen din bruker.

Skjermbilde av funksjonen er nå oppdatert med to parametere.

Men CSV-filspørringen har et advarselsskilt ved siden av. Nå som funksjonen din er oppdatert, krever den to parametere. Så steget hvor du kaller funksjonen resulterer i feilverdier, siden bare ett av argumentene ble sendt til Transform-filfunksjonen under steget Invoked Custom Function.

Skjermbilde av feilmeldingen som vises etter en funksjonsoppdatering.

For å rette feilene, dobbeltklikk på Invoked Custom Function i Applied Steps for å åpne vinduet Invoke Custom Function . I Markedsparameteren , skriv inn verdien Panama manuelt.

Skjermbilde av de oppdaterte argumentene for egendefinerte funksjoner.

Du kan nå gå tilbake til Utvidet utdatatabell i de anvendte trinnene. Sjekk spørringen din for å bekrefte at kun rader der land er lik Panama vises i det endelige resultatsettet til CSV Files-spørringen .

Skjermbilde av den endelige utdatatabellen etter oppdaterte argumenter.

Lag en egendefinert funksjon fra et gjenbrukbart logisk stykke

Hvis du har flere spørringer eller verdier som krever samme sett med transformasjoner, kan du lage en egendefinert funksjon som fungerer som et gjenbrukbart stykke logikk. Senere kan denne egendefinerte funksjonen aktiveres mot spørringene eller verdiene du velger. Denne tilpassede funksjonen kan spare deg for tid og hjelpe deg med å administrere settet med transformasjoner på et sentralt sted, som du kan endre når som helst.

For eksempel, forestill deg en spørring som har flere koder som en tekststreng, og du vil lage en funksjon som dekoder disse verdiene, som i følgende eksempeltabell:

kode
PTY-CM1090-LAX
LAX-CM701-PTY
PTY-CM4441-MIA
MIA-UA1257-LAX
LAX-XY2842-MIA

Skjermbilde av den opprinnelige listen over koder.

Du starter med å ha en parameter som har en verdi som fungerer som et eksempel. I dette tilfellet er det verdien PTY-CM1090-LAX.

Skjermbilde av dialogboksen Behandle parametere med kodeverdiene for eksempelparameteren angitt.

Fra denne parameteren oppretter du en ny spørring der du bruker transformasjonene du trenger. I dette tilfellet vil du dele koden PTY-CM1090-LAX i flere komponenter:

  • Opprinnelse = PTY
  • Mål = LAX
  • Flyselskap = CM
  • FlightID = 1090

Skjermbilde av eksempeltransformeringsspørringen med hver del i sin egen kolonne.

Følgende M-kode demonstrerer dette settet av transformasjoner.

let
    Source = code,
    SplitValues = Text.Split( Source, "-"),
    CreateRow = [Origin= SplitValues{0}, Destination= SplitValues{2}, Airline=Text.Start( SplitValues{1},2), FlightID= Text.End( SplitValues{1}, Text.Length( SplitValues{1} ) - 2) ],
    RowToTable = Table.FromRecords( {  CreateRow } ),
    #"Changed Type" = Table.TransformColumnTypes(RowToTable,{{"Origin", type text}, {"Destination", type text}, {"Airline", type text}, {"FlightID", type text}})
in
    #"Changed Type"

Note

For å lære mer om formelspråket Power Query M, gå til Power Query M formelspråk.

Du kan deretter transformere den spørringen til en funksjon ved å høyreklikke på spørringen og velge Opprett funksjon. Til slutt kan du bruke din egendefinerte funksjon i hvilken som helst av spørringene eller verdiene dine, som vist i neste bilde.

Skjermbilde av listen over koder med aktiver egendefinerte funksjonsverdier fylt ut.

Etter noen flere transformasjoner kan du se at du har nådd ønsket utdata og brukt logikken for en slik transformasjon fra en egendefinert funksjon.

Skjermbilde som viser den endelige utdataspørringen etter å ha påkalt en egendefinert funksjon.