PQQ: Der preiswerteste Lieferant

Der preiswerteste Lieferant (Sortieren mit Hindernissen)

  Wis­sens­stand: Lev­el 2 ⇒ Solides Basiswis­sen in PQ, etwas Erfahrung   

„Eigentlich kein Prob­lem und kein The­ma für meinen Blog” dachte ich. Zu Anfang. Aber „Ver­such macht kluch” 😉 und ich war rasch an einem Punkt, wo ich nur noch Frageze­ichen in den Augen hat­te. Aber sehen Sie selb­st, was zu Beginn nur ein­fach erschien und dann zum Prob­lem mutierte. Schauen Sie sich ein­fach erst ein­mal die Quell­dat­en an. Eine typ­is­che Kon­stel­la­tion, wo im ersten Tabel­len­blatt 11 Pro­duk­te mit Artikel­num­mer und Beze­ich­nung aufge­führt sind und in Tabelle2 für jeden Artikel mehrere Liefer­an­ten mit den jew­eili­gen Preisen für das Pro­dukt. Und auf der Basis der Tabelle1 soll nun das Pro­dukt mit den Dat­en des gün­stig­sten Liefer­an­ten verknüpft (angezeigt) wer­den.

Zu Beginn wür­den sie aus bei­den Datent­bere­ichen der Tabelle1 und Tabelle2 jew­eils eine Liste/Formatierte Tabelle erstellen, wenn ich das nicht schon für Sie erledigt hätte. 😉 Sie wer­den auch fol­gen­des erken­nen: Ich belasse es bewusst nicht bei den default­mäßig vorgegebe­nen Tabel­len­na­men, der Klarheit wegen vergebe ich für die erste Tabelle den Namen Pro­duk­te und die zweite Tabelle den Namen Liefer­an­ten. Die spezielle For­matierung der Liefer­an­ten-Tabelle spreche ich später an. Importieren Sie nun nacheinan­der die bei­den Intel­li­gen­ten Tabellen in den Pow­er Query-Edi­tor.

Ide­al­er­weise spe­ich­ern Sie nun erst ein­mal bei­de Abfra­gen als Nur Verbindung. Öff­nen Sie nun die Abfrage Liefer­an­ten. Um dem preiswertesten Liefer­an­ten je Pro­dukt zu find­en bzw. zu separi­eren bietet sich dieses Vorge­hen an:

  • Sortieren Sie zuerst die Spalte Artikel­num­mer auf­steigend.
  • Anschließend sortieren Sie die Spalte Preis eben­falls auf­steigend.

Der Effekt ist, dass zu jed­er Artikel­num­mer der niedrig­ste Preis an ober­ster Stelle ste­ht:

Die Sortierung ist (natürlich) wie gewollt

Die Sortierung ist (natür­lich) wie gewollt

Pri­ma, der Teil ist geschafft (war ja auch nicht so schw­er). Der näch­ste Schritt erfordert, dass für jedes Pro­dukt der preiswerteste Liefer­ant her­aus­ge­filtert wird. Und dazu bietet sich das Ent­fer­nen von Dup­likat­en an. Und da ja nur pro Artikel­num­mer  1 Liefer­ant erhal­ten bleiben soll, wer­den die Dup­likate bei der Artikel­num­mer ent­fer­nt. Und an dieser Stelle noch ein­mal der Hin­weis, dass typ­is­cher­weise beim Ent­fer­nen der Dup­likate der erste Daten­satz (Zeile) erhal­ten bleibt und die restlichen Dup­likate ent­fer­nt wer­den. Und das Ergeb­nis:

Die Sortierung ist zu diesem Zeitpunkt nicht gerade wie gewünscht

Die Sortierung ist zu diesem Zeit­punkt nicht ger­ade wie gewün­scht

Über­raschung… 😯

Und ich ver­sichere Ihnen, dass Sie keinen Fehler gemacht haben, wenn Sie meinen stich­wor­tar­ti­gen Anweisun­gen gefol­gt sind. Das ist aus mein­er Sicht eine klare Schwach­stelle in Pow­er Query und sollte bere­inigt wer­den. In der Excel-Tabelle (links im Bild) habe ich die niedrig­sten Preise je Pro­dukt far­blich her­vorge­hoben. Sie erken­nen deut­lich, dass hier das Ent­fer­nen der Dup­likate nach anderen Regeln erfol­gte; offen­sichtlich wurde die Sortierung nach Preis vol­lkom­men ignori­ert und immer die erste Zeile der Basis-Dat­en als Fil­trat ver­wen­det.

Dieser Weg ist also nicht zielführend. Ent­fer­nen Sie im recht­en Seit­en­fen­ster bei Angewen­dete Schritte den let­zten Ein­trag Ent­fer­nte Dup­likate. Damit ist wieder die nach Preis sortierte Abfrage in vollem Umfang gegen­wär­tig. Fügen Sie nun über Spalte hinzufü­gen eine Indexs­palte hinzu. Und jet­zt noch ein­mal den Schritt Dup­likate ent­fer­nen in der Spalte Artikel­num­mer:

Jetzt stimmen die beiden Werte vollkommen überein

Jet­zt stim­men die bei­den Werte vol­lkom­men übere­in

Bin­go, das war’s! In der Spalte Preis ist jew­eils der niedrig­ste Wert aus­gewiesen. Pow­er Query erken­nt irgend­wie, dass diese ein­deutige sortierte Zahlen­folge Vor­rang hat und nicht „ver­mis­cht” wer­den darf. – Wie auch immer, das Ergeb­nis stimmt. Und nur das zählt.

Die Spalte Index hat ihren Dienst getan und kann nun gelöscht wer­den. Bleibt „nur” noch der Schritt, die bei­den Abfra­gen so zu verbinden, zu verknüpfen, dass die Abfrage Pro­duk­te um die Preis-Spalte der Abfrage Liefer­an­ten ergänzt wird. Dazu wech­seln Sie zur Abfrage Pro­duk­te und acht­en Sie darauf, dass das Reg­is­ter Start aktiviert ist. Kom­binieren | Abfra­gen zusam­men­führen erweit­ern und Abfra­gen als neue Abfrage zusam­men­führen auswählen. Wählen Sie Liefer­an­ten als untere Abfrage und Klick­en Sie in bei­den Abfrage-Kästen in das Feld Artikel­num­mer. Join-Art kann so bleiben und jet­zt OK. – Hin­weis: An ver­schiede­nen Stellen in diesem Blog ist dieses Zusam­men­führen von 2 Abfra­gen aus­führlich  beschrieben, beispiel­sweise hier. Weit­ere Beispiel find­en Sie per Stich­wort-Suche im Blog.

Erweit­ern Sie die Spalte Liefer­an­ten Doppelpfeil und ent­fer­nen Sie alle Häkchen außer bei Preis. Ver­gle­ichen Sie nun gerne ein­mal, ob Pow­er Query seine Arbeit kor­rekt gemacht hat. Sie wer­den erken­nen, dass stets der niedrig­ste Preis gefiltert wor­den ist und dank der Ver­linkung über die Pro­duk­t­num­mer auch an der richti­gen Posi­tion ange­fügt wurde. Schließen & laden oder Schließen & laden in… und das Werk ist getan.

▲ nach oben …

Dieser Beitrag wurde unter Daten zusammenführen, Filtern & Sortieren, Join-Art, Ohne Makro/VBA, Power Query, PQ-Quickies, Vergleichen (Daten, Tabellen, Abfragen) abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.