Avpivot flera kolumner dynamiskt i Lucky Templates

I den här självstudien kommer vi att återkomma till ett ämne som jag behandlade tidigare om hur man avpivoterar flera kolumner i Power Query med List.Zip. En LuckyTemplates-medlem frågade omom hur man gör den metoden dynamisk. Du kan se hela videon av denna handledning längst ner på den här bloggen.

Jag har märkt detta som avancerad eftersom vi kommer att skriva ett antal M-funktioner och några av dem kan till och med vara nya för dig.

Med det sagt, låt oss gå över till Power Query.

Innehållsförteckning

Data i tabellformat

Som du kan se har dessa data redan omvandlats till ett lämpligt tablettformat som lämpar sig för analys. Den processen, även om den är mycket viktig, kommer inte att tas upp här, men vi kommer kortfattat gå igenom varje steg.

Avpivot flera kolumner dynamiskt i Lucky Templates

I källsteget ser vi en konstant upprepning av värdeparen, som är timmarna och kontakterna för vart och ett av ovanstående attribut.

Avpivot flera kolumner dynamiskt i Lucky Templates

I Tillämpade steg kan du se resten av stegen. Vi tog bort några översta rader, tog bort de tomma kolumnerna, rensade upp våra textvärden och fyllde i dem. Sedan transponerade vi våra data, tog bort den tomma posten, slog samman kolumn ett och två, rengjorde våra textvärden igen och transponerade tillbaka våra data.

Vi skapade ett anpassat steg, som vi kommer att undersöka mer i detalj senare, extraherade värden från vår lista och ändrade sedan till slut typen.

Avpivot flera kolumner dynamiskt i Lucky Templates

Låt oss titta på hela koden. Det vi är intresserade av här är List.Zip -funktionen. Kort sammanfattning, det tar en enda lista som en och returnerar sedan en lista. Som ett resultat ser vi att denna enda lista i det här fallet innehåller tre separata listor.

Om vi ​​undersöker den första listan innehåller den hårdkodade attributnamn, bara textvärden som skrevs in. Den andra listan innehåller hårdkodade kolumnreferenser för timvärdena. Den slutliga listan innehåller hårdkodade kolumnreferenser för kontaktvärdena.

List.Zip tar sedan ett element från var och en av dessa tre listor och kombinerar dem baserat på deras placering i en ny lista. Till exempel, varje första element från dessa listor kombineras till en ny lista. Samma sak händer för alla värden som finns på andra plats i den listan, och så vidare.

Hårdkodade värden kan vara oroliga om attributen sannolikt inte kommer att förändras över tiden. Så om nästa gång inte alla föremål finns eller nya föremål finns, kan du få problem.

Ändra kod för att avpivotera flera kolumner dynamiskt

Så hur gör vi detta dynamiskt?

Det första jag gör är att gå igenom koden för att se om det finns en plats där vi kan plocka upp dessa attributvärden utan att behöva designa ett separat steg för att åstadkomma det. Så vi kommer att gå tillbaka genom koden, och det här RemoveNull- steget är perfekt.

Avpivot flera kolumner dynamiskt i Lucky Templates

Du kan se att den listar alla attributvärden här i kolumn ett. Vi kan använda användargränssnittet för att extrahera dem.

Avpivot flera kolumner dynamiskt i Lucky Templates

Så högerklicka på den rubriken och välj Lägg till som ny fråga nedanför .

Avpivot flera kolumner dynamiskt i Lucky Templates

Vi får den här listan och det är goda nyheter eftersom vi vill ersätta den hårdkodade listan vi såg tidigare med den dynamiska. Allt vi behöver göra är att göra i ordning värderingarna.

Avpivot flera kolumner dynamiskt i Lucky Templates

Låt oss börja med att ta bort dessa nollor. Så inuti formelfältet lägger vi till en List.RemoveNulls . Som du kan se nu upprepas alla objekt och det är på grund av värdeparen. Det är listat en gång för timmarna.

Avpivot flera kolumner dynamiskt i Lucky Templates

Och sedan igen, för kontakterna, för att ta bort dessa dubbletter kan vi lägga till en List.Distinct . Nu har vi skapat den här logiken och allt vi behöver göra är att kopiera den och klistra tillbaka den i vår exempelfråga.

Avpivot flera kolumner dynamiskt i Lucky Templates

I exempelfrågan öppnar du Advanced Editor och skapar ett nytt variabelnamn. Låt oss kalla det AttributeList . Sedan klistrar vi in ​​koden och sätter ett kommatecken.

Avpivot flera kolumner dynamiskt i Lucky Templates

Låt oss nu gå tillbaka till vårt anpassade steg. Inuti List.Zip kan vi ersätta den första listan med vårt variabelnamn (AttributeList).

Avpivot flera kolumner dynamiskt i Lucky Templates

Låt oss nu titta närmare på den andra listan. Vi vet att det refererar till kolumnnamn, och var och en av dessa kolumnnamn börjar med samma attribut som vi redan har i den listan följt av ett mellanslag och en text "timmar".

Vi behöver bara lägga till ett suffix till varje objekt. Så låt oss gå tillbaka ett steg och lägga till en anpassad kolumn för att skapa lite logik.

Avpivot flera kolumner dynamiskt: Lägga till anpassad kolumnlogik

Det är bara en tillfällig kolumn, så vi behöver inte ge den ett riktigt namn. Vi tar bort det när vi är klara.

Avpivot flera kolumner dynamiskt i Lucky Templates

För att ändra värdena i en lista kan vi använda funktionen List.Transform . Vi måste omvandla värdena i vår AttributeList , så jag ska klistra in det.

Här i rubrikerna ser vi att textvärdena börjar med stor bokstav, och sedan är resten gemener. Vårt attribut innehåller bara ett ord med versaler, så vi måste omvandla det textvärdet också. Och vi kan använda understrecket för att komma åt varje punkt i listan och vi lägger till det suffixet.

Med det får vi ett listvärde i vår kolumn. Det spelar ingen roll vilken du väljer, utan klicka bara åt sidan i det vita utrymmet i någon av dem här.

Avpivot flera kolumner dynamiskt i Lucky Templates

Nedanför sidan ser vi en förhandsvisning av listan som vi har skapat. Så du ser att vi har de kolumnrubrikerna som nu är korrekt kapslade så att de matchar kolumnrubrikerna vi ser här med den här listan.

Vi har nu möjlighet att identifiera de fält från vår post som vi vill komma åt. Så låt oss öppna vår anpassade kolumndialogruta igen och lägga till Record.SelectFields . Den vill ha en post som en post, så vi kan använda det understrecket för att komma åt den aktuella posten som vi är på. Och sedan har vi gett den en lista med alla dessa fältnamn, så lägg till en avslutande parentes och tryck på OK .

Avpivot flera kolumner dynamiskt i Lucky Templates

Så vi har ingen lista längre, men vi får nu ett rekord. Låt oss klicka åt sidan i det vita utrymmet igen för att se innehållet i den posten. Här ser vi att den listar postfältnamnen och postfältvärdena.

Avpivot flera kolumner dynamiskt i Lucky Templates

Men vi är bara intresserade av rekordfältsvärdena, så vi måste extrahera det. Låt oss gå tillbaka till vår anpassade kolumndialogruta och lägga till Record.FieldsValues ​​.

Avpivot flera kolumner dynamiskt i Lucky Templates

Vi får nu en lista igen och inte längre ett rekord. Vi klickar bort åt sidan i det vita utrymmet igen, och du ser att vi nu har en lista med just dessa värden. Så det ser bra ut.

Avpivot flera kolumner dynamiskt i Lucky Templates

Låt oss kopiera hela logiken som vi har skapat, förutom de sista avslutande parenteserna. Och nu kan vi ta bort vår tillfälliga kolumn eftersom vi inte längre behöver den.

Avpivot flera kolumner dynamiskt i Lucky Templates

På vår formelfält väljer vi vår andra lista och ersätter den med vår logik.

Avpivot flera kolumner dynamiskt i Lucky Templates

För att skapa en lista med postfältens värden för kontakterna behöver vi bara ändra suffixet. Så vi kan välja den sista listan också och klistra in vår logik.

Avpivot flera kolumner dynamiskt i Lucky Templates

Sedan, istället för timmar , låt oss ändra detta till kontakter .

Avpivot flera kolumner dynamiskt i Lucky Templates

Inga fel och det ser bra ut. Detta är nu en dynamisk lösning för att avpivotera flera kolumner.

Avpivot flera kolumner dynamiskt i Lucky Templates




Slutsats

Det är så du avpivoterar flera kolumner dynamisktmed List.Zip.

Om ett nytt attribut kommer in kommer det automatiskt att hämtas av AttributeList. Och när ett föremål inte längre finns, kommer det inte att finnas på den listan.

Jag hoppas att du har njutit av den här. Titta på hela videon nedan för mer information om den här handledningen och kolla in länkarna nedan för mer innehåll kring upphäva flera kolumner i LuckyTemplates.

Med vänliga hälsningar

Melissa


Upptäck unika insikter med LuckyTemplates TOPN-funktion

Upptäck unika insikter med LuckyTemplates TOPN-funktion

Den här bloggen innehåller LuckyTemplates TOPN DAX-funktion, som gör att du kan få unika insikter från dina data, vilket hjälper dig att fatta bättre marknadsföringsbeslut.

Datamodellering i LuckyTemplates med hjälp av stödtabeller

Datamodellering i LuckyTemplates med hjälp av stödtabeller

Lär dig några fantastiska analytiska tekniker som vi kan göra för datamodellering i LuckyTemplates med hjälp av DAX-stödtabeller.

Avancerad DAX för LuckyTemplates: Implementering av rankningslogik över unika insikter

Avancerad DAX för LuckyTemplates: Implementering av rankningslogik över unika insikter

Här dyker vi in ​​i LuckyTemplates Advanced DAX och implementerar rankningslogik för att få en mycket unik insikt. Jag visar också upp måttförgrening i det här exemplet.

LuckyTemplates What-If-parameterfunktion

LuckyTemplates What-If-parameterfunktion

Den här bloggen introducerar den nya funktionen i LuckyTemplates, analysparametern What-If. Du kommer att se hur det gör allt snabbt och enkelt för din scenarioanalys.

Använd LuckyTemplates Mät förgreningar för att kontrollera om dina marginaler ökar när intäkterna växer

Använd LuckyTemplates Mät förgreningar för att kontrollera om dina marginaler ökar när intäkterna växer

Lär dig hur du avgör om din intäktstillväxt är bra genom att kontrollera om dina marginaler ökade med hjälp av LuckyTemplates mäter förgrening.

LuckyTemplates parametrar via frågeredigerare

LuckyTemplates parametrar via frågeredigerare

Lär dig och förstå hur du kan skapa och använda LuckyTemplates-parametrar som är en kraftfull funktion i frågeredigeraren.

Runda stapeldiagram – En visualisering för din instrumentpanel

Runda stapeldiagram – En visualisering för din instrumentpanel

Denna handledning kommer att diskutera hur man skapar ett runt stapeldiagram med Charticulator. Du kommer att lära dig hur du designar dem för din LuckyTemplates-rapport.

PowerApps funktioner och formler | En introduktion

PowerApps funktioner och formler | En introduktion

Lär dig hur du använder PowerApps funktioner och formler för att förbättra funktionaliteten och ändra ett beteende i vår Power Apps canvas-app.

Pipe In R: Anslutningsfunktioner med Dplyr

Pipe In R: Anslutningsfunktioner med Dplyr

I den här handledningen kommer du att lära dig hur du kopplar ihop funktioner med hjälp av dplyr-röroperatorn i programmeringsspråket R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX från LuckyTemplates låter dig returnera rankningen av ett specifikt nummer i varje tabellrad som utgör en del av en lista med nummer.