Power Query – Endlosschleifen bei Webaufrufen vermeiden

This post is also available in: en

Hits: 1025

Dieser Artikel ist eine Übersetzung meines englischen Beitrags vom 28. April 2017.

Das Thema Iteration über eine unbekannte Anzahl von Seiten in Power Query wurde bereits mehrfach von verschiedenen Autoren behandelt. Der erste, den ich kenne, war Matt Masson, der die Technik einer vorgenerierten Liste von Seitenzahlen verwendete (PageRange = {1..10000}).

Diese Technik funktioniert gut, kann aber zu einer langen Abfrageausführungszeit oder sogar einem Timeout führen, wenn die Drosselgrenze auf bestimmten Seiten erreicht wird.

Omri Avissar hat eine neue Lösung gefunden. Der Vorteil seiner Lösung ist eine kürzere Ausführungszeit und eine geringere Chance, in ein Time-Out zu laufen. Eine tolle Lösung!

…Unendliche Loops

Neulich musste ich aber feststellen, dass diese Lösung nicht in jedem Fall funktioniert. Ich habe eine Abfrage geschrieben, um Daten aus dem Power BI Kudos Leaderboard (1 Day). Das Leaderboard umfasst nur 2 Seiten und 5’000 Zeilen HTML-Code. Die Abfrage war unglaublich langsam!

Nach einigen Tests und Reverse Engineering habe ich festgestellt, dass die Seite auf die letzte Seite umgeleitet wird, wenn der Parameterwert größer als die Nummer der letzten Seite ist.

Der Aufruf “http://community.powerbi.com/t5/kudos/leaderboardpage/board-id/power-bi-designer/timerange/one_day/tab/authors/page/3”
wurde umgeleitet nach
“http://community.powerbi.com/t5/kudos/leaderboardpage/board-id/power-bi-designer/timerange/one_day/tab/authors/page/2).”

Der nächste Aufruf war Seite 4, dann 5 usw. Das Ergebnis waren immer die Daten der Seite 2. Eine Endlosschleife! Danke für das Microsoft 😉

Lösung

Also musste ich eine Technik finden, um die gesendete URL mit der empfangenen URL zu vergleichen. Glücklicherweise stellt die Seite die URL im HTML-Code in Zeile 13 zur Verfügung:

<meta content="Data shaping, modeling, and report building in the Power BI Desktop app." name="description"/><meta content="noindex" name="robots"/><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><link href="http://community.powerbi.com/t5/kudos/leaderboardpage/board-id/power-bi-designer/timerange/one_day/tab/authors/page/2" rel="canonical"/>

Dank des Power Query-Befehls “Text.BetweenDelimiters” konnte ich die gewünschten Informationen aus dem HTML-Code holen:

Function_fnGetHTML

Die Funktion erhält die URL und die Seitenzahl als Eingabe und ruft die Webseite auf. Da die Seite keine brauchbaren Tabellen enthält (……………….), musste ich den HTML-Code importieren, nach der gewünschten Codezeile suchen und das Ergebnis mit der ursprünglichen URL vergleichen. Wenn es sich um eine Übereinstimmung handelt, gibt die Funktion den gesamten HTML-Code zur weiteren Bereinigung zurück oder das Ergebnis ist “falsch”.

Alles, was ich noch tun musste, war, eine Abfrage zu schreiben, welche die Funktion verwendet.Query_Desktop_24Hours

Ich habe die Technik von Omri Avissar angepasst und… voilà, es funktionierte!  Mit einer kleinen Funktion konnte ich die Daten in kurzer Zeit abrufen.

Ich hoffe, dass Euch der Beitrag gefallen hat. Bitte hinterlasst Eure Anregungen und Kritiken wie immer gerne im Kommentar.

Mehr über Power BI und insbesondere Power Query findet Ihr im Power Query Online Buch.

Happy Querying!

Artikel ist hilfreich
1
Verständlichkeit
1
Artikellänge
1
Durchschnitt:
  Wird geladen, bitte warten yasr-loader
Deine Bewertung
[Total: 0 Average: 0]

Kommentar verfassen

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website stores some user agent data. These data are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. You may find further informations here: Privacy Policy   If you decide to opt-out of any future tracking, a cookie will be set up in your browser to remember this choice for one year. I Agree, Deny
872
%d Bloggern gefällt das: