Anzeige
Archiv - Navigation
1940to1944
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

Power Query: Richtigen Wert in Frachtkostentabelle finden

Power Query: Richtigen Wert in Frachtkostentabelle finden
08.08.2023 14:33:29
Dennis Petereit
Ein freundliches Hallo an alle Excel-Helden,

ich arbeite seit einiger Zeit mit Power Query und stehe aktuell vor einer Herausforderung.

In der "Tabelle 1" stehen Bruttogewichte von Packstücken:
Packstück: 4711, Bruttogewicht: 3420 kg
Packstück: 0815, Bruttogewicht: 1250 kg

In der "Tabelle 2" stehen Frachtkosten:
Gewicht von: 300 kg, Gewicht bis: 1000 kg, Frachtkosten: 100 EUR
Gewicht von: 1001 kg, Gewicht bis: 2000 kg, Frachtkosten: 200 EUR
Gewicht von: 2001 kg, Gewicht bis: 3000 kg, Frachtkosten: 300 EUR
Gewicht von: 3001 kg, Gewicht bis: 4000 kg, Frachtkosten: 400 EUR

Wie kann ich in Power Query in der Tabelle 1 die passenden Frachtkosten aus der Tabelle 2 ermitteln?

Vielen Dank im Voraus an alle, die gerne helfen möchten.

Gruß aus der Eifel,
Dennis

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: (D)eine Beispieldatei wäre hilfreich owT
08.08.2023 14:45:21
neopa C
Gruß Werner
.. , - ...
Erst Einzelwerte auflisten, dann die Werte anknüpfen
08.08.2023 16:11:11
Sheldon
Hallo Dennis,

zuerst aus den von-bis Angaben einzelne Zeilen machen. Das geht so:

Tabelle2
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Gewicht von", Int64.Type}, {"Gewicht bis", Int64.Type}, {"Frachtkosten", type number}}),
#"Added Custom" = Table.AddColumn(#"Geänderter Typ", "kg", each {[Gewicht von]..[Gewicht bis]}),
#"Expanded {0}" = Table.ExpandListColumn(#"Added Custom", "kg"),
#"Removed Duplicates" = Table.Distinct(#"Expanded {0}", {"kg"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Duplicates",{{"kg", Int64.Type}})
in
#"Changed Type"


Nun kannst du die so ermittelten Einzelwerte mit der Tabelle mit den Frachtstücken verbinden, bspw. so:

Tabelle1
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Packstueck Nr", Int64.Type}, {"Bruttogewicht", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Geänderter Typ", {"Bruttogewicht"}, Tabelle2, {"kg"}, "Tabelle2", JoinKind.LeftOuter),
#"Expanded {0}" = Table.ExpandTableColumn(#"Merged Queries", "Tabelle2", {"Frachtkosten"}, {"Frachtkosten"})
in
#"Expanded {0}"


Gruß
Sheldon
Anzeige
hierzu nachgefragt ...
08.08.2023 16:43:07
neopa C
Hallo Sheldon,

.... auf eine solche Idee bin und wäre ich nicht gekommen. Wo kann ich dazu etwas näher nachlesen? Z.B. würde mich interessieren, ob und wenn ja, wie man da die Schrittweite definieren kann. Denn im Beispiel hätte ja auch eine Schrittweite von 100 anstelle 1 gereicht. In einem (ganz) anderen Fall könnten ja auch mal Dezimalwerte wie 0,05 notwendig sein. Kannst Du mir da etwas auf die Sprünge helfen?

Aktuell würde ich persönlich für die Aufgabenstellung meine Formellösung noch vorziehen, denn dafür habe ich keine Minute benötigt um die zu definieren. Zuvor und jetzt nach Deiner Lösung schon insgesamt über 30 Minuten "rumgestochert". Unabhängig davon finde ich aber PQ trotzdem super.

Gruß Werner
.. , - ...
Anzeige
AW: hierzu nachgefragt ...
09.08.2023 14:52:13
Sheldon
Hi Werner,

über die Syntax mit den zwei Punkten bin ich mal in einem YT Video gestoßen. Brauche ich selbst nur selten. Wenn ich es mal brauche, google ich einfach nach sowas wie "power query list dates between two values" oder sowas ähnliches. Da gibt es mittlerweile viele Blog-Beiträge, die das beschreiben.

Die Schrittweite kann man überhaupt nicht einstellen, es funktioniert nur mit Ganzzahlen. Wenn du nur 100er Schritte brauchst, kannst du das Ergebnis ja einfach filtern nach Zeilen, deren Wert sich ohne Rest durch 100 teilen lässt. Wenn du Dezimalschritte brauchst, könntest du natürlich zuvor die Zahlen mit bspw. 100 multiplizieren, um dann mit Ganzzahlen arbeiten zu können.


Gruß
Sheldon
Anzeige
es hätte ja sein können ...
09.08.2023 15:04:45
neopa C
Hallo Sheldon,

... danke für Deine Informationen. Brauchen tue ich es nicht, aber wäre halt schön gewesen, es hätte dafür eine erweiterte Funktionslösung gegeben. Und das ohne man sich intensiver mit den Möglichkeiten des M-Code vertraut machen muß.

Gruß Werner
.. , - ...
Erst Einzelwerte auflisten, dann die Werte anknüpfen
08.08.2023 17:07:24
Dennis Petereit
Hallo Sheldon,

klasse. Danke dir. Das funktioniert in meinem großen Datenmodell hervorragend.

Bin glücklich.

Gruß,
Dennis
Erst Einzelwerte auflisten, dann die Werte anknüpfen
08.08.2023 20:10:39
Luschi
Hallo Dennis,

hier mal meine Lösung mit PQ-M, muß aber zugeben, daß dabei schon tiefer in die M-Befehls-Kiste eingestiegen wird.
Mit dem Einsatz von ein bißchen mehr M-Code kann der Overhead zu Erzeugen temporärer Daten, die hinterher sowieso weggeschmissen werden, erheblich verkleinert werden. Hast Du Dir mal die PQ-Schritte von Sheldon's Lösung genauer angesehen; da entstehen über 23.000 Datensätze, die fast alle überflüssig sind (im PQ-Schritt 'Expanded {0}') - und je kleiner die Schrittweite in der Tonnage der Frachttabelle ist, desto mehr Temp-Daten werden es.

https://www.herber.de/bbs/user/162243.xlsx

Gruß von Luschi
aus klein-Paris

Anzeige
Erst Einzelwerte auflisten, dann die Werte anknüpfen
09.08.2023 09:50:53
Dennis Petereit
Hallo Luschi,

vielen Dank für deine Unterstützung. Da hat bei mir "Lernen" stattgefunden :-).
Ich habe deinen Code entsprechend verwendet.

Ich muss mich mehr mit Funktionen auseinandersetzen ;-).

Gruß,
Dennis
AW: Erst Einzelwerte auflisten, dann die Werte anknüpfen
09.08.2023 14:59:01
Sheldon
Hi Luschi,

das stimmt natürlich. Aber die Frage ist doch nicht, wie sparsam man Daten erzeugen kann, sondern am Ende zählt, was die performanteste Lösung ist. Bei größeren Datenmengen ist es doch immer attraktiv, einen Wert über eine Tabellenverknüpfung zu ziehen anstatt eine Rechenoperation für jeden Datensatz auszuführen. Müsste man letztlich vergleichen, was im konkreten Anwendungsfall die bessere Wahl ist.

Gruß
Sheldon
Anzeige
dazu ...
09.08.2023 15:24:46
neopa C
Hallo Sheldon,

... also für das eingestellte Beispiel ist zumindest für mich die performanteste Lösung meine Formel. Dies auch dann noch, wenn nicht gerade viele zigtausende Datensatze auszuwerten sind. Dies zudem auch weil dafür keine Betätigung eines Aktualisierungsbutton betätigt werden muß, wenn Daten hinzukommen oder sich ändern. Natürlich würde mich interessieren, wieviele Datensätze Dennis max. auszuwerten hat und wie es sich da verhält.

Gruß Werner
.. , - ...
dazu ...
09.08.2023 17:11:27
Dennis Petereit
Hallo Luschi & Sheldon,

ich werde in nächster Zeit beide Lösungsansätze im größeren Umfang testen. Für die aktuelle Anwendung sind beide Lösungswege performant.
In der Erweiterung müssen 80.000 bis 100.000 Lieferungen gegen 4500 Frachtkosten-Datensätze geprüft werden. Das passiert aber nicht täglich,
sondern quartalsweise.

Gruß,
Dennis
Anzeige
als Formellösung ...
08.08.2023 16:11:47
neopa C
Hallo Dennis,

... ist es auch in meiner älteren XL-Version als Deiner relativ einfach.
Dafür in D4: =AGGREGAT(15;6;Tabelle2[Frachtkosten]/(Tabelle2[Gewicht bis]>[@Bruttogewicht]);1)

In PQ ist es sicherlich auch realisierbar, aber da fehlt es mir noch an Erfahrung um dieses zu realisieren. Was mich natürlich auch interessieren würde.

Gruß Werner
.. , - ...
als Formellösung ...
09.08.2023 19:18:14
daniel
das ist eigentlich in jeder Excelversion kein Problem.
diese Aufgabe löst man mit dem SVerweis oder auch mit dem noch älteren Verweis.
warum so einfach, wenns doch auch anders geht ;-) owT
10.08.2023 09:04:29
neopa C
Gruß Werner
.. , - ...

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige