Datenvergleich: Neu – fehlt – geändert (xlsx)

Xtract: Mit Pow­er Query ver­schiedene Lis­ten auf Unter­schiede ver­gle­ichen (Pro­dukt fehlt, über­schüs­sig, Änderung). Dabei kom­men unter­schiedliche Join-Art Bedin­gun­gen zur Anwen­dung.

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

Hin­weis: Die prinzip­iell gle­iche Auf­gaben­stel­lung, dort allerd­ings auf der Basis von *.csv-Dateien wurde hier im Forum disku­tiert. In großen Teilen ist der Inhalt iden­tisch, manch­es ist hier (in diesem Beitrag) vielle­icht detail­liert­er dargestellt, damit auch Ein­steiger in Sachen Pow­er Query (die aber solide Erfahrung in Excel haben) bess­er zum Ziel kom­men.

Basierend auf ein­er in dieser Form immer wieder gestell­ten Frage in Excel-Foren habe ich einige Test-Daten­sätze gener­iert. Es sind in diesem Fall 2 *.xlsx-Files. Die Quelle(n) für die Dat­en: Ein internes und ein externes Lager, welche täglich ihren Bestand in die Zen­trale melden. Auf der Basis dieser bei­den Files sollen nun durch Excel, genauer gesagt durch Pow­er Query 3 Ergeb­nisse berech­net wer­den:

  • Fehlende Daten­sätze (Pro­duk­te)
  • Überzäh­lige Daten­sätze (fehlen in der 2. Datei)
  • Daten­sätze mit Änderun­gen inner­halb der Dat­en

Fol­gende bei­den Dateien liegen nach dem ent­pack­en als Excel-File vor: Lager HH.xlsx und Lager RZ.xlsx. Ich habe die bei­den Files im Verze­ich­nis C:\Data\ abgelegt; dieses Wis­sen ist für sie wichtig, wenn sie zum Ver­gle­ich meine fer­tige Auswer­tung laden. In dieser (zip-gepack­ten) Datei find­en Sie die bei­den Quell­dateien als auch meine Muster-Lösung. Ach ja, Lager HH ist das Haupt-Lager, von wo aus fehlende Pro­duk­te zum Lager RZ trans­feriert wer­den.

▲ nach oben …

Fehlende Datensätze (Produkte)

Begin­nen Sie damit, nacheinan­der jede der bei­den Excel-Files in eine leere Excel-Mappe zu importieren (Vorge­hensweise ab Excel 2016365): Dat­en | Neue Abfrage | Aus Datei | Aus Arbeitsmappe. Im File-Dia­log wech­seln Sie zum Verze­ich­nis, wo die xlsx-Dateien abgelegt sind; hier ist es ‑wie bere­its erwäh­nt- C:\Data. Nach einem Klick auf Lager HH.xlsx öffnet sich der Nav­i­ga­tor-Dia­log erst ein­mal ziem­lich leer. Markieren Sie das einzige existierende Tabel­len­blatt (Bestand HH) im linken Fen­ster-Bere­ich, dann zeigt sich rechts eine Vorschau der Dat­en. So kön­nen Sie bei mehreren Arbeits­blät­tern (oder Tabellen) die Auswahl präzisieren bzw. über­prüfen, ob es die richti­gen Dat­en sind:

Vorschau der Daten für den Import

Vorschau der Dat­en für den Import

Bei der Gele­gen­heit ein Hin­weis: Die meis­ten Menü-Schritte und Screen­shots (Bild­schirm­fo­tos) sind aus der bzw. passen zur 2019er Ver­sion des Excel. Bei markan­ten Unter­schieden sind auch die Abläufe bzw. Screen­shots der 2016er Ver­sion mit aufgezeigt.

Erweit­ern Sie die Schalt­fläche Laden ▼ und wählen Sie dort den Punkt Laden in… :

Klicken Sie nicht auf die Schaltfläche sondern erweitern Sie diese und …

Klick­en Sie nicht auf die Schalt­fläche son­dern erweit­ern Sie diese und wählen Laden in…

Und im fol­gen­den Dia­log markieren Sie Nur Verbindung erstellen:

Nur eine Verbindung erstellen (V. 2019)

Nur eine Verbindung erstellen (Ver­sion 2019)

Etwas andere Darstellung in Excel 2016 für das Laden in…

Etwas andere Darstel­lung in Excel 2016 für das Laden in…

Dadurch erstellen Sie jew­eils eine Abfrage, ohne dass diese nach einem Schließen & laden in eine Tabelle geschrieben wird. Dass sich der Pow­er Query-Edi­tor direkt danach schließt, ist der nor­male Ablauf. Gehen Sie bei der zu ver­gle­ichen­den Datei (Lager RZ) den gle­ichen Weg. Im recht­en Seit­en­fen­ster (Arbeitsmap­pen­abfra­gen) sind anschließend bei­de Abfra­gen mit dem Ver­merk Nur Verbindung aufge­führt.

Öff­nen Sie nun die Abfrage Bestand HH beispiel­sweise durch einen Dop­pelk­lick auf den Ein­trag im recht­en Seit­en­fen­ster. Wählen Sie im Menü Start die Schalt­fläche Kom­binieren und erweit­ern Sie den Menüpunkt Abfra­gen zusam­men­führen ▼ durch einen Klick auf das Dreieck. Wählen Sie hier Abfra­gen als neue Abfrage zusam­men­führen. Unter­halb der Auflis­tung mit den ersten Dat­en aus Bestand HH Klick­en Sie in das leere Textfeld/Kombinationsfeld und wählen dort die Abfrage Bestand RZ. Markieren Sie nun jew­eils ein beliebiges Feld in der Spalte Pro­duk­t­Nr.; ganz unten im Fen­ster wird Ihnen angezeigt, dass die Auswahl mit 1.246 der ersten 1.267 Zeilen übere­in­stimmt:

Die ersten Schritte beim Zusammenführen der Daten

Die ersten Schritte beim Zusam­men­führen der Dat­en

▲ nach oben …

In der ersten Fragestel­lung geht es ja darum, welche Daten­sätze zwar in der Abfrage Bestand RZ vorhan­den sind, jedoch in der Abfrage Bestand HH fehlen. Also was kann eventuell vom Außen­lager in das Zen­tral­lager über­führt wer­den? Dazu erweit­ern Sie das Kom­bi­na­tions­feld Join-Art und wählen Rechter Anti-Join (Zeilen nur in zweit­er). Nach einem Klick auf die Schalt­fläche OK ist die Abfrage auf eine Zeile geschrumpft und schein­bar ste­hen dort keine der gewün­scht­en Dat­en drin:

Vielleicht etwas irritierend, dennoch korrekt diese Darstellung

Vielle­icht etwas irri­tierend, den­noch kor­rekt diese Darstel­lung

Der Ein­druck täuscht. Erweit­ern Sie das Feld Bestand RZ   Doppelpfeil durch einen Klick auf den Dop­pelpfeil in der Über­schrift und Ent­fer­nen Sie im Dia­log nur das Häkchen im allerun­ter­sten Punkt Ursprünglichen Spal­tenna­men als Prä­fix ver­wen­den. Schließen Sie nun das Fen­ster mit OK. Ide­al­er­weise löschen Sie nun die ersten 5 Spal­ten (sie enthal­ten ja sowieso nur den Wert null) und ent­fer­nen in den verbliebe­nen Über­schriften jew­eils die let­zten bei­den Zeichen (.1), damit immer nur die jew­eils „reine” Über­schrift Pro­duk­t­Nr. .. Wert ste­hen bleibt. Nor­maler­weise wer­den Sie nun der Deut­lichkeit wegen den Namen der Abfrage von Merge1 auf beispiel­sweise Fehlend in HH ändern. Hin­weis: Änderun­gen bei Über­schriften und Namen lassen sich gut erledi­gen, wenn Sie einen Dop­pelk­lick darauf durch­führen oder nach dem Markieren F2 drück­en. Und natür­lich bietet sich stets ein Recht­sklick an … 😉 

▲ nach oben …

 

Für die Abfrage mit der zweit­en Fragestel­lung gehen Sie prinzip­iell genau­so vor. Öff­nen Sie wiederum die Abfrage Bestand HH, was hier übri­gens ganz leicht durch einen Klick auf den entsprechen­den Ein­trag im linken Seit­en­fen­ster geht. Wiederum Abfra­gen als neue Abfrage zusam­men­führen und bei­de Spal­ten der Pro­dukt-Nr. - Col­umn markieren. Da die Fragestel­lung dieses Mal jene Daten­sätze erfassen soll, die in der 2. (unteren) Abfrage fehlen, wählen Sie bei Join-Art den vor­let­zten Punkt Link­er Anti-Join (Zeilen nur in erster) das Ergeb­nis wird sich so darstellen:

Nicht nur die Zahl der Datensätze ist erheblich größer

Nicht nur die Zahl der Daten­sätze ist erhe­blich größer, auch das Han­dling ist anders

Die gewün­scht­en Dat­en ste­hen ja bere­its in den ersten 4 Spal­ten, darum kön­nen Sie die die let­zte Spalte Bestand RZ sofort löschen. Geben Sie nun diese Abfrage noch einen „sprechen­den” Namen, beispiel­sweise Überzäh­lig in HH.

▲ nach oben …

Datensätze mit Änderungen innerhalb der Daten

Auch wenn diese let­zte Fragestel­lung etwas mehr Aufwand bedeutet wird es sie nicht wun­dern, dass die ersten Schritte mit dem Kom­binieren der bei­den Abfra­gen iden­tisch sind. Als Join-Art wählen Sie hier den Inner Join (nur übere­in­stim­mende Zeilen). Erweit­ern Sie die 6. Spalte durch einen Klick auf den Dop­pelpfeil und sie brauchen nur darauf zu acht­en, dass das Häkchen beim Kon­trol­lkästchen Ursprünglichen Spal­tenna­men… nicht geset­zt ist. Die Abfrage beste­ht jet­zt aus 10 Spal­ten, wobei die Über­schriften der 2. Hälfte jew­eils den Zusatz .1 tra­gen. Sie kön­nen schon an dieser Stelle den Namen der Abfrage ändern, beispiel­sweise auf Unter­schiede.

Wählen Sie nun den Menüpunkt Spalte hinzufü­gen und dort im Menüband Benutzerdefinierte Spalte. Sie kön­nen den neuen Spal­tenna­men so belassen oder wenn Ihnen das lieber ist beispiel­sweise iden­tisch eingeben. In das Feld mit der Spal­tenformel geben Sie nach dem vorgegebe­nen = diese Funk­tion (gerne auch in einem Rutsch ohne Zeilenum­bruch) ein:
= [#"ProduktNr."]=[#"ProduktNr..1"]
and [Produkt]=[Produkt.1]
and [Anzahl]=[Anzahl.1]
and [Preis]=[Preis.1]

Die jew­eili­gen Spal­tenna­men in den eck­i­gen Klam­mern übernehmen Sie vorzugsweise durch einen Dop­pelk­lick auf den Namen der Spalte im recht­en Rah­men, wodurch die eck­i­gen Klam­mern und bei Bedarf auch die vor­angestellte Raute # automa­tisch mit einge­fügt wer­den. Das Ergeb­nis ist eine neue Spalte, wo entwed­er der Wert TRUE oder FALSE ste­ht.

… Oder ste­hen sollte. Fällt Ihnen etwas auf? Gle­ich in der 1. Zeile hat sich in der Spalte Pro­dukt. 1 ein Fehler (Error) eingeschlichen. Und wenn Sie weit­er nach rechts scrollen wer­den Sie erkennen,dass dieser Fehler­w­ert auch in der Spalte iden­tisch ste­ht. na gut, sie ken­nen gewiss für die Vorge­hensweise. Na gut, sie ken­nen gewiss schon die Vorge­hensweise. Ein Klick in die Zelle mit dem Fehler­w­ert und ihnen wird eine mehr oder weniger aus­sagekräftige Fehler­mel­dung angezeigt: DataFormat.Error: Ungültiger Zel­len­wert ‘#REF!’. Nun ja, das ist die englis­chsprachige Mel­dung #REF! welche im deutschen Excel mit #Bezug! aus­ge­drückt wird. Und da diese Mel­dung in der Spalte auf­taucht, welche aus der Abfrage Bestand RZ kommt, wird dort auch der Fehler liegen.

Sie ahnen es gewiss, um die Abfrage wird als Nur Verbindung gespe­ichert. Dazu Datei | Schließen & laden in… und die Ein­stel­lun­gen entsprechend ihres Wun­sches vornehmen. Im recht­en Seit­en­fen­ster erken­nen sie nun auch beim unter­sten Ein­trag Merge1 das Warn­sym­bol links des Namens. Der Fehler sollte in jedem Fall beseit­igt wer­den, schließlich ste­hen in der Zeile ja sin­nvolle Dat­en. Öff­nen Sie die Datei Lager RZ.xlsx und suchen Sie die Zeile, wo in der Spalte Pro­dukNr. die ID 7 ste­ht. Und um Ihnen eine lange Suchen zu ers­paren, es ist die Zeile 953. 😎 Sie wer­den schnell erken­nen,

Sie wer­den sich zwar denken kön­nen, dass die fehlende Pro­duk­t­num­mer die 537 ist. Aber sich­er ist das nicht. Darum soll­ten Sie auch Lager HH.xlsx öff­nen und nach­se­hen, welch­es Pro­dukt zur Pro­duk­t­num­mer 7 gehört. OK, jet­zt haben Sie auch die Bestä­ti­gung, dass die Ver­mu­tung stimmt. Kor­rigieren Sie den Inhalt der Zelle entsprechend und schließen Sie bei­de Lager-Files, wobei das Spe­ich­ern nach der Änderung wichtig ist! Wenn Sie nun in der aktuellen Arbeits-Datei mit den PQ-Abfra­gen die Query Merge1 öff­nen wer­den Sie erken­nen, dass sich trotz des Behebens des Fehlers immer noch der falsche Wert angezeigt wird. Löschen Sie erst ein­mal im recht­en Seit­en­fen­ster die Zeile unter Hinzuge­fügte benutzerdefinierte… und es tut sich lei­der immer noch nichts; was aber Besserung bringt: Start | Vorschau aktu­al­isieren. 🙂 Last but not least benen­nen Sie die Query Merge1 in beispiel­sweise Unter­schiede um.

Fil­tern Sie nun in dies Spalte so, dass der Wert FALSE erhal­ten bleibt und es wer­den jene Zeilen übrig bleiben, wo min­destens ein Wert in den kom­mu­nizieren­den Spal­ten unter­schiedlich ist. Sie kön­nen sich nun entschei­den, ob Sie alle 8 Spal­ten zu Ver­gle­ich­szweck­en beste­hen lassen wollen oder ob sie sich auf die ersten 4 Spal­ten für die Darstel­lung in der endgülti­gen Abfrage beschränken. Ent­fer­nen Sie also nun nur die let­zte Spalte (iden­tisch) oder auch die 4 Spal­ten davor, falls Sie nur die Dat­en der des Lagers HH  darstellen wollen.

Auch wenn Sie jet­zt auf Schließen & laden Klick­en, wird die Abfrage als (nur) Verbindung gespe­ichert, denn dieser Sta­tus ist in Pow­er Query ja fix­iert. Alle Abfra­gen liegen jet­zt als Nur Verbindung vor.  Da es sin­nvoll erscheint, die 3 Ver­gle­ichs-Abfra­gen in je einem Arbeits­blatt darzustellen, wan­deln Sie diese Query ist wie bere­its oben beschrieben so um, dass sie in je ein Tabel­len­blatt gespe­ichert wer­den. Schlussendlich wer­den sie die Arbeits­blät­ter noch sin­nvoll umbe­nen­nen.

Hin­weis: Prinzip­iell finde ich das Kapi­tel mit dem Ver­gle­ich aus kaufmän­nis­ch­er Sicht nicht wirk­lich opti­mal. Zugegeben, mir ging es in erster Lin­ie um das Prinzip in Sachen Pow­er Query. 💡 Wenn Sie etwas exper­i­men­tier­freudig sind dann tra­gen Sie doch in den Quell­dat­en der bei­den Läger eine Spalte mit dem Min­dest­be­stand ein. Da lässt sich dann wun­der­schön ver­gle­ichen, ob in einem Lager der Min­dest­be­stand unter­schrit­ten ist und im anderen Lager der Min­dest­be­stand über­schrit­ten ist. Da kann Pow­er Query sog­ar berech­nen, welche Menge (min­destens) trans­feriert wer­den kann oder soll; natür­lich darf dabei der eigene MB nicht unter­schrit­ten wer­den. Mit PQ und etwas Formel-Ken­nt­nis­sen kein Prob­lem.

▲ nach oben …

Rück­mel­dun­gen / Feed­back gerne per Mail an mich (G.Mumme@Excel-ist-sexy.de)

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 Allgemein, Verschiedenes, Daten zusammenführen, File-Handling, Filtern & Sortieren, Foren-Q&A, Join-Art, Power Query, Vergleichen (Daten, Tabellen, Abfragen) abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.