Clever-Excel-Forum

Normale Version: Zeilen in Abfrage einfach anhängen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

frage zu Excel in Zusammenarbeit mit Powerquery:

Kurze Erklärung
  • Ich sammle auf einem esp32 Energiedaten meines Hauses alle 15 Minuten als .txt Datei
  • diese Datei lese ich in Excel mit Powerquery ein und die Daten werden in eine Excel Tabelle geschrieben

  • Ich möchte nicht jedes mal die gesamte Datei einlesen, sondern nur die ab dem letzten Eintrag in der Tabelle
    letzter Eintrag in der Excel Tabelle vom 05.01.2023 12:00

  • also soll alles was schon da stand stehen bleiben
    und alle Einträge aus der .txt
    ab 05.01.2023 12:15 in die Tabelle übernommen werden

  • Letze Datenzeile in der .txt wäre z.B. 06.01.2023 08:30
    [attachment=50413]

  • Somit wäre das die neue letzte Zeile in der Excel Tabelle und auch Grundlage zur nächsten Datenabfrage

Grundsätzlich funktioniert die Abfrage, nur werden mir immer alle Zeilen aus der Tabelle mit neueren Daten überschrieben,
sodass ich immer nur maximal einen Tag in der Tabelle habe und nicht eine Tabelle habe die jeden Wert alle 15 Minuten hat eines Tages bzw. Monat oder Jahr hat.

Ich hoffe ich konnte es gut erklären
Hallöchen,

eine (einfache) Lösung:
hole die Daten auf einem anderen Blatt und kopiere die Zeile an die vorhandene Tabelle. Könnte man auch mit einem Makro unterstützen.

ein (komplizierterer?) Ansatz:
keep-the-existing-data-in-your-power-bi-dataset-and-add-new-data-to-it-using-incremental-refresh

und noch einer:
Import des Datensatzes mit einem Makro
(06.01.2024, 08:52)meierchen006 schrieb: [ -> ][*]Ich möchte nicht jedes mal die gesamte Datei einlesen, sondern nur die ab dem letzten Eintrag in der Tabelle
letzter Eintrag in der Excel Tabelle vom 05.01.2023 12:00
[*]

Hi,
auf das Einlesen hast Du keinen Einfluss. Es werden immer alle Daten der Quelle eingelesen. Nur auf die Schritte danach kannst Du Einfluss nehmen.
Du könntest also danach den Maxwert von Datum und Zeit ermitteln und alle Zeilen bis dahin entfernen, ergibt aber keinen Sinn, weil Du die schon gemessenen Daten ja nicht entfernen willst. Allerdings könntest Du danach filtern...
Hi,

wenn du die Ergebnistabelle auch als Quelle definierst, und diese an die eigentliche Abfrage anfügst, dann noch Duplikat entferntst hast du dein gewünschtes Ergebnis. Bei einer Suche nach Selbstreferenzkette Poqeerquery-Abfrage müsstest du dazu fündig werden.

Viele Grüße
derHoepp
..ändert jedoch nichts daran, dass die eigentliche Quelle trotzdem immer wieder komplett eingelesen wird... Der Effekt bei Deinem vorgeschlagenem Weg wären 2 Tabellen. Nicht wirklich ein Effizienzgewinn... bestenfalls eine im Grunde genommen überflüssige weil zusätzliche Schöhnheitsoperation...  Smile
Alles,was Du in der 2. Tabelle machst, kannst Du auch gleich in der 1. erledigen, jedoch nicht alles, was in der 2. gemacht werden muss, ist in der 1. überhaupt notwendig...
Hallo,

da es scheinbar keine einfache Lösung gibt, werde ich wie im Letzten Jahr dann wieder meine Daten wieder in eine zweite Tabelle kopieren, somit habe ich dann meine Datensammlung wie gewünscht.

[attachment=50419]

Ich hätte gedacht es gäbe solch ein Menü ohne löschen der Daten (wie markiert)

Trotzdem Danke an die die mir helfen wollten.
Moin,

ich glaube, dass mein Vorschlag genau das war, was du suchst und die Lösung auch recht einfach ist. Wenn ich das richtig verstanden habe, erhältst du aus einem Datenlogger eine Textdatei, die täglich überschrieben wird (in meinem Beispiel habe ich diese mal "TrackerExport.txt" genannt). Du möchtest in Excel nicht nur die jeweils aktuellen Werte, sondern auch die historischen Werte einlesen. Das funktioniert, in dem du einmalig die Liste mit Powerquery einliest, die Abfrage eindeutig benennst (in meinem Beispiel "TrackerData") und das Ergebnis der Abfrage als Tabelle in ein Arbeitsblatt lädst.
Nachdem die Abfrage einmalig geladen wurde, kannst du diese einfach ergänzen, in dem du mit Table.Combine() die Daten aus genau dieser Abfrage noch einmal an den Inhalt der Textdatei anfügst. Mit Table.Distinct() schließt du dabei möglicherweise doppelte Sachverhalte aus. Bei mir sieht der zugehörige M-Code dabei so aus:

Code:
let
    CurrentSource = Csv.Document(File.Contents("C:\Daten\PQ\Tracker_Export.txt"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    PromotedHeaders = Table.PromoteHeaders(CurrentSource, [PromoteAllScalars=true]),
    CurrentData = Table.TransformColumnTypes(PromotedHeaders,{{"TimeStamp", type datetime}, {"Value", Int64.Type}}),
    AddHistory = Table.Distinct(Table.Combine({CurrentData, Excel.CurrentWorkbook(){[Name="TrackerData"]}[Content]}))
in
    AddHistory

Ich habe die einzelnen Schritte dabei etwas sprechender benannt.

Viele Grüße
derHöpp