Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

spez. PQ-Lösung gesucht ...

spez. PQ-Lösung gesucht ...
23.02.2024 16:22:47
neopa C
Hallo PQ-Fans

... und zwar prinzipiell für die Aufgabenstellung im thread: https://www.herber.de/forum/archiv/1964to1968/1966482_Werte_aus_einem_Bereich_in_anderem_Bereich_finden_und_ausgeb.html

Ich gehe davon aus, daß die XL-365er Formellösung die Daniel dort eingestellt hat zum gleichen Ergebnis führt, wie mit meiner XL2016er-Formellösung in der von mir nun eingestellten Datei.: https://www.herber.de/bbs/user/167280.xlsx. Da aber dort der TE von einem "größeren Wertebereich" geschrieben hatte, wollte ich eine PQ-Lösung entwickeln. Bin aber ziemlich schnell gescheitert. Momentan bin ich sogar auch der Meinung, daß eine reine interaktive PQ-Lösung wohl nicht realisierbar scheint. Mit M-Code gibt es sicher eine Lösung. Aber mich würde eine möglichst weitestgehend interaktive Lösung interessieren.

Gruß Werner
.. , - ...

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

Betreff
Datum
Anwender
Anzeige
AW: spez. PQ-Lösung gesucht ...
23.02.2024 16:50:08
Yal
Hallo Werner,

Spalte "FIND" duplizieren, den Duplikat "Nach Wechsel von nicht-Ziffer zu Ziffer" teilen, mit SUCH joinen und überflüssige Spalten entfernen. Voilà.
https://www.herber.de/bbs/user/167281.xlsx

VG
Yal
AW: so leider noch nicht, denn ...
23.02.2024 17:07:40
neopa C
Hallo Yal,

... bezogen auf meine paar Beispieldaten fehlt Deiner Lösung allerdings noch "BU33". Auch würde eine "KANT" oder ein "EK77" nicht gefunden.
Trotzdem vielen Dank für Deinen vorliegenden Vorschlag.

Gruß Werner
.. , - ...
Ach so...
23.02.2024 17:16:18
Yal
ziemlich verwirrend, weil es einem "BM" gibt, was wegen der Anwesenheit von "B" überflüssig macht.

Die Lösung mit dem "Nach Wechsel von nicht-Ziffer zu Ziffer" ist erst in 365 möglich.

Ich wollte dafür eine Alternativ posten, die in 2016 funktionieren sollte:

let

Quelle = Excel.CurrentWorkbook(){[Name="FIND"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"FIND", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Zahl", each Text.Select ([FIND], {"0".."9"})),
#"Spalte nach Trennzeichen teilen" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Text", each Text.Split([FIND], [Zahl]){0})
in
#"Spalte nach Trennzeichen teilen"


Jetzt muss ich auch noch den Sonderfall berarbeiten. "BM" und "B" wird wahrscheinlich dazu führen, dass die Treffer doppelt vorkommen.

Bis gleich..
Yal

Anzeige
Jetzt aber
23.02.2024 17:55:48
Yal
Hallo Werner,

bei solchen m:n-Verfahren (m Sätze in einer Menge, n in der anderen) geht man am besten über eine benutzerdefinierte Funktion, weil dann jeweils die aktuelle Zeile betrachtet wird, also 1:n. Der Filter mit "Text beginnt mit" wird in der Funktion verwendet.
Blöd ist, wie vermutet, dass es eventuell mehrere Treffer gibt und daher muss man der ersten isolieren, was ein Problem ist, wenn kein Treffer vorhanden ist. Es muss einen Null-Treffer eingefügt werden und dann kann man den ersten Treffer nehmen.

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

VG
Yal

Anzeige
AW: da lag ich also mit meiner Einschätzung nicht falsch,...
23.02.2024 18:12:19
neopa C
Hallo Yal,

... das eine reine interaktive Lösung des Problem womöglich nicht realisierbar ist.

Vielen Dank für Deine Lösung! :-)
An der werde ich wohl noch eine Weile zu "knappern" haben, um sie wenigstens einigermaßen zu verstehen. Selbst eine solche zu erstellen ist zumindest zeitnah nicht mein Ziel. Aber zumindest gut zu wissen, daß eine solche Lösung möglich ist.

Wünsche Dir nun einen schönen Abend und danach ein angenehmes WE.

Gruß Werner
.. , - ...
Weitergedacht...
23.02.2024 18:06:05
Yal
manchmal denke ich ein Bischen langsam: es ist blödsinn, der erste Treffer haben zu wollen. Es bringt an sich keine zusätzliche Information. Das einzige was zählt ist, gibt es ein Treffer oder nicht, also Anzahl von Treffer > 0. Diese Vorgehensweise sollte wesentlich schneller sein.

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

VG
Yal
Anzeige
AW: vielen Dank auch hierfür und ...
23.02.2024 18:18:17
neopa C
Hallo Yal,

... das muß ich alles erst einmal verdauen ;-)

