dynamisches Speichern von Internetdateien mit Power BI Desktop

Hits: 740

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.

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”:

image

und geben die notwendigen Angaben ein:

image

.. 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.

image

….und drücken “OK”….

image

…. 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:

bisheriger M Code
bisheriger M Code

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

M Code mit ausgelagertem R-Skript
M Code mit ausgelagertem R-Skript

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):

M Code mit dynamischen R Skript
M Code mit dynamischen R Skript

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.

image

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

image

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!

Ein Gedanke zu „dynamisches Speichern von Internetdateien mit Power BI Desktop

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

%d Bloggern gefällt das: