Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 14:18:05
28.04.2024 13:43:14
Anzeige
Archiv - Navigation
1864to1868
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

Verbindung diverser Tabellen Power Query

Verbindung diverser Tabellen Power Query
12.01.2022 21:42:01
Lars
Hallo zusammen,
ich komme mit folgender Situation nicht weiter:
Mein Beispiel beinhaltet 5 verschiedene kleine Tabellen.
Meine Ergebnistabelle besteht aus 3 Spalten (Länder, Kategorie, Transfer). In der Spalte der Länder stehen 10 Länderkürzel, die alle in die Kategorien (zweite Spalte) A - C eingeteilt werden können. In der dritten Spalte "Transfer" möchte ich etwas bestimmtes angezeigt bekommen. Hierfür brauche ich die anderen 4 Tabellen:
- tab_Länder1
- tab_Länder2
- tab_Zuweisung1
- tab_Zuweisung2
Die Spalte "Transfer" in meiner Ergebnistabelle soll nun Folgendes beinhalten: Das Länderkürzel der jeweiligen Zeile (Spalte "Länder") dient als Suchkriterium. Die Tabellen tab_Länder1 und tab_Länder2 sollen durchsucht werden. Ergibt die Suche einen Treffer, soll in die passende Zuweisungstabelle (tab_Zuweisung1 & -2) "gesprungen" werden und hier die passende Kategorie gesucht werden. Ausgegeben werden soll dann in der Ergebnistabelle das jeweilige Transferergebnis, passend zu Land und Kategorie. Ich habe schon eine Formel in die Spalte "Transfer" der Ergebnistabelle gepackt, die zumindest das Durchsuchen der tab_Länder1 mit anschließender Ausgabe des passenden Wertes aus der tab_Zuweisung1 hinbekommt. Was ich noch brauche ist die Möglichkeit zwei oder mehrere Tabellen zu durchsuchen. Es sind bewusst auch Länderkürzel in der Ergebnistabelle enthalten, die weder in der tab_Länder1 noch der tab_Länder2 vorkommen und somit auch keine passende Zuweisung bekommen sollen.
Ich wäre sehr an einer Lösung mit Power Query - gerne auch über eine passende benutzerdefinierte Funktion - interessiert, da es sich in Wirklichkeit um sehr große Datenmengen handelt, die noch dazu aus verschiedenen Exceldateien stammen und über Power Query in das Datenmodell geladen werden sollen.
Die Beispieldatei hänge ich mit an. Ich hoffe die Fragestellung ist verständlich.
https://www.herber.de/bbs/user/150358.xlsx
Über eure Hilfe wäre ich euch sehr dankbar.
Grüße
Lars

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Deine "Lösung" mit Formel ...
13.01.2022 10:35:49
neopa
Hallo Lars,
... kann so nicht funktionieren. Folgende Formel in D19 schon:

=WENN(ZÄHLENWENN(tab_Länder1[Länder1];[@Länder]);SVERWEIS([@Kategorie];tab_Zuweisung1;2;0); WENN(ZÄHLENWENN(tab_Länder2[Länder2];[@Länder]);SVERWEIS([@Kategorie];tab_Zuweisung2;2;0);""))

Aber es wäre natürlich auch eine Zuordnung ganz ohne Formel über PQ möglich.
Gruß Werner
.. , - ...
AW: Deine "Lösung" mit Formel ...
13.01.2022 12:54:17
Lars
Hallo Werner,
Danke für die schnelle Antwort und die Formellösung. Kennst du auch eine Möglichkeit, die Aufgabe mit
PQ zu lösen? Das wäre wirklich super, wenn du mir diese verraten würdest.
Vielen Dank vorab.
LG
Lars
Anzeige
AW: die PQ - Lösung hierzu ...
13.01.2022 13:06:04
neopa
Hallo Lars,
... siehe hier: https://www.herber.de/bbs/user/150370.xlsx. Die Spalte "Transfer_Fml" kannst Du natürlich noch löschen, diese diente hier nur zum Abgleich.
Gruß Werner
.. , - ...
AW: die PQ - Lösung hierzu ...
13.01.2022 14:18:19
ChrisL
Hi
Hier noch eine Variante:
https://www.herber.de/bbs/user/150371.xlsx
Ich finde Werner hat es schon super gelöst ohne auf komplexe Techniken wie PQ-Funktionen zurückzugreifen. Meine eigene Variante ist von seinen Ansätzen inspiriert.
Weshalb ich trotzdem noch eine Alternative poste. Die temporärer Multiplikation der Datensätze bei grösseren Datenmengen könnte zu sehr umfangreichen Zwischenresultaten führen. Mit meinem Ansatz wird diese Multiplikation hinfällig.
Ich glaube zwar, dass die Datenmenge bei Zwischenresultaten die Performance von PQ nicht massgeblich beeinflusst, ganz sicher bin ich mir allerdings nicht.
cu
Chris
Anzeige
AW: danke, dies auch für Deine Lösungsanatz, ...
13.01.2022 16:05:20
neopa
Hallo Chris,
.. wenn Du diesen nicht eingestellt hättest, hätte ich nach Deiner Lösungsvereinfachung noch gefragt.
Habe eine ganze Weile an meiner Lösung herumgedoktert. Dein Lösungsansatz ist natürlich professioneller. Ich meinte zunächst, es müsste mit der Definition von Listen gehen. Da fehlt mir aber momentan noch jegliche Erfahrung und habe die Versuche damit auch eingestellt. Würde das Arbeiten mit Listen hier Sinn ergeben und wenn ja, wie müsste die Lösung damit aussehen?
Gruß Werner
.. , - ...
AW: danke, dies auch für Deine Lösungsanatz, ...
13.01.2022 16:47:48
ChrisL
Hi Werner
Gerne. Umgekehrt hat mir dein Ansatz ebenfalls geholfen, denn die Lösung wurde mir erst nach deinem Beispiel klar.
Über einen Ansatz mit "List" habe ich ebenfalls nachgedacht. Irgendwie möglich wäre es sicher, aber ich glaube nicht, dass die Lösung effizienter würde.
Die Tabelle würde dann in etwa so aussehen:
- Land1, Zuweisung-Array(List)
- Land2, Zuweisung-Array(List)
Der Schlüssel für Join wäre dann einmal Land und einmal die Kategorie in der Liste. Ich denke für den Join müsste man das Array "auspacken" und dann sind wir wieder bei der Datengrundlage, welche du bereits hattest.
Ich denke darum, dass es nicht mehr viel zu optimieren gibt. Wenn dann vielleicht mittels direkter Programmierung im M-Code, aber dies wäre dann für Lars nicht mehr nachvollziehbar und der Nutzen wäre wohl im kosmetischen Bereich.
cu
Chris
Anzeige
AW: danke, aber dazu noch nachgefragt ...
13.01.2022 20:09:02
neopa
Hallo Chris,
... mir ist leider unklar, wie ich eine mehrspaltige Tabelle interaktiv in eine Liste wandle. Geht das überhaupt? Außerdem hab ich noch nicht herausfinden können, wie ich eine solche dann richtig "verarbeite". Könntest Du mir bei Gelegenheit etwas auf die Sprünge helfen? Für heute wünsche ich aber erst einmal einen schönen Abend.
Gruß Werner
.. , - ...
AW: danke, aber dazu noch nachgefragt ...
13.01.2022 20:19:58
ChrisL
Hi Werner
Da hast du recht, List sind eindimensional, ganz vergessen.
Vielleicht irgend ein Murks über Schlüssel (Index-Nummern), aber so wirklich sehe ich den Nutzen hier nicht.
cu, schönen Abend
Chris
Anzeige
AW: danke, aber dazu noch nachgefragt ...
13.01.2022 21:00:54
Lars
Hallo Werner,
hallo Chris,
vielen Dank für eure tatkräftige Unterstützung und eure tollen Lösungen. Beide funktionieren super.
Bin immer wieder erstaunt was in Excel und speziell mit PQ alles möglich ist. Und das auch noch gut verständlich.
Eure Lösungen sind für mich gut nachvollziehbar und ich kann sie auf meine Datenbasis "ummünzen".
Danke nochmal und einen schönen Abend.
VG
Lars
AW: bitteschön owT
14.01.2022 08:30:55
neopa
Gruß Werner
.. , - ...
AW: ich dachte es gibt auch mehrspaltige owT
14.01.2022 08:34:33
neopa
Gruß Werner
.. , - ...
AW: dann ist es keine List sondern...
14.01.2022 09:06:47
ChrisL
... eine Tabelle (table)
(also eine table in der table)
Das Problem bleibt, dass der eine Key von Join in TB1 und der andere Key in TB2 ist. Ich habe nie ausprobiert, ob man dies mittels Eingriff in den M-Code lösen könnte. Aber wenn, dann wäre es vermutlich ein Join im Join, welcher einfach im M-Code versteckt wird. Im vorliegenden Anwendungsbeispiel sehe ich den Nutzen nicht, denn Join im Join mache ich ja bereits.
Anzeige
AW: ok, das wird dann so sein. Danke owT
14.01.2022 15:39:30
neopa
Gruß Werner
.. , - ...
AW: ok, das wird dann so sein. Danke owT
17.01.2022 17:01:12
ChrisL
Hi Werner
Weil ich trotz deines Dankes ein klein wenig Enttäuschung spürte, habe ich noch einmal ein wenig rumexperimentiert. ;)
(die Inputtabellen vorher in den Ursprungszustand versetzen, nur Quelle)

let
Quelle = Excel.CurrentWorkbook(){[Name="tab_Ergebnisse"]}[Content],
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(Quelle, "ZuweisungTB", each if List.Contains(Table.Column(tab_Länder1, "Länder1"),[Länder]) then tab_Zuweisung1 else if List.Contains(Table.Column(tab_Länder2, "Länder2"), [Länder]) then tab_Zuweisung2 else null)
in
#"Hinzugefügte benutzerdefinierte Spalte"
Damit lässt sich die korrekte Zuweisungstabelle als Spalte darstellen. Ich denke von der Idee her, war dies in etwa was dir vorschwebte.
Was ich zeitlich nicht mehr geschafft habe, ist eine Lösung zu finden, um innerhalb dieser Tabellen zu filtern, ohne die Tabellen vorgängig zu expandieren.
Die If-Then-Else-If-Then-Else Verschachtelung scheint mir wenig Wartungsfreundlich. Bedenkt man, dass es vielleicht auch mehr als zwei Länder-/Zuweisungstabellen gibt, dann würde die Lösung sehr unübersichtlich werden. Ich würde definitiv beim ursprünglichen Ansatz bleiben.
cu
Chris
Anzeige
AW: hmm ...
18.01.2022 08:18:46
neopa
Hallo Chris,
... jetzt hast Du mich (noch) neugierig(er) gemacht.
Ich hab mir nochmal die von Lars ursprünglich eingestellte Datei downgeladen. Die Tabellennamen stimmen mit den in Deinem M-Code stehenden auch überein.. Trotzdem kommt bei mir (in XL2016) nach einkopieren des M-Codes die mir unerklärliche Fehlermeldung:

Expression.Error: Der Name "tab_Länder1" wurde nicht erkannt.  Ist er richtig geschrieben.. 
Hast Du dafür eine Erklärung?
Gruß Werner
.. , - ...
AW: hmm ...
18.01.2022 09:08:38
ChrisL
Hi Werner
Vermutlich stimmt die Spaltenbezeichnung nicht überein. Hier die Datei:
https://www.herber.de/bbs/user/150466.xlsx
cu
Chris
Anzeige
AW: danke für die Datei ...
18.01.2022 09:44:49
neopa
Hallo Chris,
... nach einigen erfolglosen Versuchen auf dieser Basis, bin ich zur gleichen Überzeugung gelangt wie Du , als Lösung einen der bereits vorliegenden Ansätze zu nutzen.
oT: Falls es Dir zeitlich mal möglich sein sollte, würde mich Dein PQ-Lösungsansatz für diesen thread hier: https://www.herber.de/forum/archiv/1864to1868/1865963_Anzahl_False_je_Kalenderwoche.html interessieren. Da bin ich bisher auf keinen grünen Zweig mit PQ gekommen.
Dir heute nun aber erst mal noch einen angenehmen Tag,
Gruß Werner
.. , - ...
Anzeige
AW: danke für die Datei ...
18.01.2022 10:51:55
ChrisL
Hi Werner
Danke für die Rückmeldung.
Ich denke Techniken wie Array (list oder table) sind eher etwas für die direkte M-Code Programmierung. Angenommen es wären sehr viele Inputtabellen, welche man dynamisch abgreifen müsste, dann würde man vermutlich eine PQ-Funktion erstellen und dann könnten Array-Ansätze nützlich sein. Wobei man sich auch da überlegen müsste, ob man nicht besser einen Join macht.
Eine reine Vermutung von mir: Ich denke Join ist performanter, wie Funktionen, welche sich auf einzelne Datensätze beziehen (If List.Contains() Then... etc.). Ich kann es nicht belegen, aber Joins sind eine der "Kernkompetenz" von Abfragesprachen, daher meine Vermutung.
Eine spontane Lösung für die andere Aufgabe:
https://www.herber.de/bbs/user/150470.xlsx
Könnte man sicherlich noch etwas optimieren z.B. ein Versatz bei fehlenden Werten würde aktuell im Chaos enden.
cu
Chris
Anzeige
oT AW: ach ja, mit versetztem Index ...
18.01.2022 12:16:43
neopa
Hallo Chris,
... das war's worauf ich nicht gekommen war.
Für evtl. andere Nachleser: man kann das PQ-Ergebnis auch dem Datenmodell hinzufügen anstelle es als Exceltabelle abzulegen. In der Pivotauswertung dann einfach Bezug auf das Datenmodell nehmen und dort die "Werte" anstelle in das "Zeilen"-Feld in das "Spalten"-Feld ziehen.
Danke Chris.
Gruß Werner
.. , - ...
Gerne, owT.
18.01.2022 12:28:11
ChrisL
.

208 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige