Täglicher automatisierter Vergleich zweier csv Dateien?
Hallo,
da ich leider nicht alle technischen Begriffe richtig kenne und deshalb evtl. hier falsch verwende bereits vorab die Bitte um Entschuldigung.
Ich bekomme täglich eine csv Datei mit Daten aktueller, also zum heutigen Tag angestellten, Mitarbeitern. Hier steht bspsweise Personalnummer (eindeutiger Schlüssel), Nachname, Vorname,Eintrittsdatum und Austrittsdatum (Achtung: Das Austrittsdatum stimmt leider nicht immer). Zur Veranschaulichung die Datumsangaben mal weggelassen.
...
124514; Müller; Jonas;
231423; Fischer, Joachim;
423313; Haupt, Christian;
...
Sobald ein Mitarbeiter nicht mehr aktiv ist (also aus der Firma ausgetreten ist) wird der Datensatz am folgenden Tag auch nicht mehr übergeben (kommt also in der aktuellen csv Datei nichtmehr vor).
Es würde also am Folgetag die csv folgendermaßen aussehen, wenn Müller das Unternehmen verlassen hat und Newbie beispielsweise neu angefangen hat. Die Neueintritte müssen nicht abgefangen werden, wollte ich nur als Info dazusagen, dass diese dann zusätzlich in der neuen Datei vorhanden sind. Es geht ausschließlich um die Austritte, also die Mitarbeiter die in Vortagsdatei vorkamen, jetzt in tagesaktuellen aber nicht mehr vorkommen.
...
231423; Fischer, Joachim;
423313; Haupt, Christian;
599999; Newbie, Franziska;
...
Da das Austrittsdatum, welches auch mitgeliefert wird, leider teilweise nicht korrekt ist, kann ich mich nicht auf dieses Feld verlassen und irgendwie danach gehen. Auch haben beispielsweise unbefristete Mitarbeiter hier keinen Eintrag.
Ich bin nun auf der Suche nach einer Möglichkeit, wie ich die täglichen Austritte abfangen kann, also die Differenz zwischen mitgelieferten Daten der aktuellen Datei gegenüber der zum Vortag vergleichen kann. Dies sollte jeden Tag automatisiert funktioniert (durch einen Windows Dienst?)
Meine Idee war, dass ich diese beiden csv Dateien Datei H (Heute, im Beispiel oben die Datei mit Newbie) und Datei H-1 (gestern, Datei mit Müller) täglich vergleichen lassen und mir die Austritte jeweils in eine extra Datei, egal ob csv oder Excel, ausgeben lasse, sodass ich am Ende jeden Monats alle Austritte nochmal überprüfen kann.
Im obrigen Beispiel sollte dann beispielsweise der Datensatz zu Herrn Müller in eine Datei übergeben werden inkl den mitgelieferten Informationen wie Eintrittsdatum und Co. und wenn möglich dem aktuellen Tag (oder Zeitpunkt/aktueller Zeitstempel, damit nachvollzogen werden kann, wann genau dieser Mitarbeiter ausgetreten ist)
Leider fehlt mir jede technische Idee, wie ich sowas am schlausten umsetze und technisch realisiere. Hierfür wäre ich euch sehr über eure Ideen dankbar! Ich will ungern zunächst in eine komplett falsche Richtung laufen und danach bemerken, dass dies mir diesem System nicht umsetzbar ist.
Da dies wohl meine Mammutsaufgabe in meinem Praktikum sein wird, bin ich demjenigen, der sich hier die Zeit nimmt, mir bei der Lösungsfindung zu helfen, natürlich sehr, sehr dankbar! Vielen dank!
2 Antworten
Brauchst Du eine Lösung in Excel oder hast Du ggf. auch Access zur Verfügung?
Excel - Lösung mit Makros, grob umrissen welche Schritte mir einfallen würden (die genauen Lösungen kommen aber meist erst, wenn man sich eingehender mit den Gegebenheiten befassen kann):
1.) Daten einlesen: CSV Dateien kannst Du über eine Datenverbindung einlesen - Ribbon Daten > Aus Text (ganz links). Die Datenverbindung kann man mit Makro automatisch aktualisieren (die Datei sollte nur den gleichen Namen tragen, sonst wird es etwas komplexer).
Man kann an dieser Stelle auch das Dateidatum abfragen, um doppeltes Einlesen zu verhindern und ähnlich Plausibilitäten
2.) Die täglich eingelesenen Daten kann man mit Makro in einem Tabellenblatt untereinander sammeln und mit Timestamp versehen. Das ist auch nur copy/paste
3.) Die ausgeschiedenen Mitarbeiter sind mit dem üblichen zählenwenn ermittelbar: Also Personalnummer aus dem aktuellsten Abzug und zählenwenn in dieser Datensammlung. Ist das 0 = nicht gefunden, ist es nach Deiner Definition ein ausgeschiedener Mitarbeiter.
Je nach Anzahl der Mitarbeiter kann man was schlaues bauen oder einfach mit eine For-/Next die aktuellen Daten einzeln durchgehen.
for i=1 to ...
if worksheetfunction.countif.... =0 then datensatz in neue Datei kopieren oder auch ein einem eigenen Tabellenblatt mit Timestamp sammeln und später auswerten.
Das einzige was nicht automatisiert passiert, dass die Sache täglich von alleine abläuft. Da gibt es vielleicht auch Optionen, aber die habe ich spontan nicht im Kopf.
Schwachpunkt des Ansatzes (da dürfen andere gerne ergänzen ;-)
Es müssen täglich die Dateien eingelesen werden, sonst kennst Du den genauen Austrittszeitpunkt nicht.
Vielleicht kommen aber auch noch andere Ansätze, die besser passen. Mit Access bin ich nur bedingt fit - über eine Aktualisierungsabfrage könnte man ggf. die Datensätze jeweils mit neuem Timestamp einlesen (also ein Datum zu den bestehenden Einträge aktualisieren) und diejenigen ohne Aktualisierung herausfiltern. Das müssten die ausgeschiedenen sein.
Hoi welche Überschriften haben die jeweiligen Spalten in der CSV?
https://bitbucket.org/snippets/Ettar/747j9
Das ist n Ansatz dazu. Der geht davon aus, dass die Zeilen die Überschriften "MNummer","NName" und "VName" haben.
Da bräuchte ich ggf. die richtigen Überschriften.
Achja: Soll die alte Datei gelöscht und die "neue" umbenannt werden?
Wäre halt mal wichtig den Header einer der richtigen CSV-Dateien zu haben (zur Not auch per PN).
