Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden
This post is also available in:
Englisch
Was erstmal kompliziert und wenig sinnvoll klingt, ist in der Praxis immer mal wieder anzutreffen. Vor kurzem stellte mich der automatisierte Export von Quelldaten eines anderen Programms im CSV-Format vor diese Aufgabe.
Täglicher Ordner für automatisierten Export
Leider ließ sich beim Export aus dem Quellsystem – abgesehen vom Zielverzeichnis – herzlich wenig einstellen. Die Folge ist, dass der automatisierte Export-Job täglich einen neuen Ordner mit dem aktuellem Datum erstellt, analog zu dem folgenden Beispiel:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 1 image 4](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-4.png)
In diesem Beispiel müssen lediglich die Dateien aus dem neusten Ordner geladen werden, da dieser jeweils die vollständigen Daten enthält. Allerdings ändern sich auch die Dateinamen mit dem täglichen Export. Die Struktur lässt sich aus der folgenden Darstellung erkennen:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 2 image 5](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-5.png)
Zum Laden der neusten Daten müssen wir somit:
- Den neusten Ordner ermitteln
- Das Datum aus dem Ordnernamen als Variable bzw. als Funktion speichern
- Den Ordner und die Dateien dynamisch mit der Variablen bzw. Funktion laden
1. Den neusten Ordner ermitteln
Um die Informationen über die vorhandenen Ordner herauszufinden, müssen wir diese erstmal ins Power Query laden. Wichtig hierbei, wir legen den Ordnernamen im Power Query gleich schon als Parameter an, da wir diesen zwingend für ein späteres dynamisches Laden benötigen:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 3 image 14](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-14.png)
Danach können wir den Ordner ins Power Query laden:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 4 image 6](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-6.png)
Hier erhalten wir viele Informationen über die Dateien, welche sich in den Unterordnern befinden. Allerdings nicht den Inhalt selbst. Dies wird oft missverstanden beim Laden von Ordnern. Uns interessiert aber nur die letzte Spalte “Folder Path”, welche uns den Pfad der jeweiligen Datei anzeigt:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 5 image 7](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-7-1024x189.png)
Entsprechend entfernen wir alle anderen Spalten außer “Folder Path”, entfernen doppelte Werte, entfernen alles vor dem Trennzeichen “_” und sortieren absteigend, um den neusten Ordner an oberster Stelle zu erhalten:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 6 image 8](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-8.png)
Mit der keep top rows Funktion behalten wir nur noch den obersten/neusten Datensatz:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 7 image 9](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-9.png)
Jetzt kommt einer der entscheidenden Schritte. Aktuell haben wir lediglich eine Tabelle mit einem Datensatz. Damit wir den Ordnernamen und somit auch das Datum aus den Dateinamen später als dynamischen Wert haben, müssen wir auf diesen Wert mit der “drill down” Funktion heruntergehen. Dies lässt sich mit der rechten Maustaste erreichen:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 8 image 10](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-10.png)
Jetzt gibt es noch eine Sache anzupassen. Da wir manuell auf den Wert runter drillen, wird der Wert in der Formel statisch hinterlegt:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 9 image 12](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-12.png)
Dies würde bei einer Änderung des Ordnernamens einen Fehler hervorrufen. Daher ersetzen wir den statischen Wert, auf welchen herunter gedrillt werden soll, durch die Zeilennummer. Diese startet nicht bei 1, sondern wie oft in Programmiersprachen bei 0:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 10 image 13](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-13.png)
Da ich auf dieses Ergebnis im nächsten Schritt verweise, benenne ich die Query als “TemplateDynamicSourceFolder”:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 11 image 15](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-15.png)
2. Das Datum aus dem Ordnernamen als Parameter bzw. als Funktion speichern
In Schritt 1 haben wir somit den dynamischen Teil der Ordner- und Dateinamen extrahiert und theoretisch könnten wir in den anderen Abfragen auf dieses Ergebnis zugreifen.
Wenn wir eine der Sales_per_Employee Dateien geladen haben, können wir versuchen diese mit der gerade erstellten Funktion zu dynamisieren.
Dies können wir im erweiterten Editor direkt selbst ausprobieren:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 12 image 16](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-16-1024x146.png)
Rein theoretisch sollte es funktionieren, allerdings kommt die folgende Fehlermeldung:
Formula.Firewall: Query 'Sales_per_Employee' (step 'Changed Type') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 13 image 17](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-17-1024x82.png)
Grund des Fehlers ist – in der kurzen Version – dass Power Query es nicht erlaubt eine zusätzliche externe Datenquelle in der Query zu verwenden. Ken Puls hat dies in seinem Blog bereits detailliert beschrieben. Wir haben daher 2 Möglichkeiten, wie wir dies umgehen können:
- Wir können in die selbe Abfrage im Power Query unserer Abfrage aus dem ersten Schritt integrieren (s. Demo-Datei am Ende des Artikels)
- Wir können unsere in Schritt 1 erschaffene Abfrage in eine Funktion umwandeln
Womit wir auch zum letzten Schritt kommen
3. Den Ordner und die Dateien dynamisch mit der Variablen bzw. Funktion laden
Wie gesagt bekommen wir diesen Fehler nicht, wenn wir die Ermittlung des Ordnernamens aus Schritt 1 als Funktion definieren. Hierzu einfach mit der rechten Maustaste auf die Query aus Schritt1 klicken und “Create Function” auswählen:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 14 image 18](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-18.png)
Die Funktion benötigt noch einen Namen und einen Parameter. Da wir den Parameter aber bereits im ersten Schritt gesetzt hatten, müssen wir einfach einen Funktionsnamen vergeben:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 15 image 19](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-19.png)
Es wird automatisch ein neuer Ordner erstellt mit der Funktion, sowie der zugehörigen Query:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 16 image 20](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-20.png)
Beim Dynamisieren können wir nun die Jahreszahlen durch unsere Funktion ersetzen, welche ja das Datum des letzten Ordners zurückliefert:
![Dateien mit ändernden Namen aus Ordnern mit ändernden Namen in Power Query laden 17 image 21](https://whatthefact.bi/wordpress/wp-content/uploads/2020/10/image-21-1024x143.png)
Der Load funktioniert durch die Funktion fehlerfrei und aktualisiert sich immer auf die neusten Dateien aus dem neusten Ordner.
Download Beispieldatei und Quelldateien für diesen Artikel