PQ: Jeweils letzten Datensatz einer Gruppe filtern

Xtract: Mit­tels Pow­er Query soll aus eine Tabelle der jew­eils let­zte Daten­satz (Zeile) ein­er zusam­menge­hören­den Gruppe gefiltert wer­den. 2 mögliche Lösungswege: Das Datum und ein einge­fügter Index.

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

Fragestellung in einem Forum

In einem Forum wurde eine Frage gestellt, die ich hier der Ein­fach­heit hal­ber ein­fach ein­mal zitiere:


Let­zten Wert in ein­er Auswahl von Dat­en – pro Per­son

Hal­lo!
Mir stellt sich fol­gen­des Prob­lem. Wie zu sehen habe ich vier Spal­ten. In der ersten Spalte sind die Mitar­beit­er hin­ter­legt. Chro­nol­o­gisch nach unten ver­laufen Jahr, Monate und dann in der vierten Spalte die gewün­scht­en Werte. In einem neuen Tabell­blatt sollen immer pro Mitar­beit­er der let­zte Wert aus Spalte 4 für den jew­eili­gen Mitar­beit­er aus­gebe­nen wer­den.

Ich dachte schon an eine Kom­bi­na­tion aus MAX, Sum­mem­pro­dukt und / oder Index… aber da hapert es nun.

Name                 Jahr        Monat   OO max.Wo
Max Mustermann       2020          1         54
Max Mustermann       2020          2         54
Max Mustermann       2020          3         54
Max Mustermann       2020          4         48
Max Mustermann       2020          5         48
Max Mustermann       2020          6         48
Susi Wolke           2020          1         54
Susi Wolke           2020          2         54
Susi Wolke           2020          3         54
Susi Wolke           2020          4         54
Susi Wolke           2020          5         54
Susi Wolke           2020          6         50

Als Ergeb­nis müsste er den Namen in mein­er neuen Tabelle in Spalte A abgle­ichen und dann in Spalte B den Wert aus­geben:

A                        B
Max Mustermann          48
Susi Wolke              50

LG Nico


So weit die Anfrage aus dem Forum. Ein gewiss­es Maß an Klarheit wird ja durch die Aus­sage geschaf­fen, dass die Dat­en jedes Names chro­nol­o­gisch geord­net sind. Dadurch wird deut­lich, dass es immer der let­zte Ein­trag auch die let­zte Zeile immer­halb der Namen-Gruppe ist, welch­er gesucht wird. Und ein Helfer-Kol­lege hat auch rasch einen Formel-Vorschlag gemacht, den ich allerd­ings nicht geprüft habe.

Ich habe mich rasch entschlossen, eine möglichtst prak­tik­able Lösung per PQ zu find­en. Und nach weni­gen Minuten war mir klar, dass es zumin­d­est drei gut nachvol­lziehbare Wege gibt, um zum Ziel zu gelan­gen. Ich stelle Ihen hier 2 Wege vor, die ganz ohne von Hand eingegebene Formeln und Funk­tio­nen der Sprache M auskom­men. Die dritte von mir angedachte Möglichkeit basiert auf dem Prinzip, welch­es hier im Blog disku­tiert wird.

Für die bei­den hier vorgestell­ten Wege habe ich eine von der Idee her gle­ichar­tige, inhaltlich jedoch unter­schiedliche Arbeitsmappe erstellt. Möcht­en Sie mit den Orig­i­nal-Dat­en arbeit­en, dann kopieren Sie diese ein­fach aus dem Zitat-Bere­ich (siehe weit­er oben) und fügen diese in Ihre Excel Arbeitsmappe ein. Meine Ver­sion, die ich auch hier nutze, laden Sie hier von unserem Serv­er herunter.

Und bevor Sie lange über­legen, warum ich nicht die Orig­i­nal-Datei ver­wende: Erst ein­mal gibt es bis zum jet­zi­gen Zeit­punkt keine Original-*.xlsx son­dern nur eine Text-Darstel­lung der Dat­en wie Sie diese auch oben sehen. Das war übri­gens der Grund, warum ich keine Lösung im Thread ange­boten habe. Ich has­se unnötige Arbeit und dazu gehört, dass ich entwed­er abschreiben und/oder for­matieren muss und mir vielle­icht auch noch Formeln aus­denken „darf”, die der Ersteller vielle­icht ver­wen­det hat. Außer­dem habe ich dafür gesorgt, dass pro Per­son nicht immer die gle­iche Anzahl von Zeilen gegeben ist; son­st wäre es ja erhe­blich ein­fach­er gewe­sen, mit ein­er Berech­nung immer die n'te Zeile der Tabelle zu fil­tern. 😎 

▲ nach oben …

Referenz: Datum

Der Über­schrift entsprechend wer­den Sie naturgemäß das Arbeits­baltt Datum ver­wen­den und die Tabelle Nach­Da­tum importieren. Alle Namen sind in Grup­pen zusam­menge­fasst und jew­eils nach Jahr und Monat auf­steigend sortiert. In der let­zten Spalte sind dann numerische Werte eingestellt. Das Ziel: Für jeden Namen soll in ein­er neuen Abfrage der Name und der Wert der let­zten Zeile, sprich des let­zten Monats des jew­eili­gen Namens aus­gegeben wer­den. Und natür­lich habe ich es bewusst so ein­gerichtet, dass der let­zte Monat nicht immer den numerischen Wert 6 hat. Das ist die notwendi­ge Prise Salz in der Suppe. 👿 

Okay, nach dem Import in den Pow­er Query-Edi­tor soll­ten Sie die Abfrage gle­ich ein­mal über Schließen & laden in… so sich­ern, dass kein neues Arbeits­baltt erstellt wird. Die Abfrage anschließend gle­ich wieder öff­nen und erst ein­mal über­legen, wie denn durch PQ automa­tisch der jew­eils let­zte Monat fest­gestellt wer­den kann.

So wie sich die Tabelle zurzeit darstellt, kann Pow­er Query nicht mit absoluter Sicher­heit berech­nen, welch­es das let­zte Datum des entsprechen­den Namens ist. Das wird Ihnen rasch klar wer­den, wenn sie sich vorstellen, dass die kalen­darischen Dat­en jahresüber­greifend einge­tra­gen sein kön­nten. Darum ist es hil­fre­ich, aus den bei­den Spal­ten Jahr und Monat eine einzige Spalte mit einem kor­rek­ten Datum zu machen.

Markieren Sie dazu als erstes die Spalte Monat, Strg oder Shift und dann ein Klick im Jahr. Wech­seln Sie zum Menü Trans­formieren und wählen Sie dort im Menüband den Ein­trag Spal­ten zusam­men­führen. Bei Trennze­ichen wählen Sie –Benutzerdefiniert– und In das neu einge­blendete freie Feld Tra­gen Sie den/ ein; bei Neuer Spal­tenname schreiben Sie beispiel­sweise Monate. Nach einem Klick auf OK wer­den die bei­den Spal­ten zusam­menge­fügt und es ist dort eine typ­is­che Datum­sangabe für den jew­eili­gen Monat geschrieben. Das ganze ist natür­lich noch ein Text und kein Datum. Markieren Sie Spalte Monate durch einen Klick in die Über­schrift. Im Menüband rechts, Gruppe Datum & Uhrzeit ein Klick auf Datum und die einzig mögliche Auswahl ist Analysieren. Ruck­zuck ste­ht nach einem Klick darauf in jed­er Zeile dieser Spalte nun ein kor­rek­tes Datum. Das ist jew­eils der Monat erste ist, spielt keine Rolle. Schließlich gibt es je Namen kein Dup­likat beim Monat.

Nor­maler­weise ist links der Abfrage nur ein schmaler Streifen mit dem Text Abfra­gen zu sehen. Klick­en Sie auf den Text oder das Größer-Zeichen und aus dem schmalen Streifen wird das linke Seit­en­fen­ster sicht­bar. Recht­sklick auf den Namen der einzi­gen Abfrage Nach­Da­tum und wählen Sie im Kon­textmenü Ver­weis. Es wird eine neuer Frage erstellt, welche automa­tisch den Namen Nach­Da­tum (2) bekom­men hat. Im recht­en Seit­en­fen­ster erken­nen Sie, dass nur ein einziger Schritt Quelle erfasst ist.

Markieren Sie die Spalte Name und nehmen Sie diese Ein­stel­lung vor:

  • Das Feld mit dem Ein­trag Name bleibt so.
  • Bei Neuer Spal­tenname tra­gen Sie beispiel­sweise let­zter Monat ein.
  • Bei Vor­gang wählen Sie im Drop­down Max.
  • Und bei Spalte wählen Sie Monate aus, denn es soll ja der let­zte, der höch­ste Wert in dieser Spalte gefun­den wer­den.
  • Schließen Sie den Dia­log mit OK.

Das ganze stellt sich nun so dar, wie in der fol­gen­den Abbil­dung zu sehen:

Kor­rek­te Monat­sna­men

Die 4 Namen ste­hen schon ein­mal da, auch der richti­gen Rei­hen­folge. Auch das Datum des let­zten Ein­trages ist kor­rekt ver­merkt. Das ist schon mal eine gute Basis, um die dazu passenden numerischen Werte zu ergänzen. Wech­seln Sie erforder­lichen­falls zum Reg­is­ter (Menü) Start und wählen dort im Menüband Kom­binieren. Ein Klick auf die ober­ste Auswahl Abfra­gen zusam­men­führen und sie sind in jen­em Dia­log, wo Sie 2 Abfra­gen zusam­men­fü­gen kön­nen. Erweit­ern Sie dass mit­tige, kleine Textfeld und wählen dort den Ein­trag Nach­Da­tum. Klick­en Sie nun im oberen Kas­ten zuerst auf Name, Strg und dann in die Spalte let­zter Monat. Acht­en Sie darauf, dass die kleinen Zif­fern in den Über­schrift­feldern entsprechend der Rei­hen­folge sind. Nun im unteren Kas­ten auch zuerst in die Spalte Name, Shift oder Strg und dann in die Spalte Monat Monate Klick­en. Auch hier muss die Rei­hen­folge entsprechend sein.

Nach dem Schließen des Dialogs hat Pow­er Query eine neue Spalte erstellt, wo durchgängig der Inhalt Table ist. Erweit­ern Sie diese Spalte (Nach­Da­tum) durch einen Klick auf den Dop­pelpfeil in der Über­schrift. Im Dia­log ent­fer­nen Sie alle Häkchen mit Aus­nahme der unteren Zeile im Kas­ten, OO max.Wo. Ent­fer­nen Sie nun noch die Spalte let­zter Monat und Datei | Schließen & laden in… Wählen Sie im Dia­log Beste­hen­des Arbeits­blatt und Klick­en Sie im Arbeits­blatt Datum beispiel­sweise in die Zelle F1, um dort die Ergeb­nis-Tabelle zu posi­tion­ieren.

Das Ziel ist fast erre­icht. Ich ziehe es vor, der Klarheit wegen die Ergeb­nis­abfrage noch umzube­nen­nen. Wenn auch Sie diese Abfrage den Namen Nach­Da­tum (Ergeb­nis) geben, ist das Ganze doch etwas klar­er.

▲ nach oben …

Referenz: Index

Eine weit­ere Möglichkeit, dieses Ziel zu erre­ichen beste­ht darin, eine Index-Spalte zu nutzen. Und wie Sie unschw­er erken­nen, existiert eine solche nicht. Importieren Sie also die Excel-Tabelle ein weit­eres mal und benen­nen diese Abfrage ide­al­er­weise gle­ich NachIn­dex. Wech­seln Sie nun zum Menü Spalte hinzufü­gen und anschließend im Menüband ein Klick auf Indexs­palte. PQ erstellt eine Spalte Index, mit dem Wert 0 in Zeile 1 begin­nend. Genau diesen Stand der Dinge wer­den Sie in der let­zten Phase noch ein­mal brauchen, darum an dieser Stelle schon ein­mal Schließen & laden in… (ide­al­er­weise nur als Verbindung) und danach die Abfrage sofort wieder öff­nen.

Erstellen Sie nun ein Dup­likat dieser Query; ich finde, dass das am besten im linken Seit­en­fen­ster geht (Recht­sklick auf den Namen der Abfrage) oder aber auch über das Menü Start | Ver­wal­ten | Duplizieren.¿ Die weit­eren Schritte wer­den Sie (erst ein­mal) in dieser duplizierten Abfrage durch­führen.

Markieren Sie die Spalte Name und dann ein Recht­sklick in die Über­schrift. Wählen Sie im Kon­textmenü Grup­pieren nach… und vergeben Sie bei Neuer Spal­tenname beispiel­sweise Let­zter. Bei Vor­gang ist Max die richtige Auswahl, denn es soll ja der höch­ste Index der entsprechen­den Per­son erkan­nt wer­den. Und bei Spalte ist es naturgemäß Index. Das Ergeb­nis ist eine 4‑zeilige Abfrage, wo jedem Namen der entsprechende höch­ste Index-Wert zuge­ord­net ist:

Zuge­ord­neter max­i­maler Index

Nun geht es darum, den einzel­nen Namen den entsprechen­den Wert aus der Spalte OO max.Wo zuzuweisen. Die sind aber „nur” in der zuerst erstell­ten Abfrage vorhan­den. Im Hin­blick darauf, dass Sie ja nur die hier aufge­lis­teten 4 Zeilen ergänzen wollen, bleiben Sie in dieser Abfrage und über Start | Kom­binieren | Abfra­gen zusam­men­führen tra­gen Sie im Zusam­men­führen-Dia­log in das kleine Textfeld die Abfrage Nach Index ein. Markieren Sie im oberen Kas­ten die Spalte Let­zter und im unteren Kas­ten Index:

Zusam­men­führen der bei­den Abfra­gen

Nach dem schließen des Dialogs hat PQ eine neue Spalte mit der Über­schrift der Abfrage gener­iert. Erweit­ern Sie diese Über­schrift durch einen Klick auf den Dop­pelpfeil Doppelpfeil und ent­fer­nen (wirk­lich) alle Häkchen, mit Aus­nahme bei OO max.Wo und dann OK. – Fast per­fekt! Es bleibt nu noch, die Spalte Let­zter zu löschen und die Abfrage im Arbeits­blatt Index an gewün­schter Posi­tion zu spe­ich­ern. – Und meine Lösung kön­nen Sie hier von unserem Serv­er herun­ter­laden.

▲ 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 …

Dieser Beitrag wurde unter Datum & Zeit, Filtern & Sortieren, Join-Art, Power Query abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.