Foren-Geflüster: Zeilenweise Spalten neu ordnen

KuddelMuddel: Spalten in korrekte Reihenfolge bringen

Prolog

In diesem Forum wurde die Frage gestellt, wie eine 4‑spaltige Liste so geord­net wer­den kann, dass alle in ein­er falschen Spalte einge­tra­ge­nen Werte anschließend an der kor­rek­ten Posi­tion erscheinen:

Die Roh-Daten in fehlerhafter Anordnung

Die Roh-Dat­en in fehler­hafter Anord­nung

In die Spalte Artikelbeschrei­bung sollen (auss­chließlich) alle Werte einge­tra­gen bzw. ver­schoben wer­den, die mit Art: begin­nen. In die Spalte EAN kom­men naturgemäß nur die numerischen Werte und in Farbe wer­den all jene Feld­in­halte posi­tion­iert, die mit Farbe: begin­nen. Das sollte dann so ausse­hen:

Diese Anordnung ist gewünscht …

Diese Anord­nung ist gewün­scht …

Die im Forum vorgestellte Lösungsmöglichkeit habe ich nicht getestet, ich gehe aber davon aus, dass sie kor­rekt ist. Die Zus­tim­mung des Fragestellers spricht dafür. Ich habe mich für einen Lösungsweg mit Pow­er Query entsch­ieden, weil dieses bei größeren Daten­men­gen der Ressourcen-scho­nen­dere Weg sein kann. Und für mich war es eine inter­es­sante Her­aus­forderung. 😎 

Der Lösungsweg

Naturgemäß begin­nt es damit, dass die Roh­dat­en (A2:D11) in den Pow­er Query- Edi­tor importiert wer­den. Sie kön­nen sich auch diese Tabelle hier in unserem Blog herun­ter­laden; wenn Sie diese Mappe ver­wen­den, begin­nen die Dat­en in A1. Und ich habe in unser­er Ver­sion außer den Quell- und den Ziel-Dat­en alles ent­fer­nt. Mein erster Ver­such war ein ver­schachtelte es Wenn-Kon­strukt, welch­es aber sehr unüber­sichtlich war und auch im drit­ten Anlauf nicht zum gewün­scht­en Ziel geführt hat (im vierten Ver­such hat es dann geklappt).

Das hat mich nicht zufrieden gestellt, und darum suchte ich nach einem ein­facheren, leichteren Weg. Und aus mein­er Sicht ist mir das auch gelun­gen. Der Aufwand ist auf jeden Fall wesentlich geringer, der Lösungsweg trans­par­enter. Hier in Stich­worten die Vorge­hensweise:

  • Markieren Sie die Spalte Beispiellink durch einen Recht­sklick in die Über­schrift.
  • Im Kon­textmenü wählen Sie den Punkt Andere Spal­ten Ent­piv­otieren.
  • Der Effekt ist, dass ein­er­seits für jede der 3 let­zten Datenspal­ten eine eigene Zeile mit dem Attrib­ut und dem Wert erstellt wurde, auf der anderen Seite aber auch leere Zellen gar nicht erst über­nom­men wor­den sind. Und das führt zu ein­er kom­prim­ierten Darstel­lung der Dat­en in ein­er anders kon­fig­uri­erten Liste:
Die Daten sind nach dem entpivotieren anders angeordnet und komprimiert

Die Dat­en sind nach dem ent­piv­otieren anders ange­ord­net

Wenn sie mit dieser Art der Umstel­lung von Dat­en noch nicht ver­traut sind, analysieren Sie das Ergeb­nis, bis Sie in die Sys­tem­atik erkan­nt haben. In Attrib­ut ste­ht jew­eils die Über­schrift, in Wert der jew­eilige Inhalt der Zelle.

Prinzip­iell gibt es hier nun zwei Wege: Dem Attrib­ut den passenden Wert zuord­nen oder aber dem gegebe­nen Wert die kor­rek­te Über­schrift zuzuweisen. Ich habe mich für den zweit­en Weg entsch­ieden.

  • Aktivieren Sie das Reg­is­ter Spalte hinzufü­gen und Klick­en dann auf das Sym­bol Benutzerdefinierte Spalte.
  • Schreiben Sie bei Neuer Spal­tenname dieses in das Textfeld: Attribut.1.
  • In den Bere­ich Benutzerdefinierte Spal­tenformel: schreiben Sie diese Formel, gerne in exakt in der hier dargestell­ten Form mit den entsprechen­den Ein­rück­un­gen und Zeilen­schal­tun­gen, in jedem Fall aber dieser Groß- Klein­schrei­bung:
if Value.Is([Wert], Int64.Type) then
   "EAN"
else
   if Text.Start([Wert],4)="Art:" then
      "Artikelbeschreibung"
   else if Text.Start([Wert],6)="Farbe:" then
      "Farbe"
else null
Der Dialog mit der eingetragenen Formel

Der Dia­log mit der einge­tra­ge­nen Formel

Bei der Gele­gen­heit sei mir ein klein­er Hin­weis ges­tat­tet: In der Formel­sprache M des Pow­er Query gibt es direkt keine Funk­tion, welche dem ISTTEXT() oder dem ISTZAHL() in Excel entspricht. Vielle­icht kommt ja noch so etwas als Ergänzung, aber in der ersten Code-Zeile erken­nen Sie, ich ein IsNum­ber() real­isiert wer­den kann. – Weit­er geht’s so:

  • Wenn keine Syn­taxfehler erkan­nt wor­den, ein Klick auf OK.
  • Recht­sklick in die Spalte Attrib­ut und Klick­en Sie im Kon­textmenü auf Ent­fer­nen.
  • (Option­al:) Benen­nen Sie die Spalte Attribut.1 um in Attrib­ut.
  • Klick in die Über­schrift Attrib­ut (bzw. Attribut.1), anschließend wech­seln Sie zum Reg­is­ter Trans­formieren.
  • Wählen Sie hier im Menüband den Punkt Piv­otieren ().
  • Im Dia­log wählen Sie bei Wertspalte den Ein­trag Wert.
  • Ein Klick auf Erweit­erte Optio­nen und dort wählen Sie Nicht aggregieren.
  • Schließen Sie den Dia­log mit OK.
  • Brin­gen Sie die Spal­ten durch ziehen in die gewün­schte Rei­hen­folge: Beispiellink | Artikelbeschrei­bung | EAN | Farbe.
  • Schließen & laden oder Schließen & laden in…, um entwed­er in einem neuen Blatt oder an gewün­schter Posi­tion eine Tabelle/Liste mit dem erstell­ten Ergeb­nis zu platzieren.

Damit ist das erwartete Ergeb­nis erre­icht. Und spätestens jet­zt wer­den Sie merken, dass die Beze­ich­nung null in ver­schiede­nen Zellen des Pow­er Query-Edi­tors in der Tabelle zu ein­er wirk­lich leeren Zelle führt, die auch kein „” enthält.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits freuen …

Dieser Beitrag wurde unter Allgemein, Verschiedenes, Entpivotieren, Foren-Q&A, Kreuztabelle, Ohne Makro/VBA, Power Query, PQ-Formeln (Sprache M), Spalten bearbeiten, Tabelle und Zelle, Transponieren, Wege nach Rom abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.