Läs på engelska

Dela via


Använda anpassade funktioner

Om du befinner dig i en situation där du behöver tillämpa samma uppsättning transformeringar på olika frågor eller värden kan det vara fördelaktigt att skapa en anpassad Power Query-funktion som kan återanvändas så många gånger som du behöver. En anpassad Power Query-funktion är en mappning från en uppsättning indatavärden till ett enda utdatavärde och skapas från interna M-funktioner och operatorer.

Även om du kan skapa en egen anpassad Power Query-funktion manuellt med hjälp av kod enligt beskrivningen i Förstå Power Query M-funktioner, erbjuder Power Query-användargränssnittet funktioner för att påskynda, förenkla och förbättra processen för att skapa och hantera en anpassad funktion.

Den här artikeln fokuserar på den här upplevelsen, som endast tillhandahålls via Power Query-användargränssnittet och hur du får ut mesta möjliga av den.

Viktigt

Den här artikeln beskriver hur du skapar en anpassad funktion med Power Query med hjälp av vanliga transformeringar som är tillgängliga i Power Query-användargränssnittet. Den fokuserar på de grundläggande begreppen för att skapa anpassade funktioner och länkar till ytterligare artiklar i Power Query-dokumentationen för mer information om specifika transformeringar som refereras till i den här artikeln.

Skapa en anpassad funktion från en tabellreferens

Anteckning

Följande exempel skapades med skrivbordsmiljön som finns i Power BI Desktop och kan också följas med hjälp av Power Query-upplevelsen som finns i Excel för Windows.

Du kan följa med i det här exemplet genom att ladda ned exempelfilerna som används i den här artikeln från följande nedladdningslänk. För enkelhetens skull använder den här artikeln mappanslutningsappen. Mer information om mappanslutningsappen finns i Mapp. Målet med det här exemplet är att skapa en anpassad funktion som kan tillämpas på alla filer i mappen innan du kombinerar alla data från alla filer till en enda tabell.

Börja med att använda mappanslutningsfunktionen för att navigera till mappen där filerna finns och välj Transformera data eller Redigera. De här stegen tar dig till Power Query-upplevelsen. Högerklicka på det binära värdet i fältet Innehåll och välj alternativet Lägg till som ny fråga . I det här exemplet gjordes valet för den första filen från listan, som råkar vara filen April 2019.csv.

Skärmbild av hur du väljer en fil som ska vara exempelfilen.

Det här alternativet skapar effektivt en ny fråga med ett navigeringssteg direkt till filen som binär, och namnet på den nya frågan är filsökvägen till den valda filen. Byt namn på den här frågan till exempelfil.

Skärmbild som visar den nya exempelfilfrågan.

Skapa en ny parameter med namnet Filparameter och typ av binär. Använd exempelfilfrågan som standardvärde och aktuellt värde.

Skärmbild med filparametervärdena ifyllda.

Anteckning

Vi rekommenderar att du läser artikeln om parametrar för att bättre förstå hur du skapar och hanterar parametrar i Power Query.

Anpassade funktioner kan skapas med valfri parametertyp. Det finns inget krav på att någon anpassad funktion ska ha en binär som en parameter.

Den binära parametertypen visas bara i listrutan Parametrar i dialogrutan Typ när du har en fråga som utvärderas till en binär fil.

Det går att skapa en anpassad funktion utan en parameter. Detta visas ofta i scenarier där indata kan härledas från miljön där funktionen anropas. Till exempel en funktion som tar miljöns aktuella datum och tid och skapar en specifik textsträng från dessa värden.

Högerklicka på Filparameter från fönstret Frågor. Välj alternativet Referens.

Skärmbild med alternativet Referens valt för filparametern.

Byt namn på den nyligen skapade frågan från Filparameter (2) till Transformera exempelfil.

Skärmbild med den omdöpta transformeringsexempelfilfrågan.

Högerklicka på den här nya transformeringsexempelfilfrågan och välj alternativet Skapa funktion .

Skärmbild av alternativet Skapa funktion som används för filfrågan Transformera exempelfil.

Den här åtgärden skapar effektivt en ny funktion som länkar till filfrågan Transformera exempel. Alla ändringar som du gör i transformeringsexempelfilfrågan replikeras automatiskt till din anpassade funktion. När du skapar den nya funktionen använder du Transformeringsfilen som funktionsnamn.

Skärmbild av fönstret Skapa funktion för transformeringsfilen.

När du har skapat funktionen ser du att en ny grupp har skapats åt dig med namnet på din funktion. Den här nya gruppen innehåller:

  • Alla parametrar som refererades till i din transformeringsexempelfilfråga .
  • Din transformeringsexempelfilfråga , som ofta kallas exempelfråga.
  • Din nyligen skapade funktion, i det här fallet Transformera fil.

Skärmbild av funktionsgruppen i fönstret Frågor.

Tillämpa transformeringar på en exempelfråga

När den nya funktionen har skapats väljer du frågan med namnet Transformera exempelfil. Den här frågan är nu länkad till funktionen Transformera fil , så alla ändringar som görs i den här frågan återspeglas i funktionen. Den här anslutningen kallas begreppet för en exempelfråga som är länkad till en funktion.

Den första omvandlingen som måste ske med den här frågan är en som tolkar binärfilen. Du kan högerklicka på binärfilen från förhandsgranskningsfönstret och välja alternativet CSV för att tolka binärfilen som en CSV-fil.

Skärmbild av den binära nedrullningsbara menyn med CSV framhävt.

Formatet för alla CSV-filer i mappen är detsamma. De har alla en rubrik som sträcker sig över de första fyra raderna. Kolumnrubrikerna finns på rad 5 och data börjar från rad 6 nedåt, som visas i nästa bild.

Skärmbild av CSV-exempeldata före bearbetning.

Nästa uppsättning transformeringssteg som måste tillämpas på transformeringsexempelfilen är:

  1. Ta bort de fyra översta raderna – Den här åtgärden tar bort de rader som anses vara en del av rubrikavsnittet i filen.

    Skärmbild när de översta raderna har tagits bort från transformeringsexempelfilen.

    Anteckning

    Om du vill veta mer om hur du tar bort rader eller filtrerar en tabell efter radposition går du till Filtrera efter radposition.

  2. Flytta upp rubriker – Rubrikerna för den slutliga tabellen finns nu på den första raden i tabellen. Du kan höja upp dem på det sätt som visas i nästa bild.

    Skärmbild efter att den första raden har använts som rubriker.

När du har befordrat dina kolumnrubriker lägger Power Query som standard automatiskt till ett nytt steg av typen Ändrad som automatiskt identifierar datatyperna för varje kolumn. Din transformeringsexempelfilfråga ser ut som nästa bild.

Anteckning

Om du vill veta mer om hur du höjer upp och degraderar rubriker går du till Flytta upp eller degradera kolumnrubriker.

Skärmbild av den slutliga exempelfrågan för transformering.

Varning

Funktionen Transformera fil förlitar sig på de steg som utförs i transformeringsexempelfilfrågan. Men om du försöker ändra koden manuellt för funktionen Transformera fil får du en varning som läser 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'.

Anropa en anpassad funktion som en ny kolumn

När den anpassade funktionen nu har skapats och alla transformeringssteg har införlivats kan du gå tillbaka till den ursprungliga frågan där du har listan över filer från mappen (CSV-filer i det här exemplet). På fliken Lägg till kolumn i menyfliksområdet väljer du Anropa anpassad funktion från gruppen Allmänt . I fönstret Anropa anpassad funktion anger du Utdatatabell som nytt kolumnnamn. Välj namnet på din funktion, Transformera fil, i listrutan Funktionsfråga . När du har valt funktionen i den nedrullningsbara menyn visas parametern för funktionen och du kan välja vilken kolumn från tabellen som ska användas som argument för den här funktionen. Välj kolumnen Innehåll som det värde/argument som ska skickas för filparametern.

Skärmbild med knappen Anropa anpassad funktion framhävd med inställningarna i dialogrutan Anropa anpassad funktion.

När du har valt OK skapas en ny kolumn med namnet Utdatatabell . Den här kolumnen har tabellvärden i sina celler, som visas i nästa bild. För enkelhetens skull tar du bort alla kolumner från den här tabellen utom Namn och utdatatabell.

Skärmbild med den anpassade funktionen anropad och endast kolumnerna Namn och Utdatatabell återstår.

Anteckning

Om du vill veta mer om hur du väljer eller tar bort kolumner från en tabell går du till Välj eller ta bort kolumner.

Funktionen tillämpades på varje rad från tabellen med värdena från kolumnen Innehåll som argument för din funktion. Nu när data omvandlas till den form som du letar efter kan du expandera kolumnen Utdatatabell genom att välja ikonen Expandera. Använd inget prefix för de expanderade kolumnerna.

Skärmbild av dialogrutan expanderad utdatatabell med alla tabellkolumner markerade.

Du kan kontrollera att du har data från alla filer i mappen genom att kontrollera värdena i kolumnen Namn eller Datum . I det här fallet kan du kontrollera värdena från kolumnen Datum , eftersom varje fil endast innehåller data för en månad från ett visst år. Om du ser fler än en innebär det att du har kombinerat data från flera filer till en enda tabell.

