Folgende Aufgabenstellung wurde in einem Forum diskutiert: Es existieren 2 csv-Dateien, die miteinander verglichen werden sollen. Auf der Basis des Files Testdaten1.csv sollen durch Excel 3 Ergebnisse berechnet werden:
- Fehlende Datensätze
- Überzählige Datensätze (fehlen in der 2. Datei)
- Datensätze mit Änderungen innerhalb der Daten
Aus unterschiedlichen Gründen habe ich nicht im Forum geantwortet, nutze aber die Gelegenheit, solch eine interessante Aufgabe als Lösungsmöglichkeit für Power Query hier vorzustellen. Folgende beiden Dateien liegen als Textdatei im csv-Format vor: Test-File1.csv und Test-File2.csv. Ich habe die beiden Files im Verzeichnis C:\Data\ abgelegt; dieses Wissen ist für sie wichtig, wenn sie zum Vergleich meine fertige Auswertung laden. In dieser (zip-gepackten) Datei finden Sie die beiden Quelldateien als auch meine Muster-Lösung.
Beginnen Sie damit, nacheinander jede der beiden Textfiles zu öffnenden (Vorgehensweise in Excel 2016⁄365): Daten | Neue Abfrage | Aus Datei | Aus csv. Der Import-Assistent erkennt ohne ihr Zutun, dass hier kein Semikolon sondern ein Komma als Trennzeichen der einzelnen Spalten vorliegt. Erweitern Sie die Schaltfläche Laden ▼ und wählen Sie dort den Punkt Laden in… :
Und im folgenden Dialog markieren Sie Nur Verbindung erstellen. Dadurch erstellen Sie eine Kopie der Daten, ohne dass diese sofort in eine Tabelle geschrieben werden. Gehen Sie bei der zu vergleichenden Datei den gleichen Weg. Im rechten Seitenfenster (Arbeitsmappenabfragen) sind anschließend beide Abfragen mit dem Vermerk Nur Verbindung aufgeführt.
Öffnen Sie nun die Abfrage Test-File1 beispielsweise durch einen Doppelklick auf den Eintrag im rechten Seitenfenster. Wählen Sie im Menü Start die Schaltfläche Kombinieren und erweitern Sie den Menüpunkt Abfragen zusammenführen ▼ durch einen Klick auf das Dreieck. Wählen Sie hier Abfragen als neue Abfrage zusammenführen. Unterhalb der Auflistung mit den ersten Daten aus Test-File1 Klicken Sie in das leere Kombinationsfeld und wählen dort anschließend die Abfrage Test-File2. Markieren Sie nun jeweils ein beliebiges Feld in der Spalte ID; ganz unten im Fenster wird Ihnen angezeigt, dass die Auswahl mit 9 der 1. 10 Zeilen übereinstimmt:
In der 1. Fragestellung geht es ja darum, welche Datensätze zwar in der Abfrage Test-File2 vorhanden sind, jedoch in der Abfrage Test-File1 fehlen. Dazu erweitern Sie das Kombinationsfeld Join-Art und wählen Rechter Anti-Join (Zeilen nur in zweiter). Nach einem Klick auf die Schaltfläche OK ist die Abfrage auf eine Zeile geschrumpft und scheinbar stehen dort keine der gewünschten Daten drin. Der Eindruck täuscht. Erweitern Sie das Feld Test-File2 durch einen Klick auf den Doppelpfeil in der Überschrift und Entfernen Sie im Dialog nur das Häkchen im alleruntersten Punkt Ursprünglichen Spaltennamen als Präfix verwenden. Idealerweise löschen Sie nun die ersten 4 Spalten und entfernen in den verbliebenen Überschriften jeweils die letzten beiden Zeichen (.1), damit nur die reine Überschrift ID .. Ort stehen bleibt. Normalerweise werden Sie nun der Deutlichkeit wegen den Namen der Abfrage von Merge1 auf beispielsweise Fehlend ändern.
Für die Abfrage mit der zweiten Fragestellung gehen Sie prinzipiell genauso vor. Öffnen Sie wiederum die Abfrage Test-File1, was hier übrigens ganz leicht durch einen Klick auf den entsprechenden Eintrag im linken Seitenfenster geht. Wiederum Abfragen als neue Abfrage zusammenführen und beide Daten der ID-Spalten markieren. Da die Fragestellung dieses Mal jene Datensätze erfassen soll, die in der 2. Abfrage fehlen, wählen Sie bei Join-Art den vorletzten Punkt Linker Anti-Join (Zeilen nur in erster) das Ergebnis wird sich so darstellen:
Die gewünschten Daten stehen ja bereits in den ersten 4 Spalten, darum können Sie die die letzte Spalte Test-File2 sofort löschen. Geben Sie nun diese Abfrage noch einen „sprechenden” Namen, beispielsweise Überzählig.
Auch wenn die letzte Fragestellung etwas mehr Aufwand bedeutet wird es sie nicht wundern, dass die ersten Schritte mit dem Kombinieren der beiden Abfragen identisch sind. Als Join-Art wählen Sie hier den Inner Join (nur übereinstimmende Zeilen). Erweitern Sie die 5. Spalte durch einen Klick auf den Doppelpfeil und sie brauchen nur darauf zu achten, dass das Häkchen beim Kontrollkästchen Ursprünglichen Spaltennamen… nicht gesetzt ist. Die Abfrage besteht jetzt aus 8 Spalten, wobei die Überschriften der 2. Hälfte jeweils den Zusatz .1 tragen. Sie können schon an dieser Stelle den Namen der Abfrage ändern, beispielsweise auf Unterschiede.
Wählen Sie nun den Menüpunkt Spalte hinzufügen und dort im Menüband Benutzerdefinierte Spalte. Sie können den neuen Spaltennamen so belassen oder wenn Ihnen das lieber ist beispielsweise identisch eingeben. In das Feld mit der Spaltenformel geben Sie nach dem vorgegebenen = diese Funktion ein:
[ID]=[ID.1] and [Name]=[Name.1] and [Straße]=[Straße.1] and [Ort]=[Ort.1]
Die jeweiligen Spaltennamen in den eckigen Klammern übernehmen Sie vorzugsweise durch einen Doppelklick auf den Namen der Spalte im rechten Rahmen, wodurch die eckigen Klammern automatisch mit eingefügt werden. Das Ergebnis ist eine Spalte, wo entweder der Wert TRUE oder FALSE steht.
Filtern Sie nun in diese Spalte so, dass der Wert FALSE erhalten bleibt und es werden jene Zeilen übrig bleiben, wo mindestens ein Wert in den kommunizierenden Spalten unterschiedlich ist. Sie können sich nun entscheiden, ob Sie alle 8 Spalten zu Vergleichszwecken bestehen lassen wollen oder ob sie sich auf die ersten 4 Spalten für die Darstellung in der endgültigen Abfrage beschränken. Entfernen Sie also nun nur die letzte Spalte (identisch) oder auch die 4 Spalten davor, falls Sie nur die Daten der ersten csv darstellen wollen.
Je nach Anforderungen und Wunsch können Sie nun ganz einfach Schließen & laden wählen oder aber die Alternative Schließen & laden in… Im erstgenannten Fall wird für jede Abfrage ein neues Tabellenblatt erzeugt und die Query automatisch als Tabelle dort hinein geschrieben. Hier ist es dann sinnvoll, jedes Tabellenblatt den Ergebnissen entsprechend neu zu benennen. In der Alternative werden sie jeweils gefragt, ob sie die Abfrage überhaupt in einer Tabelle speichern wollen und falls ja, in ein neues oder ein bestehendes Arbeitsblatt. Hier ist eine individuelle Positionierung möglich.