Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Frage zu PowerQuery Abfragen

Frage zu PowerQuery Abfragen
19.08.2024 13:12:38
MoritzBernhard
Hallo liebe Leute,

ich würde gerne Wissen, ob Abfragen in PowerQuery welche nur geladen werden und bei einer anderen Abfrage nochmals benutzt werden erneut geladen werden müssen. Ich verwende nämlich PowerQuery gerade um aus dem Internet einen gewissen Datensatz zu bekommen, den ich nicht in meiner Exceltabelle stehen haben will sondern nur zum weiterarbeiten benötige um einen neuen Link zu generieren.

Vielen Dank im Vorraus!
Moritz B.
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu PowerQuery Abfragen
19.08.2024 13:19:09
ralf_b
bei Laden in...
auf "nur Verbindung" stellen, dann wird keine Tabelle in die Mappe geschrieben.
AW: Frage zu PowerQuery Abfragen
19.08.2024 13:39:34
MoritzBernhard
Hi,

ja das ist mir bewusst. Ich möchte allerdings wissen, wenn ich eine neue Funktion auf diese Tabelle anwende ob die dann erneut laden muss oder ob es die bereits vorhandene Tabelle verwendet.

Lg
Anzeige
AW: Frage zu PowerQuery Abfragen
19.08.2024 13:47:18
ralf_b
das kommt wohl auf die Wahl der Quelle an.
Aber ich weis auch nicht genau wie das Powerquery so handhabt.
AW: zu erwarten wäre mE, ...
19.08.2024 13:57:10
neopa C
Hallo Bernd,

... daß eine Aktualisierung nur notwendig wäre, wenn sich die Datenbasis geändert hat nicht aber wenn Du eine andere Auswertung auf diese interne Tabelle vornimmst.

Gruß Werner
.. , - ...
Anzeige
Hmm... Erwartungen
19.08.2024 14:27:13
Yal
Hallo zusammen,

zwar optimiert PQ von vorne rein, alles was optimiert werden kann, aber im Fall einer Abfrage auf einem fremden Datenbestand gibt für PQ keine Möglichkeit, sicherzustellen, dass der Datenbestand der Quelle sich nicht geändert hat. Also bei jedem neuen Aufruf der Abfrage wird die Quelle nochmal abgefragt*. Es gilt auch, wenn die Datenquelle die eigene Exceldatei der Abfrage ist.
Caching findet nur innerhalb einer Verarbeitung statt (u.a. mehrere Aufrufe auf dieselbe Abfrage aus einem einzigen Folgeabfrage). Es wäre ja blöd, wenn bei einer Abfrage die die letzte "Zeile" mit einer anderen Datenbasis als die erste Zeile verarbeiten würde.

Also in Moritzfall: ja, es wird immer komplett aktualisiert, auch wenn bei einer Verkettung von mehrere Abfragen.

*: ob die Quelle den Datenbestand einen Caching vornimmt, ist eine hier nicht relevant. Es wird erneut abgefragt.

VG
Yal

Anzeige
AW: seine Frage hatte ich allerdings anders verstanden ...
19.08.2024 14:43:49
neopa C
Hallo Yal,

... meine bisherigen "Erfahrungen" mit PQ (in XL2016) haben mir gezeigt, dass geänderte (Fremd-)Quelldatenbestände nur berücksichtigt werden, wenn man zuvor eine Aktualisierung erzwungen hat. Wenn man dies nicht tut (also nicht aktualisiert) werden die bisher bereitstehenden Daten von PQ genutzt.

Gruß Werner
.. , - ...
Anzeige
AW: seine Frage hatte ich allerdings anders verstanden ...
19.08.2024 15:00:29
Yal
Hallo Werner,

bezieht sich deine Beobachtung auf dem Vorschau in dem Power Query Editor (verhält sich wie von dir beschrieben: man muss bewusst "Vorschau aktualisieren" anstossen) oder auf den Daten in den Herausgegebenen Tabellen? Im letzteres werden alle voran-verketteten "nur Verbindung"-Abfrage aktualisiert.

Eine Umweg gibt es aber: eine Abfrage herstellen, die Daten in einer Tabelle herausgibt. Dann diese Tabelle -und nicht die dahinterstehende Abfrage!- als Quelle für weitere Verarbeitung verwenden. Dann ist es zu achten, dass man nicht mit "alle aktualisieren" aktualisiert, sondern nur die Tabellen/Abfragen der "zweiten Reihe".

Das Vorteil: man kann damit eine Abfrage der "erste" Reihe haben, die eventuell sehr viel Verarbeitungszeit hat, und dementsprechend nur einmal am Tag zu aktualisieren sei, und eine (oder mehrere) Weiterverarbeitungsabfrage (zweite Reihe), die schnell und effektiv auf diesem zwischen gelagerte Datenbestand zugreifen. Aber die Daten aus der erste Abfrage müssen herausgegeben werden, da sonst keine Möglichkeit gibt, deren Aktualisierung zu steuern.


Ich benutze diesen Kniff u.a. um nur die gefilterte Datensätze einer Abfrage zu weiterverarbeiten. Ich lege die Formel =TEILERGEBNIS(103;A2) als Zusatzspalte der ersten Ausgabetabelle an. Ergibt null, wenn ausgeblendet, 1 wenn sichtbar. Das kann man in PQ weiterverarbeiten.

VG
Yal
Anzeige
AW: hierzu ...
19.08.2024 15:28:45
neopa C
Hallo Yal,

... danke für Deine ausführliche Informationen
Meine diesbzgl. "Beobachtungen" bezogen sich auf festgestellte Endergebnisse in einer Abfragekette und zwar einer, wo ich Daten über mehrere Tabellen (in Kette) hinweg auswerte. Da in meinem Fall keine sich ständig ändernden Quelldaten sind, reicht mir das einmalige Aktualisieren innerhalb des jeweiligen "Kettengliedes", wenn ich ein aktuelles Endergebnis sehen möchte. Du verstehst sicher was ich meine.

Wenn ich diese jeweilige Aktualisierung nicht vornehme, kann ich im "Endkettenglied" beliebige andere Auswertungen auf Basis der bisherigen Zwischentabellen (welche nur intern abgelegt sind) vornehmen. Und so hatte ich die Ausgangsfragestellung verstanden.

Gruß Werner
.. , - ...
Anzeige
Forschungsergebnis
19.08.2024 20:20:26
Yal
Moin,

ich wollte es wissen: ich habe eine PQ-Abfrage auf die Webseite https://www.timeanddate.de/uhrzeit/ eingerichtet, die neben der Webabfrage ein paar Transformation vornimmt. Vorteil ist, dass aufgrund der stets aktuellen Uhrzeiten jede Minuten ein neues Ergebnis zu erwarten ist.
Diese Abfrage "DateAndTime" liefert ihre Ergebnis in der Tabelle "DateAndTime".

Darauf, also verkettet auf die Abfrage, habe ich eine minimalistische Abfrage "Tabelle_Erg", die nur 3 Zeiten aus der erste filtert. Auch mit Ausgabe. Ich kann unter Excel beide Abfragen einzel aktualisieren.

Wenn ich "Tabelle_Erg" aktualisiere, werden immer die neueste Uhrzeit angezeigt, spricht die vorangestellte Abfrage "DateAndTime" wird immer neu abgefragt. Die Herausgabe in der Tabelle "DateAndTime" ändert sich nicht. So muss es sein.


Um genauer zu testen habe ich die Ausgabenaktualisierung per VBA angestossen. 10 mal in Schleife, dabei die Durchschnittszeiten aufgenommen.

Wenn nur "DateAndTime" aktualisiert wird, dauert es ca. 0,55 Sek.
Wenn nur "Tabelle_Erg", ca. 0,59 Sek. Leicht länger, aber unwesentlich.

Wenn beide unmittelbar nacheinander aktualisiert werden, und zwar
einmal in der natürlichen Reihenfolge "DateAndTime" und "Tabelle_Erg"
und einmal umgekehrt "Tabelle_Erg" und "DateAndTime",
sind beide Zeiten auf dieselbe Höhe und entsprechen ca. die Summe der einzelnen.

Also es kommt -mMn- zu keinen Zeitpunkt zu einem lokalen Caching, wo "Tabelle_Erg" auf einem lokalen Zwischenspeicher der Ergebnis von "DateAndTime" zugreift und der Laufzeit damit optimiert.
Es ist natürlich nur oberflächlich und nicht wissenschaftlich geforscht. Aber die Richtung stimmt.

VG
Yal


Für die Powerqueristen, hier den M-Code zu der Abfrage:
let

Quelle = Web.Page(Web.Contents("https://www.timeanddate.de/uhrzeit/")),
Data0 = Quelle{0}[Data],
#"Geänderter Typ" = Table.TransformColumnTypes(Data0,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}}),
#"Zusammengeführte Spalten" = Table.CombineColumns(#"Geänderter Typ",{"Column2", "Column3"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt"),
#"Zusammengeführte Spalten1" = Table.CombineColumns(#"Zusammengeführte Spalten",{"Column4", "Column5"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt.1"),
#"Zusammengeführte Spalten2" = Table.CombineColumns(#"Zusammengeführte Spalten1",{"Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt.2"),
#"Zusammengeführte Spalten3" = Table.CombineColumns(Table.TransformColumnTypes(#"Zusammengeführte Spalten2", {{"Column9", type text}}, "de-DE"),{"Column8", "Column9"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt.3"),
#"Zusammengeführte Spalten4" = Table.CombineColumns(#"Zusammengeführte Spalten3",{"Column10", "Column11"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt.4"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Zusammengeführte Spalten4",{"Column1"}),
#"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Entfernte Spalten", {}, "Attribut", "Wert"),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Entpivotierte Spalten",{"Attribut"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Entfernte Spalten1", each ([Wert] > ";")),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Gefilterte Zeilen", "Wert", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Ort", "Zeit"}),
#"Spalte nach Trennzeichen teilen1" = Table.SplitColumn(#"Spalte nach Trennzeichen teilen", "Zeit", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Tag", "Zeit"}),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen1",{{"Ort", type text}, {"Tag", type text}, {"Zeit", type time}}),
#"Aufgerufene benutzerdefinierte Funktion" = Table.AddColumn(#"Geänderter Typ1", "Datum_erzeugen", each Datum_erzeugen([Tag])),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Aufgerufene benutzerdefinierte Funktion", "aktueller Zeit", each DateTime.From ( [Datum_erzeugen] & [Zeit]), type datetime),
#"Sortierte Zeilen" = Table.Sort(#"Hinzugefügte benutzerdefinierte Spalte",{{"Datum_erzeugen", Order.Ascending}, {"Zeit", Order.Ascending}}),
#"Entfernte Spalten2" = Table.RemoveColumns(#"Sortierte Zeilen",{"Tag", "Zeit", "Datum_erzeugen"})
in
#"Entfernte Spalten2"

und die Funktion "Datum_erzeugen":
let

Quelle = (Dat as text) => let
Quelle = Table.FromRecords( {
[Datum=Date.AddDays(Date.From(DateTime.FixedLocalNow()), -1)],
[Datum=Date.AddDays(Date.From(DateTime.FixedLocalNow()), 0)],
[Datum=Date.AddDays(Date.From(DateTime.FixedLocalNow()), 1)]
}),
Wochentag = Table.AddColumn(Quelle, "Wochentag", each Date.ToText([Datum], [Format="ddd", Culture="de-DE"])),
#"Gefilterte Zeilen" = Table.SelectRows(Wochentag, each ([Wochentag] = Dat)),
Datum = #"Gefilterte Zeilen"{0}[Datum]
in
Datum
in
Quelle
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige