PQ: Letzter Wert jeder Zeile

Xtract: In ein­er Tabelle/Liste soll für jede Zeile der let­zte einge­tra­gene Wert in ein­er geson­derten Spalte per Pow­er Query aus­gegeben wer­den.

  Wis­sens­stand: Lev­el 2 ⇒ Solides Basiswis­sen in Excel, etwas Erfahrung in PQ   

Ab und zu wird in Excel-Foren die Frage gestellt, welchen Inhalt die let­zte Spalte mit einem beliebi­gen Wert hat. Leere Zellen oder ein Leer­String ("") sollen nicht berück­sichtigt wer­den. Da ich auf dem gemieteten Web-Serv­er Platz sparen muss, habe ich Ihnen hier eine Muster-Datei im *.csv – For­mat bere­it gestellt. Und da es in Plain Excel bere­its diverse Lösun­gen in Foren und auch im weit­eren Netz gibt habe ich mich für eine Pow­er Query-Lösung entsch­ieden. Falls Sie Hil­fe beim Import in PQ brauchen, schauen Sie bitte hier nach.

Sehen Sie sich die 20 Dat­en-Zeilen ein­mal in Ruhe an und erken­nen Sie, dass unter­schiedliche Spal­ten den let­zten Wert der Zeile enthal­ten und auch ganz leere Zeilen dabei sind. Ich stelle Ihnen hier 2 sehr ähn­liche Lösun­gen vor, welche ‑jede für sich- ihren eige­nen Reiz hat. Für bei­de Lösungswege gilt, dass Sie nach dem Importhaupt­säch­lich  mit ein­er Arbeit­skopie arbeit­en.

Lösung 1

Nach dem Import in den PQ-Edi­tor erstellen Sie die Arbeit­skopie per Duplizieren und benen­nen diese gle­ich zu Let­zter­W­ertSpalte (Arbeit­skopie) um. Bis auf Wider­ruf wer­den Sie nur in dieser Query arbeit­en. – Markieren Sie alle Spal­ten, Recht­sklick in eine der Über­schriften und Spal­ten ent­piv­otieren. Die erste Idee kön­nte sein, nach Attrib­ut zu Grup­pieren und das Max­i­mum bei Vor­gang und bei Spalte  Wert auszuwählen. Aber das ist ein Denk­fehler, denn das klappt zwar bei den ersten bei­den Zeilen (de ersten Gruppe) aber beim näch­sten Block (Zeile 2 bis Zeile 10) stimmt das Ergeb­nis nicht. 🙁 

Also ist ein neuer Denkansatz erforder­lich. Irgend­wie muss dem Attrib­ut noch die jew­eilige Zeilen­num­mer der Roh­dat­en zugewiesen wer­den. Klick­en Sie dazu im recht­en Seit­en­fen­ster bei Angewen­dete Schritte auf den Schritt vor dem Ent­piv­otieren (also Geän­dert­er Typ) und wech­seln Sie im Menüband zu Spalte hinzufü­gen. Ein Klick auf Indexs­palte und nach der Bestä­ti­gung per Klick auf Ein­fü­gen ist die Index-Spalte einge­fügt. Klick­en Sie im Seit­en­fen­ster wieder auf die let­zte Zeile der Liste und Über­raschung, es hat sich nichts getan. 🙁 Der aus mein­er Sicht ein­fach­ste Weg ist nun, die Ent­piv­otieren-Zeile zu löschen und jet­zt die Spalte Index markieren, Recht­sklick und Andere Spal­ten ent­piv­otieren. Und nun ist jedem Wert in Attrib­ut eine Zeilen­zahl (Index) zuge­ord­net.

Durch das Ent­piv­otieren sind ja alle leeren Zellen eli­m­iniert wor­den. Nun geht es darum, die jew­eils let­zte Zeile eines Blocks festzustellen und ide­al­er­weise die anderen Zeilen zu löschen. Die eine Möglichkeit wäre, jede Gruppe in sich fort­laufend zu num­merieren und dann den höch­sten Wert her­auszu­fil­tern. Ich biete Ihnen hier einen anderen Weg an:

  • Wech­seln Sie zum Menü Trans­formieren
  • Klick­en Sie in der Menüband-Gruppe Tabelle auf den Ein­trag Zeilen umkehren
  • Markieren Sie die Spalte Index
  • Recht­sklick in die Über­schrift und Dup­likate ent­fer­nen
  • Um nun die Orig­i­nal-Rei­hen­folge herzustellen wiederum Zeilen umkehren
  • … und jet­zt die Spalte Wert (irgend­wie) der Ursprungsta­belle anfü­gen.

„Irgend­wie” ist ja nun keine detail­lierte Beschrei­bung. 😎 Und auf direk­tem Wege geht das auch nicht. Aber wenn Sie auch hier einen Index, der mit Sicher­heit iden­tisch zu dem in der Arbeit­skopie erstell­ten Index ist erstellen, dann klappt das auch. Aus­nahm­sweise reicht es hier, dass Sie direkt mit dem Erstellen einen (auch) null­basierten Index erstellen. Danach Start | Abfra­gen zusam­men­führen und wählen Sie als zweite Abfrage Let­zter­W­ertSpalte (Arbeit­skopie). Markieren Sie in bei­den Abfrage-Fen­stern die Spalte Index und bestäti­gen mit OK. Erweit­ern Sie die neu erstellte Spalte durch einen Klick auf Doppelpfeil und lassen Sie im gesamten Dialogfen­ster auss­chließlich das Häkchen bei Wert beste­hen. Als let­zten Schritt kön­nen Sie noch die Über­schrift auf (beispiel­sweise) Wert let­zte Spalte ändern. Und eine Sichtkon­trolle wird Ihnen zeigen, dass das Ergeb­nis kor­rekt ist, auch wenn ein­mal eine leere Zelle mit­ten­drin ist oder gar kein Wert vorhan­den war. Je nach Wun­sch kön­nen Sie nun die Abfrage in einem existieren­den oder einem neuen Abeits­blatt spe­ich­ern.

Hier noch ein Hin­weis: So ganz „sauber” ist diese Vorge­hensweise mit dem nachträglich einge­tra­ge­nen Index in der Basista­belle nicht. Prinzip­iell sollte der Index dort vor dem Duplizieren erstellt wer­den; es gibt einige Sit­u­a­tio­nen, wo das son­st zu falschen Ergeb­nis­sen führen kann. Oder Sie gehen den nach­fol­gend gezeigten Weg.

▲ nach oben …

Lösung 2

Wie gehabt importieren Sie in ein­er neuen Mappe die *.csv. Im PQ-Edi­tor erstellen Sie nun eben­falls als erstes eine Arbeit­skopie. Aber Sie gehen nicht den Weg über Duplizieren son­dern über Ver­weis. Auch hier vergebe ich den Namen Let­zter­W­ertSpalte (Arbeit­skopie). Sie sehen, dass bei­de Abfra­gen iden­tisch sind. Wech­seln Sie nun zur Ursprungs-Abfrage und fügen Sie hier einen Index ein. Wech­seln Sie nun zur Arbeit­skopie und siehe da, wie von Geis­ter­hand ist nun auch hier diese Spalte vorhan­den. Pri­ma! Markieren Sie hier nun Index und über einen Recht­sklick Andere Spal­ten ent­piv­otieren. Da ich gerne dem Prinzip folge, der Verarbeitungsgeschwindigkeit/Performance wegen über­flüs­sige Dat­en so früh wie möglich zu ent­fer­nen, lösche ich jet­zt schon die Spalte Attrib­ut. Nun wieder Zeilen umkehren, in der Spalte Index Dup­likate ent­fer­nen und die ursprüngliche Rei­hen­folge wieder her­stellen (auch wenn das gar nicht erforder­lich ist).

▲ nach oben …

Möglichkeit 1

Nun geht es darum, die bei­den Abfra­gen wieder zusam­men­zufü­gen. Sie wech­seln also zur Ursprungsta­belle Let­zter­W­ertSpalte und Start | Abfra­gen zusam­men­führen. Und bei der Auswahl der zu verknüpfend­en Tabelle kommt die große Über­raschung, denn die Arbeit­skopie ist nicht in der Auswahl ver­füg­bar. Und das liegt daran, dass kein Dup­likat erstellt wor­den ist son­dern ein Ver­weis. Also gehen Sie über Abbrechen, um den Dia­log zu schließen. Und jet­zt bieten sich Ihnen 2 Wege an, die ich Ihnen kurz vorstelle:

  • Start | Abfra­gen zusam­men­führen  | Abfra­gen als neue Abfrage zusam­men­führen
  • Auswahl der Abfrage Let­zter­W­ertSpalte
  • In bei­den Abfra­gen Index markieren
  • … und den Dia­log per OK schließen.
  • Die neu erstellte Spalte per Klick auf den Dop­pelpfeil erweit­ern und auss­chließlich das Häkchen bei Wert ste­hen lassen.

Das Vorge­hen entspricht weit­ge­hend dem aus dem ersten Teil weit­er oben. Und auch hier wird die visuelle Kon­trolle zeigen, dass die Werte stim­men. Das Anpassen der Über­schrift über­lasse ich Ihnen nach eigen­em Geschmack. Zwei Anmerkun­gen seien mir an dieser Stelle ges­tat­tet: Es sind jet­zt 3 Abfra­gen im Edi­tor und das Ergeb­nis hat 20 Zeilen. Das ist selb­stver­ständlich? Na ja…

▲ nach oben …

Möglichkeit 2

Die zweite Möglichkeit der Lösung 2 ist etwas anders. Wiederum am Schnittpunkt, wo die Dat­en zusam­menge­führt wer­den sollen, bleiben Sie in der Query Let­zter­W­ertSpalte (Arbeit­skopie). Der Trans­parenz wegen kön­nen Sie auch gerne die eben erstellte Abfrage löschen, damit wieder nur 2 Abfra­gen gegeben sind. Sie bleiben in dieser Arbeits-Abfrage und

  • Start | Abfra­gen zusam­men­führen
  • Auswahl der Abfrage Let­zter­W­ertSpalte
  • In bei­den Abfra­gen Index markieren
  • … und den Dia­log per OK schließen.
  • Die neu erstellte Spalte per Klick auf den Dop­pelpfeil erweit­ern und nun auss­chließlich das Häkchen bei Index ent­fer­nen.

Sie erken­nen, dass sich eigentlich gar nicht so viel in der Vorge­hensweise geän­dert hat. Aber das Ergeb­nis ist auf den ersten Blick ziem­lich unstruk­turi­ert. Index und Wert ste­hen promi­nent ganz links und die Rei­hen­folge der Zeilen stimmt auch nicht so wirk­lich. 😎 Und es sind nur 18 Zeilen in der Abfrage! Warum fehlen 2 Zeilen und welche sind das? Nun ja, es sind genau die 2 Zeilen, wo in den Ursprungs­dat­en keine einzige Spalte gefüllt war, alle Spal­ten enthiel­ten den Wert null. Das kön­nen Sie als Vorteil oder auch als Nachteil sehen; eine Änderung wäre mit etwas Aufwand dur­chaus möglich. – Bleibt eigentlich nur noch, die Query nach Index auf­steigend zu sortieren, diese Spalte danach zu löschen und Wert an das Ende (als let­zte Spalte) zu ver­schieben.

Während Sie bei Lösung 1 und der Möglichkeit 1 bei der Lösung 2 die Aus­gabe der Dat­en auf die Spalte mit dem berech­neten Wert beschränken kön­nten und diese dann im Arbeits­blatt neben die Excel-Ursprungs­dat­en platzieren kön­nten weil die Rei­hen­folge und die Anzahl der Ergeb­nisse ja gle­ich ist, würde die verkürzte Darstel­lung der Möglichkeit 2 der gewoll­ten Aus­sage nicht gerecht wer­den.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,50  freuen … (← Klick mich!)

Dieser Beitrag wurde unter Entpivotieren, Filtern & Sortieren, Foren-Q&A, Power Query, Spalten bearbeiten abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.