Skärmbild med listrutan datum som verifierar att den slutliga tabellen innehåller data från alla filer.

Anteckning

Det du har läst hittills är i grunden samma process som sker under upplevelsen Kombinera filer , men som görs manuellt.

Vi rekommenderar att du också läser artikeln om Översikt över Kombinera filer och Kombinera CSV-filer för att ytterligare förstå hur kombinationsfiler fungerar i Power Query och vilken roll anpassade funktioner spelar.

Lägga till ny parameter i befintlig anpassad funktion

Tänk dig att det finns ett nytt krav utöver det du har skapat för närvarande. Det nya kravet kräver att du filtrerar data inuti dem innan du kombinerar filerna för att bara hämta de rader där landet är lika med Panama.

Skapa en ny parameter med namnet Market med textdatatypen för att göra det här kravet. För aktuellt värde anger du värdet Panama.

Skärmbild av den nya parametern med nödvändiga värden.

Med den här nya parametern väljer du filfrågan Transformera exempel och filtrerar fältet Land med hjälp av värdet från parametern Market .

Skärmbild av dialogrutan filterrader med kolumnen Filterland med den nya market-parametern.

Anteckning

Mer information om hur du filtrerar kolumner efter värden finns i Filtrera värden.

Om du tillämpar det här nya steget på din fråga uppdateras automatiskt funktionen Transformera fil, som nu kräver två parametrar baserat på de två parametrar som transformeringsexempelfilen använder.

Skärmbild av funktionen som nu har uppdaterats med två parametrar.

Men CSV-filfrågan har ett varningstecken bredvid sig. Nu när funktionen har uppdaterats krävs två parametrar. Steget där du anropar funktionen resulterar alltså i felvärden eftersom endast ett av argumenten skickades till funktionen Transformera fil under steget Anropad anpassad funktion .

Skärmbild av felmeddelandet som visas efter en funktionsuppdatering.

Om du vill åtgärda felen dubbelklickar du på Anropad anpassad funktion i fönstret Tillämpade steg för att öppna fönstret Anropa anpassad funktion . I parametern Market anger du värdet Panama manuellt.

Skärmbild av de uppdaterade argumenten för den anpassade funktionen som anropas.

Nu kan du återgå till expanderad utdatatabell i tillämpade steg. Kontrollera din fråga för att verifiera att endast rader där Land är lika med Panama visas i den slutliga resultatuppsättningen för CSV Files-frågan.

Skärmbild av den slutliga utdatatabellen efter uppdaterade argument.

Skapa en anpassad funktion från en återanvändbar logik

Om du har flera frågor eller värden som kräver samma uppsättning transformeringar kan du skapa en anpassad funktion som fungerar som en återanvändbar logik. Senare kan den här anpassade funktionen anropas mot valfria frågor eller värden. Den här anpassade funktionen kan spara tid och hjälpa dig att hantera din uppsättning transformeringar på en central plats, som du kan ändra när som helst.

Tänk dig till exempel en fråga som har flera koder som en textsträng och du vill skapa en funktion som avkodar dessa värden, som i följande exempeltabell:

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

Skärmbild av den ursprungliga listan med koder.

Du börjar med att ha en parameter som har ett värde som fungerar som ett exempel. I det här fallet är det värdet PTY-CM1090-LAX.

Skärmbild av dialogrutan Hantera parametrar med de exempelparameterkodvärden som angetts.

Från den parametern skapar du en ny fråga där du tillämpar de transformeringar som du behöver. I det här fallet vill du dela upp koden PTY-CM1090-LAX i flera komponenter:

  • Origin = PTY
  • Mål = LAX
  • Flygbolag = CM
  • FlightID = 1090

Skärmbild av exempeltransformeringsfrågan med varje del i sin egen kolumn.

Följande M-kod visar den uppsättningen transformeringar.

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"

Anteckning

Mer information om formelspråket Power Query M finns i Formelspråket Power Query M.

Du kan sedan omvandla frågan till en funktion genom att högerklicka på frågan och välja Skapa funktion. Slutligen kan du anropa din anpassade funktion i någon av dina frågor eller värden, som du ser i nästa bild.

Skärmbild av listan med koder med värdena För att anropa anpassad funktion ifyllda.

Efter några fler transformeringar kan du se att du har nått önskade utdata och tillämpat logiken för en sådan transformering från en anpassad funktion.

Skärmbild som visar den slutliga utdatafrågan när du har anropat en anpassad funktion.