Gruß Werner
.. , - ...
AW: übrigens ...
27.02.2024 14:22:39
neopa C
Hallo Yal und Luschi,

... ist mir bei aller für mich noch offenen Unklarheiten eurer beider Lösungen auch noch folgendes bzgl. der Ergebnislistung aufgefallen.
Wenn ich in A8 das "B" durch z.B. ein "Q" ersetze und in A4 das "BM" durch "Bm", werden die entsprechenden Datenwerte aus Spalte "FIND" nicht gefunden.
D.h. PQ kennt von Haus aus kein "Suchen" sondern nur ein "Finden". Richtig?

Gruß Werner
.. , - ...
AW: übrigens ...
28.02.2024 07:10:59
Luschi
Hallo Werner,

mit Deiner Vermutung 'PQ-Suchen' gibt es nicht, hast Du nicht ganz den Nagel auf den Kopf getroffen,:
- im Standard ist das Finden Case-Sentitive (Groß-/Kleinschreibung wird als Unterschied angesehen)
- und deshalb 'Bm' nicht gefunden
- das kann man aber händeln, in dem man beider Ausdrücke in Klein- oder Großbuchstaben beim Finden umwandelt
- bei mir: (st1, cur1) => if Text.StartsWith(Text.Lower(cur), Text.Lower(cur1))
  oder:     (st1, cur1) => if Text.StartsWith(Text.Upper(cur), Text.Upper(cur1))

An der E-365-Formel-Lösung von Daniel:
=LET(a;A2:A8;b;B2:B13;FILTER(b;NACHZEILE(b;LAMBDA(x;SUMME(ZÄHLENWENN(x;a&"*"))))))
ist dieser Teil interessant:
NACHZEILE(b;LAMBDA(x;SUMME(ZÄHLENWENN(x;a&"*"))))
damit wird ein Array aufgebaut, in welcher Zelle von B2:B13 kommt ein Wert aus dem Bereich A2:A8 vor und sieht so aus:
{0;0;0;1;1;1;0;1;0;0;1;1}
Daniels Formel funktioniert dann auch so: =FILTER(B2:B13;{0;0;0;1;1;1;0;1;0;0;1;1})

Die Frage, wann welche Lösung Vorteile bringt, kann ich aber auch nicht beantworten.

Gruß von Luschi
aus klein-Paris


Anzeige
AW: soweit schon nachvollziehbar ...
28.02.2024 07:42:01
neopa C
Hallo Luschi,

... und zwar daß mit M-Code vorhandene Textdaten in Groß- und oder Kleinbuchstaben wandeln kann. Aber doch wohl nur damit. Oder habe ich da eine Standardfunktionalität im PQ-Editor übersehen?

Momentan noch nicht ganz verständlich ist mir Deine Erklärung des XL365er Formelteils. Aber dies kann ich mir dann sicherlich selbst ergründen, wenn ich denn mal XL365 einsetze.

Auf jeden Fall aber vielen Dank für Deine Ausführungen und einen schönen Tag.

Gruß Werner
.. , - ...
AW: vielen Dank auch hierfür und ...
23.02.2024 21:55:07
Luschi
Hallo Werner & Yal,

hier mal meine PQ-Version:
- das funktioniert auf der Grundlage der PQ-List-Funktionalitäten
- und ist dadurch sehr stark M-lastig
- aber dafür müssen keine Spalten erstellt bzw. gelöscht werden

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

Ob Yal's Version wirklich schneller ist, kann ich mir nicht vorstellen, da in der benutzerdefinierten Funktion bei jedem Aufruf Daten aus der Excel-Tabelle gelesen werden müssen und das kostet wohl Zeit.

Gruß von Luschi
aus klein-Paris


Anzeige
AW: vielen Dank auch hierfür und ...
24.02.2024 14:03:28
Yal
Hallo Luschi,

da würde ich den Preis "Best Abuse Of The Rules" verleihen: die benutzerdefinierte Funktion anprangern, aber selber eine inline-Funktion einbauen :-)
Trotzdem volle Anerkennung für die Leistung. Es steckt eine Menge Gehirnschmalz dahinter (Text.PositionOfAny ist was ich gesucht hatte).

Im Prinzip kommt es auf dasselben raus. Was aber über Power Query wichtig zu wissen ist, dass die "Code-Päkchen" (No Code), die man per Klick aufstellen kann, so geschnitten sind, dass der Power Query "Compiler" (oder ähnlichen) selbst Optimierung vornehmen kann (so mindestens der MS-Werbetrommel. Es gehört auch dazu, dass Funktionsaufruf mit mehr soviel Overhead mit sich bringt, als wie z.B. VBA). Wenn man aber den Code selber anpasst (Low Code), könnte diese Optimierung gebremst werden. Hier auch, laut allgemeine MS-Aussage, bzw. wenn man zwischen den Zeilen liesst.

So oder so, egal. Hauptsache hat man ein Code, der funktioniert. Die Performance sollte zuerst zweitrangig sein. Es wird nicht bei jeder Eingabe angestossen.

Was ich aber für wichtig achte: der Code sollte leicht verständlich und nachvollziehbar sein. Hier geht es darum, dass der nächste arme Kollege, der mein Werk erbt, nicht so verloren ist, dass er doch lieber alles selber neu aufstellt. Da wäre das Wiederverwendungsziel verpasst.

VG
Yal
Anzeige
AW: vielen Dank auch hierfür und ...
26.02.2024 17:56:40
Luschi
Hallo Yal,

ich habe mich doch nicht darüber gewundert, daß Du benutzerdefinierte Funktionen benutzt, denn die setze ich ja auch gerne ein, sondern darüber:
- daß Du darin diesen PQ-Schritt hast: Quelle = Excel.CurrentWorkbook(){[Name="SUCH"]}[Content],
- so das bei jedem Aufruf aus dem Excelbereich Daten gelesen werden müssen (was ja Zeit kostet)
- ob der PQ-Compiler so intelligent ist, diese Zeile in 1en Zwischenspeicher zu laden
- und darauf zurückzugreifen, wenn diese PQ-Zeile wieder ausgeführt werden soll, ist wohl nicht zu erwarten
- aber wer weiß das schon

Gruß von Luschi
aus klein-Paris

PS: den "Best Abuse Of The Rules" nehme ich natürlich an, wenigsten 1 Anerkennung, die ich dann vorweisen kann!
Anzeige
AW: offensichtlich ist nun, ...
27.02.2024 14:11:29
neopa C
Hallo Luschi,

... daß meine ausgegebene Zielstellung "Aber mich würde eine möglichst weitestgehend interaktive Lösung interessieren" wohl nicht realisierbar scheint. Oder?

Du als passionierter Programmierer in/mit verschiedenen Programmiersprachen hast Deinen Lösungsvorschlag vorwiegend mit M-Code-Kenntnissen realisiert. Für Dich wie Yal wohl naheliegender und möglicherweise auch nur so realisierbar. Aber für mich als Hobbyexcelianer ohne jegliche Programmiererfahrung zunächst nicht wirklich ohne großen Aufwand verständlich. Meine XL2010er Formellösung finde ich jedenfalls dagegen einfach(er), "schlanker" auf jeden Fall.

Mich würde nun interessieren ab ca. wieviel auszuwertenden Datensätzen, Deine und oder Yals PQ-Lösung aus Performancegründen (m)einer Formellösung vorzuziehen wäre. Wobei die XL-365er Formellösung von Daniel im Ursprungsthread evtl. noch performanter als meine sein könnte. Schneller erstellt wäre sie für mich jedenfalls, sobald ich dann mal auf XL365 umgestiegen sein sollte.

Gruß Werner
.. , - ...



Anzeige
AW: vielen Dank auch hierfür und ...
26.02.2024 19:55:20
Yal
Oha, da könnte ich etwas übersehen haben...

was mich retten könnte, ist die Recherche, die ich gerade für ein anderen Beitag gemacht habe: https://www.herber.de/forum/messages/1967168.html

Im aufgeführten Link https://exceleratorbi.com.au/remove-duplicates-keep-last-record-power-query/ geht es darum, dass PQ mansche Schritte "weg optimiert". Ich gehe daher davon aus, dass auch innerhalb einer Funktion ein gewisse Caching stattfindet, und dass der Teil, die immer wieder in genau demselben Zustand wiederverwendet wird, es kann die erste oder mehrere ersten Schirtte sein, auf die Seite gestellt, und nicht aufs neu abfragt. Diese Optimierung scheint schrittweise zu funktionieren.

Wir sind hier schon ein paar Generation von "Mensch sagt dem dummen Computer, was er in welcher Reihenfolge zu tun hat" entfernt. Aber mit noch ein Paar Tücken.

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige