Anzeige
Archiv - Navigation
1732to1736
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

benötige Hilfe für eine PQ-Lösung ...

benötige Hilfe für eine PQ-Lösung ...
13.01.2020 14:32:00
neopa
Hallo an die PQ-Profis,
... die in beigestellter Datei, Spalte A vorhandenen Daten Siehe: https://www.herber.de/bbs/user/134364.xlsx sollen in eine anders strukturierte Datentabelle überführt werden.
Zur ergänzenden Erklärung:
Die Leerzeilen zwischen den Datenblöcken sind vorhanden und teilweise nicht vorhanden sind einige Datenwerte, die Kennzeichen dagegen immer. Es gibt drei unterschiedliche Datenformate: Text, Ganzzahl und Datumswert.
Maßgebliches Trennzeichenkette ist: "-:-" und die teilweise vorhandene Füllzeichenkette "-$X$999" soll entfallen. Ebenso alle überflüssigen (es gibt in den Textdaten teils real notwendige) Leerzeichen.
Mit den Funktionen Text in Spalten, Suchen und ERSETZEN und anschließender Formelauswertung mit u.a. INDEX(), ZEILE(), SPALTE(), REST(), GLÄTTEN() wäre mir zwar die Ergebnisermittlung für das Beispiel möglich, jedoch können es teils viele 10.000 auszuwertende Datensätze sein. Es ist sicherlich auch mit PQ nicht schwer, aber ich hab leider nicht den richtigen Ansatz für die notwendige Transformation gefunden. Für Euch sicherlich einfach
Gruß Werner
.. , - ...

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kein VBA?
13.01.2020 14:49:34
Fennek
Hallo,
wenn man zuerst die Blöcke ordentlich trennt, sich es nur wenigen Zeilen Code mit "Areas" und "Transpose". Käme das in Frage?
mfg
AW: nein kein VBA, danke Dir owT
13.01.2020 14:51:09
neopa
Gruß Werner
.. , - ...
"Da geht bestimmt eine PQ-Lösung!"
13.01.2020 14:57:41
lupo1
D3:
=GLÄTTEN(WECHSELN(TEIL(WECHSELN(
INDEX($A:$A;ZEILE(A1)*10-9+SPALTE(A1));"-";WIEDERHOLEN(" ";99));(LÄNGE(
INDEX($A:$A;ZEILE(A1)*10-9+SPALTE(A1)))-LÄNGE(WECHSELN(
INDEX($A:$A;ZEILE(A1)*10-9+SPALTE(A1));"-";))+1)*99-98;99);"!";))

in D, H, I, K durch -- zu verschönern (K zusätzlich Datumformat)
AW: na sicher doch, die Frage ist bloß wie owT
13.01.2020 15:03:35
neopa
Gruß Werner
.. , - ...
Günther schnitzt bereits ...
13.01.2020 15:06:00
lupo1
... vermute ich. Der muss ja auch mal nen Kaffee trinken und entlassen.
Anzeige
AW: Günther schnitzt bereits ...
13.01.2020 20:54:06
Günther
:-))
Nein, denn ich habe diesen Thread erst jetzt gesehen. (13.01.2020, 20:49).
Aber ich sehe mir mal die bisherigen Lösungen an, vielleicht kann ich ja noch etwas ergänzen?
Ach so, aus innerer Überzeugung ignoriere ich NUR-M-Code Lösungen komplett...
Gruß
Günther
Formel noch erheblich kürzer
14.01.2020 00:47:50
lupo1
D3:
=GLÄTTEN(RECHTS(WECHSELN(WECHSELN(
INDEX($A:$A;ZEILE(A1)*10-9+SPALTE(A1));"-";WIEDERHOLEN(" ";99));"!";);99))

AW: benötige Hilfe für eine PQ-Lösung ...
13.01.2020 16:31:43
Besserwisser
Hallo,
hier mein Ansatz in PowerQuery:
https://www.herber.de/bbs/user/134369.xlsx
Gruß
Christian
Anzeige
Tolle Lösung - wird gespeichert ;-) Gruß
13.01.2020 17:07:16
robert
AW: das sieht gut aus ...
13.01.2020 17:08:05
neopa
Hallo Christian,
... an der Idee den INDEX zu dividieren hat es mir gemangelt.
Hab jetzt auch noch etwas länger nach dem richtigen Einsatz der Funktion "Spalte pivotieren" suchen müssen. Nun ist aber alles klar, :-)
Vielen Dank.
Gruß Werner
.. , - ...
AW: benötige Hilfe für eine PQ-Lösung ...
13.01.2020 17:15:12
ChrisL
Hi
Die Idee mit Index/Division gefällt mir (werde ich mir gedanklich speichern).
Trotzdem hier noch eine Variante ohne Index/Division, dafür mit "Ausfüllen" (FillDown) der eindeutigen Nr_1.
let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Vorhanden", type text}}),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Geänderter Typ", "Vorhanden", Splitter.SplitTextByEachDelimiter({"-:-"}, QuoteStyle.Csv, false), {"Vorhanden.1", "Vorhanden.2"}),
#"Hinzugefügte bedingte Spalte1" = Table.AddColumn(#"Spalte nach Trennzeichen teilen", "Nr1", each if [Vorhanden.1] = "Nr_1" then [Vorhanden.2] else null),
#"Nach unten gefüllt" = Table.FillDown(#"Hinzugefügte bedingte Spalte1",{"Nr1"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Nach unten gefüllt", each ([Vorhanden.1] "")),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Gefilterte Zeilen",{"Nr1", "Vorhanden.1", "Vorhanden.2"}),
#"Pivotierte Spalte" = Table.Pivot(#"Neu angeordnete Spalten", List.Distinct(#"Neu angeordnete Spalten"[Vorhanden.1]), "Vorhanden.1", "Vorhanden.2"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Pivotierte Spalte",{"Nr1"})
in
#"Entfernte Spalten"
cu
Chris
Anzeige
AW: auch eine Lösungsmöglichkeit, wobei ...
13.01.2020 17:33:03
neopa
Hallo Chris,
... mir Christians Idee mit der Index/Division noch etwas besser gefällt.
Vielen Dank aber auch für Deine Lösung.
Gruß Werner
.. , - ...
Vor-/Nachteile
13.01.2020 18:14:14
ChrisL
Hi Werner
Danke für die Rückmeldung. Da die Quelldaten vermutlich automatisiert und standardisiert erstellt wurden, ist es egal. Ein Unterschied gibt es jedoch, wenn mit kleineren Inkonsistenzen gerechnet werden muss.
Die Lösung von Christian würde verzeihen, wenn die Reihenfolge innerhalb vom Block variiert (z.B. Nr1 und Bez1 vertauscht wären). Zudem darf die Nr1 auch mehrfach vorkommen (ohne Aggregation).
Dafür würde meine Lösung verzeihen, wenn ein Kriterium fehlen würde (ein einzelner Block z.B. nur 8 statt 9 Zeilen hat). Im Gegenzug muss die Nr1 immer an erster Stelle vom Block stehen und eindeutig sein.
cu
Chris
Anzeige
AW: hierzu ...
13.01.2020 19:04:21
neopa
Hallo Chris,
... im vorliegenden Fall sind beide von Dir benannten jeweiligen Hauptbedingungen gewährleistet. D.h es sind exakt immer Blöcke aus 8 Datensätzen und auch steht die Nr_1 immer an erster Stelle.
Jedoch ist diese Nummer (Nr_1) in einigen Datensatzblöcken identisch. Dann würde es mE zu Problemen kommen. Dann müsste ich wohl in so einem Fall (dass doch nicht exakt immer 8 Datensätze vorliegen) auch eine Indexierung dieser Nr_1 vornehmen um eineindeutige ID zu erzeugen.
Danke für Deine zusätzlichen Überlegungen.
Gruß Werner
.. , - ...
AW: benötige Hilfe für eine PQ-Lösung ...
13.01.2020 17:06:01
Besserwisser
und nun noch mit kleinen Verbesserungen, Formatierung (Datum, Ganzzahl, Text)…
https://www.herber.de/bbs/user/134371.xlsx
Gruß
Christian
Anzeige
AW: ja, diese "Layout-Kosmetik" hatte ich schon...
13.01.2020 17:18:10
neopa
Hallo Christian,
... auch vorgenommen. Aber trotzdem auch dafür meinen Dank an Dich.
Unklar ist mir noch, warum beim ersten Aktivieren einer "Fremd-PQ-Datei" immer diese Kompatibilitätswarnung erscheint, obwohl offensichtlich alles stimmig scheint?
Mit welcher XL-Version hast Du die Datei bearbeitet?
Gruß Werner
.. , - ...
AW: ja, diese "Layout-Kosmetik" hatte ich schon...
13.01.2020 17:24:44
Besserwisser
Hallo Werner,
Office 365, 16.0.12430.20000
Gruß
Christian
AW: danke, nun ist auch das nachvollziehbar...
13.01.2020 17:37:04
neopa
Hallo Christian,
... denn meine aktuell gehaltene Home and Business 2016 Version hat erst das Build 12130.
Gruß Werner
.. , - ...
AW: danke, nun ist auch das nachvollziehbar...
13.01.2020 21:49:19
Günther
… und ich habe auch "geschnitzt" ;-)
Meine Version ist in vielen (entscheidenden) Punkten identisch mit der von Christian (Besserwisser). Das mit dem Ausrufungszeichen habe ich (wahrscheinlich aus Übervorsicht) etwas anders gelöst, es wird nur das "!" gelöscht, welches am Ende des Feldes steht (könnte ja sein, dass sich da noch eines an vorheriger Stelle eingeschlichen hat) und die "lfd" berechne über die Rest-Funktionalität. Mit 2019 bzw. 365 wäre dieses oder jenes noch "runder" zu lösen, aber leider eben nicht abwärtskompatibel.:-(
Eine Prüfung auf 8er-Blockgrößen halte ich für überflüssig. Die Rohdaten sind ja ganz offensichtlich einen Export aus einer Datenbank (welcher auch immer) handelt ist gewährleistet, dass das 8+1 - Intervall erhalten bleibt.
Gruß
Günther
Anzeige
AW: hierzu ...
14.01.2020 10:11:29
neopa
Hallo Günther,
... Du hast völlig Recht, es handelt sich um Datenexport aus einem "Uralt"-(Datenbankbasierten)Programms, so dass mit sehr großer Wahrscheinlichkeit die Blockgrößen immer die gleichen sind. Aber ich halte die Aussage von Chris trotzdem als beachtenswert.
Die überflüssigen Füllzeichenkette und das "!" (in den relevanten Daten nicht vorhanden) hatte ich übrigens auch anders als Christian einfachen mit Ersetzen durch "" gelöst.
Mich würde momentan noch interessieren, ob denn in den neueren Excelversionen die Pivotierungsfunktionalität nun auch im Kontextmenü angezeigt wird (hatte gestern nämlich wieder bestimmt eine Weile gesucht bis ich sie dann fand)?
Gruß Werner
.. , - ...
Anzeige
AW: hierzu ...
14.01.2020 11:41:01
Günther
Moin Werner,
nööö… Ich habe Version 1912 (Build 12325.20288 Klick-und-Los), gerade noch das Update gemacht und da ist das "Pivotieren" nach wie vor nur im Menü Transformieren zu finden.
Gruß
Günther
AW: also auf "Niveau" von 1912 ;-) danke owT
14.01.2020 12:00:48
1912
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige