Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dynamische Spaltennamen Power Query

Dynamische Spaltennamen Power Query
17.08.2022 08:57:02
Lars
Hallo zusammen,
ich bin auf folgendes Problem gestoßen:
Ich möchte am Ende einer Tabelle eine berechnete Spalte mittels Power Query einfügen, die immer die Differenz der letzten beiden Spalten berechnet. Ich habe etliche Versuche gestartet dies umzusetzen. Leider sind alle gescheitert.
Ich benötige das, um immer eine Differenz von Werten (z.B. Bestellungen pro Kunde und Tag) berechnen zu können. Hier soll dann immer die Differenz der Bestellungen des aktuellen Tages zu den Bestellungen des Vortages berechnet werden. Diese Differenz finden Sie in der angehängten Datei in Spalte G.
Am Folgetag soll dann beispielhaft die Differenz der Werte vom 11.01.2022 zu denen vom 10.01.2022 berechnet werden. Die letzte Spalte der Tabelle wird allerdings nicht immer der nächste Tag im Vergleich zur vorletzten Spalte sein. Beispielweise könnte hier auch die Differenz der Werte vom 20.01.2022 zu denen vom 10.01.2022 berechnet werden.
Über einen Lösungsvorschlag wäre ich echt dankbar.
https://www.herber.de/bbs/user/154674.xlsx
Freundliche Grüße
Lars

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamische Spaltennamen Power Query
17.08.2022 09:36:17
Bernhard
Hallo Lars,
ich glaube nicht, dass das mit PQ möglich ist, da deine Tabelle jeden Tag wächst und sich dein Ziel der Abfrage damit jedes Mal verschiebt.
Die Möglichkeiten mit dem M Code sind groß und vielleicht ist es doch möglich.
Ich schau mal weiter, wenn ich was Finde poste ich es dir hier.
Gruß
Bernhard
AW: Dynamische Spaltennamen Power Query
17.08.2022 09:48:43
Lars
Hallo Bernhard,
Danke für die schnelle Antwort. Ich hatte gestern noch versucht die Spaltennamen über Verschachtelung von Table.ColumnNames und List.Last / List.First dynamisch zu ermitteln. Das hat so weit auch funktioniert, allerdings kam dann immer einer Fehlermeldung, dass die Subtraktion nicht ausgeführt werden konnte. Ich glaube dass PQ hier einfach die Datumsangaben subtrahieren wollte, die natürlich als Text formatiert sind. Auf die Werte der jeweiligen Spalte konnte nicht zugegriffen werden. Ich denke das müsste man irgendwie hinkriegen können, damit es funktioniert.
VG
Lars
Anzeige
AW: Doch Bernhard, IMHO: es geht…
17.08.2022 15:52:10
Lars
Hallo Bernhard,
hallo Günther,
habe es in der Zwischenzeit durch Ausprobieren selbst hinbekommen.
Folgendermaßen bin ich vorgegangen:
1. Überschriften als erste Zeile verwenden
2. Über "Spalte hinzufügen" Subtraktion als letzte Spalte eingefügt (Differenz letzte Datumsspalte - vorletzte Datumsspalte)
3. Erneut Überschriften als erste Zeile herabgestuft
4. Den Wert "Column 1" aus der Spalte "Column 1" herausgefiltert
5. Erste Zeile als Überschriften verwenden
6. letzte Spalte umbenennen mit folgendem Code
= Table.RenameColumns(#"Höher gestufte Header",{{List.Last(Table.ColumnNames(#"Höher gestufte Header") ), "Delta prev. day"}})
VG
Lars
Anzeige
AW: Doch Bernhard, IMHO: es geht…
17.08.2022 20:39:49
Günther
Ja Lars, bei exakt dieser Datenlage funzt das.
Mein "IMHO" war darauf bezogen, dass (wie so oft im Nachhinein angemerkt) beispielsweise einer oder beide der letzten Tage keine Daten enthält (oder noch anders), denn nicht immer kauft jeder Kunde täglich … ☹
(aber auch das ist mit PQ lösbar. ☺)
Gruß
Günther  |  mein Excel-Blog
AW: Doch Bernhard, IMHO: es geht…
17.08.2022 21:11:09
Lars
Hallo Günther,
Da hast du natürlich absolut recht. Hast du denn einen robusteren Ansatz? Das muss doch mit einem entsprechenden M-Code relativ einfach umsetzbar sein, oder? Problem entsteht nur dann, wenn ich mehr soder weniger Spalten habe. Das konnte ich bisher nicht lösen.
Über eine Idee wär ich dich sehr dankbar.
Danke und schönen Abend
Lars
Anzeige
AW: Doch Bernhard, IMHO: es geht…
18.08.2022 00:56:24
Günther
… Lars, klick doch einfach einmal auf meinen Namen (unter dem "Gruß" ☺
 
Gruß
Günther  |  mein Excel-Blog
AW: Doch Bernhard, IMHO: es geht…
18.08.2022 23:48:24
Luschi
Hallo Lars,
hier mal meine PQ-M-Variante, wobei per RecordField die Berechnung durchgeführt wird. Das Problem ist nicht der eigentliche Code, sondern die Dynamisierung, da bei Dir ja ständig Spalten hinzukommen und so immer die letzten 3 Spalten dynamisch gehalten werden müssen.
https://www.herber.de/bbs/user/154718.xlsx
Gruß von Luschi
aus klein-Paris
Anzeige
AW: dazu kann ich nur feststellen ...
19.08.2022 10:32:35
neopa
Hallo Luschi,
... dass Deine Lösung noch nicht korrekt ist.
Abgesehen davon, dass die Spalte "Delta zum Vortag" in der Datentabelle nicht sinnvoll ist, wenn man die Datentabelle täglich fort schreiben möchte, war mir zunächst noch folgendes aufgefallen:
Wenn ein Datenwert nicht erfasst ist/wurde, wird kein Delta ermittelt. Das wäre/ist noch ganz leicht zu korrigieren (Ersetzen der "null" durch 0). Aber dann hab ich mal in der Datentabelle die Spalte vor dem Delta gelöscht. Das ergab dann eine Fehlermeldung bei der Aktivierung der Aktualisierung. Die gleiche Fehlermeldung ergab sich, wenn ich das Datum in I1 korrigiert habe. Evtl. liegt es auch nur an meiner XL2016er XL-Version.
Gruß Werner
.. , - ...
Anzeige
@Luschi: noch eine weitere Frage
23.08.2022 22:05:37
Lars
Hallo Luschi,
hallo Werner,
ich bin die Lösungsdateien von euch Beiden einmal durchgegangen. Werner deine Lösung konnte ich so weit gut nachvollziehen, weil interaktiv erstellt. In der Realität habe ich es mit sehr großen Datenmengen zu tun, weshalb der eine oder andere Schritt vielleicht dazu führen kann, dass die Abfrage sehr träge wird. Das muss ich allerdings noch austesten. Ansonsten funktioniert die Variante sehr gut. Ich habe sie noch etwas angepasst, um sie etwas robuster zu machen für die Fälle, dass sich Anzahl und Namen der Spalten ständig ändern. Vor allem die Typenerkennung habe ich herausgenommen.
@Luschi: deine Variante gefällt mir deshalb auch sehr gut, weil du recht viel in einen M-Code packst, den ich ehrlicherweise allerdings noch nicht ganz verstehe. Das muss ich mir in Ruhe mal zu Gemüte führen und nachvollziehen. Wie Werner bereits angemerkt hat, ist die Spalte "Delta prev day" in den Rohdaten normalerweise nicht zu finden. Ich habe sie daher in der nachfolgenden Datei einmal entfernt. Jetzt habe ich aber das Problem, dass die eigentliche letzte Spalte "18.01.2022" nun als Differenzspalte "umgebaut" / überschrieben wird. Wie muss ich deinen Code anpassen, um dies zu verhindern?
Vielen Dank euch Beiden für die hilfreichen Tipps. Echt super.
https://www.herber.de/bbs/user/154781.xlsx
Schönen Abend und VG
Lars
Anzeige
AW: @Luschi: noch eine weitere Frage
24.08.2022 07:08:47
Luschi
Hallo Lars,
das ich mit meinem Lösungsansatz richtig lag, zeigt der jetzt nur minimal geänderte M-Code. Zu klären wäre noch, wie gerechnet werden soll, wenn einer der beiden Werte fehlt, dann bleibt jetzt das Ergebnis für diese Zeile leer: https://www.herber.de/bbs/user/154782.xlsx
Gruß von Luschi
aus klein-Paris
AW: @Luschi: noch eine weitere Frage
24.08.2022 08:48:37
Lars
Hallo Luschi,
defintiv ein super Ansatz, der reibungslos funktioniert und wahrscheinlich auch auf große Datenmengen gut anwendbar ist. Vielen Dank auch für die erklärenden Kommentare im Editor. Aktuell bin ich mit den Record-Funktionen noch nicht so vertraut, weil ich diese bisher kaum gebraucht habe. Ich werde mir die von dir verwendeten aber jetzt genau anschauen. Hoffentlich kann ich das in Zukunft dann auch selbst anwenden.
Zu deiner Frage bzgl. fehlenden Werten: aktuell ist die Frage für mich nicht so relevant, weil die Daten so vorliegen, dass keine Werte fehlen.
In einer anderen Konstellation würde für mich persönlich Folgendes Sinn ergeben:
1. es fehlt ein Wert in der vorletzten Spalte: Differenzberechnung soll in dieser Zeile von der letzten Spalte zur nächsten beschriebenen erfolgen
2. es fehlt ein Wert in der letzten Spalte: die Differenz in der Deltaspalte soll für diese Zeile nicht berechnet werden. (leer bleiben)
Wäre noch interessant zu wissen, wie das geht, aber wie gesagt aktuell nicht entscheidend für mich.
Danke und VG
Lars
Anzeige
AW: @Luschi: noch eine weitere Frage
25.08.2022 08:21:49
Luschi
Hallo Lars,
noch 1 Hinweis; normalerweise sieht dieser PQ-Teil:
each try Number.From(Record.Field(r[ #"Spalte 1 davor")) -
Number.From(Record.Field(r, #"Spalte 2 davor"))
so aus:
each try Number.From(r[Column8]) -
Number.From(r[Column7])
Das ist aber statisch, denn man kann r[Column8] und r[Column7] so nicht verändern, wenn neue Spalten hinzukommen. In den Foren zu PQ sieht man meist aber nur die statische Variante.
Gruß von Luschi
aus klein-Paris

AW: bitteschön, nun interesiert mich ...
24.08.2022 14:25:27
neopa
Hallo Lars,
... wie träge meine interaktive Lösung im Vergleich zu der PQ-Lösung von Luschi in Deiner Originaldatei ist?
Außerdem interessiert mich noch: Wenn Du wirklich sehr große Datenmengen hast, kann sich das doch nur auf die Anzahl der Kunden beziehen, oder?
Bisher hatten wir alle vorhandenen Daten in der Ergebnistabelle 1:1 wiedergegeben. Entscheidend ist aber mE doch nur das Ergebnis. Wenn das angestrebte Ergebnis nicht zwingend am Ende der vorhandenen Daten stehen muss, sondern immer an gleicher Stelle (z.B. für den Dashboard) könnte ich meine interaktive Lösung noch etwas beschleunigen und zwar z.B. wie folgt:

let
Quelle = Excel.CurrentWorkbook(){[Name="tab_1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Kunde", type text}, {"10.01.2022", Int64.Type}, {"11.01.2022", Int64.Type}, {"12.01.2022", Int64.Type}, {"13.01.2022", Int64.Type}, {"14.01.2022", Int64.Type}}),
#"Tiefer gestufte Header" = Table.DemoteHeaders(#"Geänderter Typ"),
#"Transponierte Tabelle" = Table.Transpose(#"Tiefer gestufte Header"),
#"Höher gestufte Header" = Table.PromoteHeaders(#"Transponierte Tabelle", [PromoteAllScalars=true]),
#"Beibehaltene letzte Zeilen" = Table.LastN(#"Höher gestufte Header", 2),
#"Tiefer gestufte Header1" = Table.DemoteHeaders(#"Beibehaltene letzte Zeilen"),
#"Transponierte Tabelle1" = Table.Transpose(#"Tiefer gestufte Header1"),
#"Ersetzter Wert" = Table.ReplaceValue(#"Transponierte Tabelle1",null,0,Replacer.ReplaceValue,{"Column2", "Column3"}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Ersetzter Wert", "Diff", each if [Column1]="Kunde" then 0 else [Column3]-[Column2]),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Column2", "Column3"}),
#"Höher gestufte Header1" = Table.PromoteHeaders(#"Entfernte Spalten1", [PromoteAllScalars=true]),
#"Umbenannte Spalten1" = Table.RenameColumns(#"Höher gestufte Header1",{{"0", "Differenz zum Vortag"}})
in
#"Umbenannte Spalten1"
Allerdings würde ich anstelle einer solchen Ergebnis-PQ-Lösung, dann wohl eine Formellösung zumindest in Betracht ziehen.
Gruß Werner
.. , - ...
Anzeige
AW: Ergänzung, Differenz bei fehlenden Werten...
25.08.2022 08:37:23
neopa
Hallo Lars,
... bzgl. Deiner heutigen Aussagen hierzu wäre in meiner meinem zuletzt aufgezeigten M-Code lediglich in:
" #"Ersetzter Wert" = Table.ReplaceValue(#"Transponierte Tabelle1",null,0,Replacer.ReplaceValue,{"Column2", "Column3"})"
das hier fett markierte zu löschen.
Gruß Werner
.. , - ...
AW: Ergänzung, Differenz bei fehlenden Werten...
26.08.2022 09:33:59
Lars
Hallo Günther,
mal wieder danke für die hilfreichen Antworten. Was die Trägheit betrifft: das war jetzt mal eine reine Vermutung meinerseits. Ich habe allerdings schon festgestellt, dass die Orginialdaten, die ich bearbeiten muss, schon recht sperrig sind und PQ relativ lange für verschiedene Schritte braucht. Im Original habe ich es mit einer Faktentabelle zu tun, die mehrere 100.000 Zeilen lang ist. Da ich eine Ergebnisdarstellung anstrebe - wie hier bereits hochgeladen - sind natürlich vorher einige Schritte wie z.B. Pivotieren notwendig. Ehrlicherweise muss ich aber beide Varianten erst auf die Originaldatei anwenden, um hier entscheidende Unterschiede feststellen zu können.
Leider habe ich aktuell ein paar Themen zu bearbeiten, die Priorität haben, weswegen das noch eine Weile warten muss. In Vergessenheit gerät es aber definitiv nicht. Ich würde dich und Luschi dann auch nochmal direkt im Betreff ansprechen, sobald ich dazu eine Aussage treffen kann.
BIs dahin & ein schönes Wochenende.
Lars
Anzeige
AW: Ergänzung, Differenz bei fehlenden Werten...
26.08.2022 09:34:11
Lars
Hallo Werner,
mal wieder danke für die hilfreichen Antworten. Was die Trägheit betrifft: das war jetzt mal eine reine Vermutung meinerseits. Ich habe allerdings schon festgestellt, dass die Orginialdaten, die ich bearbeiten muss, schon recht sperrig sind und PQ relativ lange für verschiedene Schritte braucht. Im Original habe ich es mit einer Faktentabelle zu tun, die mehrere 100.000 Zeilen lang ist. Da ich eine Ergebnisdarstellung anstrebe - wie hier bereits hochgeladen - sind natürlich vorher einige Schritte wie z.B. Pivotieren notwendig. Ehrlicherweise muss ich aber beide Varianten erst auf die Originaldatei anwenden, um hier entscheidende Unterschiede feststellen zu können.
Leider habe ich aktuell ein paar Themen zu bearbeiten, die Priorität haben, weswegen das noch eine Weile warten muss. In Vergessenheit gerät es aber definitiv nicht. Ich würde dich und Luschi dann auch nochmal direkt im Betreff ansprechen, sobald ich dazu eine Aussage treffen kann.
BIs dahin & ein schönes Wochenende.
Lars
AW: Danke für Deine Rückmeldung, ...
26.08.2022 10:13:32
neopa
Hallo Lars,
... es eilt mir nicht mit Deinem Testergebnis. Es interessiert mich aber. Wenn Du erst zu einem späteren Zeitpunkt dazukommen solltest, wenn dieser Beitrag schon inaktiv ist (spätestens in 7 Tagen) dann schreib mir eine kurze Benachrichtigung in einem anderen thread.
Übrigens meine bisherigen Feststellung (für allerdings max wenige tausend Datensätze und andere Abfragen) ist momentan die, dass bei der Erstauswertung PQ länger für die Auswertung benötigt, als wenn die gleiche Auswertung bereits schon mal vorgenommen wurde. Aber vielleicht hab ich mal ja auch getäuscht.
Bis demnächst dann und jetzt erst einmal bald schönes WE
Gruß Werner
.. , - ...
AW: und hierzu noch angemerkt ...
18.08.2022 15:04:14
neopa
Hallo @all,
... die Fragestellung mit einer leicht modifizierten Betreffzeile wurde, wie ich vorhin erst feststellte, von Lars bereits einen Tag vor diesem hier, in
https://www.herber.de/forum/archiv/1892to1896/1894844_PQ_berechnete_Spalte_dyn_Spaltennamen.html eingestellt und war bis heute Vormittag noch unbeantwortet.
Mein dortiger (interaktiv erstellter) PQ-Lösungsvorschlag) erzeugt eine dynamische Ergebnistabelle mit den Daten der Quelltabelle plus den der ermittelten Differenz in der letzte Spalte der Ergebnistabelle.
Gruß Werner
.. , - ...

7 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige