Datensätze in Tabellenform bringen

Prolog

Vor­ab ange­merkt: Ich habe mehrfach hin und her über­legt, ob ich diesen Beitrag über­haupt in meinem Blog veröf­fentlichen soll und falls ja, ob ich den Hin­weis auf das Forum set­zen soll oder nicht. Let­z­tendlich habe ich mich bei­de Male für ein „Ja” entsch­ieden, denn ein­er­seits denke ich, dass solch eine Lösung hier am Blog recht gut aufge­hoben ist und ander­er­seits ist es aus mein­er Sicht eine ethis­che Pflicht, den Ursprung ein­er Idee (hier: Fragestel­lung) zu nen­nen. Dass ich keinen Link zu dem Forum set­ze liegt daran, dass die Diskus­sion Wege genom­men hat, die nicht meinen Vorstel­lun­gen entsprechen. Und ich habe den Titel ein­fach ein­mal so über­nom­men, wie er in den (diversen) Foren ver­wen­det wor­den ist. Mir fiel auch kein besser­er ein, der kurz genug wäre.  😎 

▲ nach oben …

  Wis­sens­stand: Lev­el 1 ⇒ Ein­steiger in PQ, keine/kaum Erfahrung   

Die Aufgabe

Wie schon erwäh­nt, diese Auf­gabe ist eine Fragestel­lung aus einem Forum. Ich möchte auch nicht den Text umfor­mulieren, darum füge ich hier den Inhalt des ersten Beitrags (also der ursprünglichen Frage) dieses Threads ein:

Hal­lo zusam­men
Ihr kön­nt meine aktuelle Her­aus­forderung bes­timmt spie­lend leicht lösen. Ich weiss man kann dies im Excel han­deln, aber ich finde ein­fach nicht die passende Lösung:

Prob­lem­stel­lung:
Ich habe tausende Daten­sätze, die ich aus einem Textfile in Excel importiere. Hier­bei sind die Über­schriften in der Spalte A untere­inan­der aufge­führt (immer der gle­iche Inhalt). In der Spalte B sind dann die sich ändern­den Dat­en (unter­schiedliche Inhalte). Zwis­chen den Über­schriften in Spalte A ist immer noch irgend ein Text, der für die Tabelle nicht ver­wen­det wer­den soll. Ich möchte nun, dass die Über­schriften im Excel in Zeile 1 aufge­führt wird und anschliessend über eine automa­tis­che Funk­tion erre­ichen, dass die vari­ablen Dat­en aus Spalte B unter­halb der Über­schrift einge­fügt wer­den. Da es tausende Dat­en sind, ist es mir nicht möglich über Kopieren / Inhalte Ein­fü­gen / Transponieren die Daten­sätze manuell zu erfassen. Das geht bes­timmt irgend über eine Funk­tion oder ein Makro.

Ziel:
Die vari­ablen Daten­sätze aus Spalte B sollen in eine Tabelle einge­fügt wer­den, damit anschliessend der Fil­ter / Piv­ot über die Tabelle gelegt wer­den kann.

Um das Ganze für euch anschaulich­er zu machen, habe ich eine stark vere­in­fachte Beispiel-Datei erstellt, woraus die Aus­gangslage und das Ziel ersichtlich sind.

Ich danke euch jet­zt schon für Eure Hil­fe.

Ich habe darauf geant­wortet, dass ich mich haar­ge­nau an die genan­nten Vor­gaben gehal­ten habe obwohl ich der Überzeu­gung sei, dass die Real­ität sich dann doch ganz anders darstellt (und nicht nur „stark vere­in­facht”). Was sich dann lei­der auch bewahrheit­ete … 😥 Die Muster-Datei kön­nen Sie hier in unserem Blog herun­ter­laden. Ein Screen­shot der Auf­gabe:

Die Ausgangslage stellt sich in der Datei so dar

Die Aus­gangslage stellt sich in der Datei so dar

▲ nach oben …

Aus mein­er Sicht mehr als irri­tierend ist die „Ziel”-Beschreibung; die zweis­paltige Liste ist ‑sofern ohne über­flüs­sige Zeilen- ide­al für eine Piv­ot-Auswer­tung geeignet, die angestrebte Kreuzta­belle ist es in kein­er Weise…  😕 Aber wie so oft im Leben gilt der Satz: „Des Men­schen Wille ist sein Him­mel­re­ich”.

Der Lösungsweg

Sie brauchen für die Auswer­tung ja auss­chließlich die Dat­en aus dem Bere­ich A4:B25. Darum markieren Sie den gesamten Bere­ich (ein­schließlich der Leerzeilen), StrgL oder StrgT, um daraus eine for­matierte Tabelle zu erstellen; set­zen Sie auch das Häkchen, dass die Tabelle Über­schriften hat. Anschließend über das Menü Dat­en (bzw. Pow­er Query in älteren Ver­sio­nen), Aus Tabelle bzw. Von Tabelle die Dat­en in den Pow­er Query-Edi­tor importieren. Das stellt sich dann so dar:

Die Daten sind in den Abfrage-Editor importiert

Die Dat­en sind in den Abfrage-Edi­tor importiert

Sie erken­nen, dass dort in regelmäßi­gen Abstän­den jew­eils 2 Leerzeilen (enthal­ten den Wert null) einge­fügt sind. Diese gilt es erst ein­mal zu ent­fer­nen. Dazu wählen Sie im Menüband das Sym­bol Zeilen ver­ringern | Zeilen ent­fer­nen | Leere Zeilen ent­fer­nen. Was jet­zt noch etwas „stört” sind die wieder­holten Zeilen, wo in der 1. Spalte das Wort Über­schrift und in der 2. Spalte das Wort Dat­en ste­ht. Das sind ja ganz offen­sichtlich Wieder­hol­un­gen der eigentlichen Über­schrift. Auch diese Zeilen sollen nun aus den importierten Dat­en ent­fer­nt wer­den. Erweit­ern Sie dazu die 1. Kopfzeile, die eigentliche Über­schrift der Tabelle) → (Über­schrift   ) und ent­fer­nen Sie das Häkchen beim Lis­ten-Ein­trag Über­schrift. Sofort liegen nur noch die reinen Dat­en in der Tabelle vor.

Nun gilt es zu erken­nen, dass in den Dat­en eine Regelmäßigkeit vor­liegt: Es sind 5er Blöcke, die sich in der Spalte Über­schrift wieder­holen. Und somit ist das Ziel klar: Die 5 Über­schriften sollen ein einziges Mal transponiert wer­den, also in der 1. Zeile ein­er neuen Tabelle ein­ma­lig erscheinen und die dazuge­höri­gen Werte aus der Spalte Dat­en sollen darunter geschrieben wer­den. Wie auch in der Muster-Datei dargestellt.

Um das zu erre­ichen, wech­seln Sie nun zum Reg­is­ter Spalte hinzufü­gen und Klick­en im Menüband auf Indexs­palte. Umge­hend wird eine neue Spalte mit einem 0‑basierten Index erstellt. Im Prinzip sind das Zeilen­num­mern, nur dass es hier auch die Zeile 0 gibt. Die links der Dat­en ste­hen­den „echt­en” Zeilen­num­mern kön­nen Sie nicht so ganz ein­fach abfra­gen und auswerten. Nun soll eine Art Grup­pierung erstellt wer­den, allerd­ings hat die nichts mit dem Menüpunk­ten aus Start oder Trans­formieren zu tun. Jew­eils 5 zusam­menge­hörende Werte der Spalte Über­schrift bilden ja einen Block, eine Gruppe; und hier soll für jeden Ein­trag der einzel­nen Gruppe ein numerische Wert vergeben wer­den. Also für die ersten 5 Zeilen jew­eils der Wert 0, für die näch­sten der Wert 1, usw.

Hier kom­men sie nicht ohne eine selb­st erstellte Formel aus. Spalte hinzufü­gen, Benutzerdefinierte Spalte und geben Sie im Dia­log bei Neuer Spal­tenname beispiel­sweise Idxx (oder wenn Ihnen das lieber ist auch Block) als Über­schrift der neuen Spalte ein. Im großen Textfeld Benutzerdefinierte Spal­tenformel; schreiben Sie diese Formel ganz genau so wie hier gezeigt nach dem vorgegebe­nen Gle­ich­heit­sze­ichen:
= Number.From(Number.RoundDown([Index]/5,0))

In diesem Dialog geben Sie  eine Überschrift und die Formel ein

In diesem Dia­log geben Sie eine Über­schrift und die Formel ein

Verkürzt aus­ge­drückt entspricht das der Excel-Formel ABRUNDEN(Index/5; 0); der Inhalt der Spalte Index soll also in jed­er Zeile durch 5 divi­diert und dann auf 0 Stellen abgerun­det wer­den. Das Ergeb­nis stellt sich dann so dar:

Die Spalte für die Gruppen-Bildung wurde hinzugefügt

Die Spalte für die Grup­pen-Bil­dung wurde hinzuge­fügt

Die Spalte Index brauchen Sie jet­zt nicht mehr. Nicht nur aus diesem Grunde soll­ten Sie diese Spalte löschen, denn für den näch­sten Schritt ist es aus­ge­sprochen hil­fre­ich, wenn nur noch 3 Spal­ten auszuw­erten sind. Also markieren Sie die Über­schrift Index und Entf oder Recht­sklick in die Über­schrift und Ent­fer­nen.

Der näch­ste Schritt macht Ein­steiger in Sachen Pow­er Query öfter ein­mal Prob­leme. Sie soll­ten also exakt den Weg so gehen, wie er hier beschrieben ist. Markieren Sie die Spalte, welche die kün­fti­gen Über­schriften enthal­ten soll durch einen Klick in das Über­schrift-Feld. Das ist in diesem Fall naturgemäß die Spalte Über­schrift.

Reg­is­ter Trans­formieren und ein Klick auf Spalte piv­otieren . Als Wertes­palte wählen Sie jene Spalte, wo die zu den Über­schriften gehöri­gen Werte einge­tra­gen sind, hier also Dat­en. Klick­en Sie anschließend auf den Text Erweit­erte Optio­nen und wählen dort den Punkt Nicht aggregieren. Bestäti­gen Sie mit OK.

Das Ergeb­nis ist fast schon per­fekt; jet­zt brauchen Sie nur noch die 1. Spalte Idxx löschen und anschließend über das Reg­is­ter Datei Schließen & laden in… wählen, um das Ergeb­nis dieser Abfrage an gewün­schter Posi­tion zu platzieren. Sie erken­nen, dass das Ergeb­nis dem Wun­sch des Fragestellers entspricht.


Hin­weis: Dass die eigentliche Auf­gabe dann doch deut­lich mutierte, hat mich ziem­lich geärg­ert. Ich habe an dem Punkt die weit­ere Hil­fe abge­brochen, weil ich es gar nicht mag, wenn aus beispiel­sweise Bequem­lichkeit eine Fragestel­lung so vere­in­facht, verkürzt wird, dass sich wesentliche Eck­punk­te anders darstellen und prak­tisch eine kom­plette neue Lösung erstellt wer­den muss, um zum verän­derten Ziel zu gelan­gen. Hier waren es „plöt­zlich” unter­schiedliche Anzahl von Zeilen­beze­ich­nun­gen der Spalte A (Name) und die Leerzeilen waren auch keine Leerzeilen mehr son­dern enthiel­ten diverse unter­schiedliche Inhalte, Texte ver­schieden­ster Art. Selb­stre­dend ist auch solch ein Fall mit Pow­er Query lös­bar, aber im Rah­men der (kosten­losen) Foren­hil­fe über­steigt das bei den gegebe­nen Umstän­den bei weit­em meine Hil­fs­bere­itschaft.

▲ nach oben …

Dieser Beitrag wurde unter Foren-Q&A, Power Query, PQ-Formeln (Sprache M), Transponieren abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.