Dette scenarie omhandler eksport af rådata, der får data til at spredes ind i et ukendt antal tilstødende kolonner. Når du ser på eksemplet, kan du se, at beskrivelsen er væltet over i kolonne 4, og beskrivelse 2 er blevet delt over to tilstødende kolonner. Men det vil ikke altid være tilfældet. I den næste cyklus kan dette antal kolonner ændre sig.
Før vi hopper ind i løsningen, lad os undersøge M-koden, som Power Query genererer, når du flette kolonner.
Der er et par måder at flette kolonner på. Den ene er at vælge både beskrivelseskolonnen og trykke på enten shift-tasten eller kontroltasten og derefter vælge kolonne 4 også. Højreklik derefter og vælg Flet kolonner .
Eller påfanen, vælg flet kolonner . Og denne dialogboks vises, som giver dig mulighed for at vælge separatoren.
I pop op-boksen skal du vælge Tab, og du kan indtaste et nyt kolonnenavn. I dette tilfælde kaldte jeg det Beskrivelse.
I formellinjen ser vi den M-kode, som dette transformationstrin har skabt.
Hvis formellinjen ikke er synlig på din skærm, skal du gå til fanen Vis og slå den til.
Så den funktion, som Power Query bruger til at flette kolonner, er Table.CombinedColumns . Den første parameter, der skal til, er en tabel. Denne tabel returneres af det forrige trin i vores kode, så i de anvendte trin vil du se, at dette kaldes Source .
Derefter hårdkodede den kolonnenavnene på en liste. Her ser du listeinitialiserere, og mellem in-text-værdier, kolonnenavnsbeskrivelsen og kolonnenavnet kolonne 4. Derefter kalder den en anden M-funktion til at kombinere tekstværdierne i disse kolonner.
Og endelig sender den det nye kolonnenavn som en tekst, så vi kan justere det.
Så hvis vi ønsker, at denne funktion dynamisk skal flette et skiftende antal kolonner, bliver vi nødt til at ændre den anden parameterværdi, der nu indeholder en liste med hårdkodede kolonnenavne.
Fletning af et skiftende antal kolonner i en Power-forespørgselstabel
Jeg går tilbage til min rådataforespørgsel, og hvis vi ser nærmere på kolonnenavnene, ser vi, at hver af spildkolonnerne er anonyme. De har ikke egennavne, men de starter alle med tekstkolonnen efterfulgt af et tal. Lad os se, om vi kan bruge det. Først opretter jeg en reference ved at højreklikke her og vælge Reference .
Og for at få kolonnenavnene inde i formellinjen kan jeg tilføje Table.ColumnNames . Denne funktion returnerer en liste med alle kolonnenavnene fra den tabel. Lad os gøre dette tilbage til en tabel ved at klikke på Til tabel .
Klik på OK i denne pop op-boks.
Derefter, på fanen Tilføj kolonne , vælger jeg Formater og derefter Trim .
Nu er dette ikke en transformation, som jeg ønsker at udføre, men det genererer størstedelen af M-koden for mig. Alt jeg skal gøre er.
Så inde i formellinjen, i stedet for Text.Trim , kan vi sige om Text.StartsWith , og derefter pege på vores kolonne 1 , så kopierer jeg det med det samme. Den vil have den tekst, vi leder efter, så det bliver Column. Så hvis det starter med en tekstkolonne, vil vi have "nul" - for alt andet vil vi have, hvad der er i kolonne 1. Vi kan også omdøbe den kolonne, så inde i formellinjen, i stedet for Trim, lad os kalde det GroupColumn .
Nu skal vi bare udfylde dem med disse værdier. Så jeg højreklikker på min overskrift, vælger Fyld og Ned .
Så næste gang data kommer ind, og antallet af kolonner har ændret sig, vil denne gruppe automatisk samle det op.
Lad os omdøbe denne forespørgsel, jeg vil kalde det kolonnegrupper.
Lad os sikre os, at dens belastning er blevet deaktiveret, fordi dette kun er en understøttende forespørgsel.
Jeg kan henvise til denne understøttende forespørgsel, og jeg omdøber den senere. Lad os lade det ligge for nu. Så hvis du husker det, startede vi med at slå to kolonner sammen, og det skabte en hårdkodet liste med kolonnenavnene , men nu kan vi filtrere på Beskrivelse i vores GroupColumn .
Så hvis vi laver det filter på beskrivelsen inde i kolonne 1, får vi de kolonner, der opfylder disse kriterier.
Dette er dog en tabel og ikke en liste.fordi vi skal inkludere disse kolonner i vores fletteoperation. Så for at gøre det kan vi højreklikke på vores kolonne 1-overskrift og vælge Drill Down .
Og nu får vi en liste. Så lad os give denne forespørgsel et rigtigt navn ( ListDescr ), og lad os kontrollere, om den er deaktiveret fra indlæsning.
Nu kan vi gå tilbage til vores resultatforespørgsel og erstatte det andet argument her med vores dynamiske liste. Så her kan vi referere til vores ListDescr .
Lad os også gentage dette for beskrivelse 2. Jeg går til min ColumnGroups-forespørgsel. Jeg opretter en anden reference og vælger de kolonner, jeg har brug for. Så filtrerer jeg beskrivelse 2, som returnerer disse tre kolonner. Jeg højreklikker på min header og vælger Drill Down og omdøber også denne forespørgsel ( ListDescr2 ).
Jeg går derefter tilbage til min resultatforespørgsel, vælger kolonnen Beskrivelse2 og trykker på enten skift eller kontrol for også at vælge den næste kolonne (kolonne2). Jeg højreklikker på overskriften og vælger.
I pop op-boksen vælger jeg Tab som skilletegn, og jeg kalder dette Beskrivelse2.
Jeg vil bare ændre kolonnenavnet her på formellinjen. Jeg vil også ændre den hårdkodede liste fra den liste, vi lige har oprettet. Og nu har dette, som du kan se, også hentet kolonne 8, som vi tidligere udelukkede.
Konklusion
I denne blog har jeg vist dig, hvordan du bruger M-koder i Power Query til dynamisk at flette kolonner. Det er ikke svært, så længe du er fortrolig med, hvordan Power Query fungerer, og hvilke M-koder du skal bruge.
Jeg håber, du har nydt denne. Tjek venligst nedenstående links for mere relateret indhold.