Aufrufe: 2080
Vorbemerkung: Der ganze Artikel wurde im Dezember 2018 überarbeitet.
Nachdem ich Euch im Beitrag Speichern von Internetdateien mit Power BI Desktop – Teil 1 gezeigt habe, wie Ihr unter Zuhilfenahme von R ganz einfach Dateien runterladen und speichern könnt, werde ich Euch in diesem Teil zeigen, wie ihr dies auch dynamisch erledigen könnt.
Willst du Power BI lernen?
Auf unseren neuen Seite Power BI Coach haben wir einen Onlinekurs zusammengestellt.
Die vorgestellte Methode hat einen Nachteil – sie ist starr. Sowohl die Quelle als auch das Ziel wurden fix erfasst. Zum ändern muss der Benutzer das R-Skript anpassen. Wahrlich nicht benutzerfreundlich. Hier benötigen wir einen anderen Weg!
Parameter…..
Parameter sind grossartig und werden uns helfen, die ganze Abfrage dynamischer zu gestalten. Ziel ist es, für jeden fix eingegebenen Wert einen Parameter zu erstellen. Wir benötigen daher sechs neue Parameter
- URL (https://www.six-swiss-exchange.com/shares/companies/download/)
- Quelldatei (issuers_all_en.csv)
- Laufwerk (c:/)
- Ordner (Power BI/)
- Unterordner (Securities/)
- Zieldatei (dynamischer_Download.csv)
Das Erstellen der Parameter zeige ich anhand des ersten im Detail und werde danach noch die notwendigen Angaben für die restlichen Parameter angeben. Als Erstes erstellen wir uns also den Parameter “SourceURL”:

und geben die notwendigen Angaben ein:

.. klicken “OK” und schon haben wir den Parameter erfasst.
Ich habe bewusst den Pfad der Homepage vom Dateinamen getrennt. Falls auf der Seite mehrere Dateien zum Download angegeben werden, kann ich diese individuell ansteuern.
Nachstehend die Angaben zu den restlichen Parameter:
…. Parameter für die Quelldatei:
Name = SourceFileName
Beschreibung = Name der Datei
Typ = Text
Vorgeschlagener Wert = Beliebiger Wert
aktueller Wert = issuers_all_en.csv
…. Parameter für das Ziel-Laufwerk:
Name = mainDir
Beschreibung = Name des Speicherordners
Typ = Text
Vorgeschlagener Wert = Beliebiger Wert
aktueller Wert = C:/
…. Hauptordner:
Name = subDir
Beschreibung = Name des Speicherordners
Typ = Text
Vorgeschlagener Wert = Beliebiger Wert
aktueller Wert = Power BI/
…. Unterordner:
Name = subDir2
Beschreibung = Name des Speicherordners
Typ = Text
Vorgeschlagener Wert = Beliebiger Wert
aktueller Wert = Securities/
….und noch einen weiteren für den gewünschten Dateinamen:
Name = DestinationFile
Beschreibung = Name der gespeicherten Datei
Typ = Text
Vorgeschlagener Wert = Beliebiger Wert
aktueller Wert = dynamischer_Download.csv
So, das wäre es dann auch schon. Wir haben soeben sechs Parameter erstellt, die uns die ganze Abfrage dynamisch halten.
….funktionieren in “R” nicht…
Also verwenden wir doch diese Parameter im “R” Skript. Versuchen wir mal, die Werte durch die Parameter zu ersetzen.

….und drücken “OK”….

…. und wir erhalten eine unschöne Fehlermeldung!
Ich kann es kurz machen: ich habe keinen Weg gefunden, innerhalb des R Skripts das Ganze mit Parameter zum Laufen zu bringen.
R Code als Textvariable erfassen
Was tun?
Wer schon mit anderen Programmiersprachen gearbeitet hat, kennt sicherlich den Trick, ein Statement als Textvariable zu erfassen und dann auszuführen. Und tatsächlich, dieser Weg funktioniert auch hier!
1. Schritt: R-Skript auslagern
Als erstes trennen wir den eigentlichen R-Code vom Ausführungsstatement. Der Code bis jetzt sieht wie folgt aus:

Den ganzen roten Teil nach R.Exceute werden wir nun in einen eigenen Arbeitsschritt auslagern. Das sieht dann wie folgt aus:

2. Schritt: Parameter einfügen
Nun sind wir in der Lage, den R-Code anzupassen. Eine Besonderheit dabei ist, dass sämtliche doppelten Anführungszeichen durch vier Anführungszeichen ersetzt werden müssen. Aus “” wird also “”””.
Zur besseren graphischen Darstellung kann statt “””” auch “””#(lf)” verwendet werden und so ein Textumbruch im R-Skript erzwungen werden.
Und wie üblich müssen die einzelnen Textbestandteile und Parameter mit dem Verknüpfungszeichen & zusammen gefügt werden.
Ich habe also im Query Editor den erforderlichen String wie folgt zusammengesetzt und die ersetzten Bestandteile auskommentiert (in grün):

Der Haupteil der Arbeit ist das Einfügen der Parameter sowie das ersetzen der doppelten Anführungszeichen wie in diesem Ausschnitt.
RScript =
“#Define download file #(lf)”
& “URL <- ” & “””” & SourceURL & SourceFileName & “””#(lf)”
& “#Define Destination – use forward slash instead of back slash! #(lf)”
& “mainDir <- ” & “””” & mainDir & “””#(lf)”
& “subDir <- ” & “””” & subDir & “””#(lf)”
& “subDir2 <- ” & “””” & subDir2 & “””#(lf)”
& “filename <- ” & “””” & filename & “””#(lf)”
& “Destination <- paste(mainDir,subDir,subDir2, filename, sep=””””)
Der Rest bleibt unverändert.
3. Schritt: angepasster Code ausführen
Durch die Auslagerung des R-Skripts betrachet PowerBI das ganze als native Abfrage auf eine Datenbank und eine Meldung aus. Aber mit einem Klick auf “Berechtigung bearbeiten” erscheint das nächste Fenster, welches mit “OK” zu bestätigen ist.

In diesem Bild ist ersichtlich, wie mein String innerhalb des “R” Editors schon richtig umgewandelt wurde.
Und wir erhalten das gewünschte Resultat.

Nach Erweiterung der Spalte “Value” sehen wir auch die ganze Tabelle.

Zum Schluss noch der Beweis, dass die Datei auch wirklich angelegt wurde noch ein Screenshot des Zielordners mit der neuen Datei:

Schlussfolgerung
Mit der überarbeiteten Methode ist auch das dynamische Speichern von Internetdateien mit Power BI Desktop jederzeit möglich. Die Möglichkeiten sind einzig durch Eure Fantasie begrenzt.
Nachstehend der ganze Code:
Die pbix-Datei könnt ihr hier runterladen: Link
Mehr Artikel über Power Query findet Ihr im Power Query Online Buch.
Happy Quering!
Pingback:Speichern von Internetdateien mit Power BI Desktop - PowerBI Pro