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

Pivotieren mit PQ ohne Aggregation ...

Pivotieren mit PQ ohne Aggregation ...
03.03.2022 09:13:46
neopa
Hallo an die PQ Profis,
... in der Datei: https://www.herber.de/bbs/user/151524.xlsx möchte ich die tab_Daten aus Tabelle 1 (die sich natürlich beliebig erweitern können) mittels PQ in das Zielergebnis E1:I4 transformieren.
Zwei meiner Versuche mit für mich nicht zufriedenstellenden Ergebnis hab ich mit eingestellt.
Wie sieht eine korrekte PQ-Lösung aus?
Gruß Werner
.. , - ...

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
E2: einzelne dynamische Formel
03.03.2022 12:34:09
lupo1
=
GLÄTTEN(TEIL(WECHSELN(
EINDEUTIG(tab_Daten[Abt])&" "&NACHZEILE(
GLÄTTEN(TEIL(WECHSELN(NACHZEILE(
EINDEUTIG(tab_Daten[Abt]);
LAMBDA(y;TEXTVERKETTEN(" ";;WENN(tab_Daten[Abt]=y;tab_Daten[Proj];""))))
;" ";WIEDERHOLEN(" ";599));SEQUENZ(;99;1;599);599));
LAMBDA(x;TEXTVERKETTEN(" ";;SORTIEREN(x;;;1))))
;" ";WIEDERHOLEN(" ";599));SEQUENZ(;99;1;599);599))

mit Doppel-TEXTVERKETTEN, Doppel-GLÄWEXWDH und Spalten-SORTIEREN.
Nur als Denksport für mich, nicht so sehr als Lösung für Dich.
AW: danke, aber ich such eine PQ-Lösung owT
03.03.2022 13:14:29
neopa
Gruß Werner
.. , - ...
Vielleicht hilft es Dir (von innen gerechn.) dabei
03.03.2022 13:20:21
innen
AW: hilft nicht ... thread weiter offen ...
03.03.2022 13:30:39
neopa
Hallo lupo,
... denn erstens hab ich immer nur eine ältere XL-Version und beabsichtige auch nicht die Online Funktionalitäten, falls es damit auch gehen sollte zu nutzen und zweitens kann man mE Formellösungen nicht so einfach 1:1 in PQ transformieren, wie es auch umgekehrt so nicht möglich ist.
Ich bin mir aber sicher, das meine Problemstellung durch jemanden der mehr Erfahrung mit PQ hat als ich, lösbar sein sollte.
Gruß Werner
.. , - ...
Anzeige
Es könnte tatsächlich sein, dass PQ ...
03.03.2022 13:39:02
lupo1
... nicht Einzelzeilen nach Spalten sortieren kann. Glaube ich aber dann doch nicht. Bei LAMBDA geht es auch nur TEXTVERKETTENderweise. Das ist aber m.E. ein Konzept-Fehler von MS.
AW: danke; aber bitte lass den thread offen owT
03.03.2022 14:10:34
neopa
Gruß Werner
.. , - ...
Ich verlinke mal zu MSOF ... dort viele PQler
03.03.2022 15:28:06
lupo1
Ich habe übrigens noch nie ein "Noch offen"-Kästchen bei Herber angeklickt. Heute das erste Mal.
AW: Pivotieren mit PQ ohne Aggregation ...
03.03.2022 15:39:45
ChrisL
Hi Werner
https://www.herber.de/bbs/user/151537.xlsx
Die (horizontale) Sortierung habe ich nicht hinbekommen, aber ich glaube eine Sortierung macht in dieser Form der Darstellung sowieso wenig Sinn.
cu
Chris
Anzeige
Das müsstest Du begründen ...
03.03.2022 15:45:17
lupo1
... warum soll PQ nicht auch eine unorthodoxe Ausgabe erzeugen können?
Ich sag mal so (als Beispiel): Wagenstandanzeige-Tafel auf dem Bahngleis. Das ist wichtig für viele Leute, damit sie richtig einsteigen.
AW: Das müsstest Du begründen ...
03.03.2022 16:47:51
ChrisL
Hi
Dass eine solche Sortierung wünschenswert wäre ("der Kunde ist König"), streite ich nicht ab. Ich habe es einfach nicht hinbekommen. Im Rahmen von Gruppierungen wird die PQ-Sortierung scheinbar ignoriert. Womöglich würde es helfen, wenn man die Rohdaten sortiert.
Meine Aussage zum (Un-)sinn begründe ich wie folgt:
Je nach Anzahl Projekte, erscheint ein und dasselbe Projekt in einer anderen Spalte. Es ist also Zufall, ob z.B. Projekt2 in der 1. oder 2. Spalte steht. Ein Sortierung beeinflusst den Zufall nicht.
In einer Datenbank bzw. Abfrage-Logik (Query) hat jede Spalte einen ganz bestimmten Informationsgehalt. Zufälle betr. Zuweisung zu Spalten dürfte es eigentlich nicht geben. Wir befinden uns also nicht mehr in einer klassischen Daten-Logik, weshalb ich die Aufgabe von PQ an dieser Stelle für beendet sehe.
Zugegeben, ein wenig "Ausrede" ist dabei und ganz so pointiert würde ich die Aussage nachträglich nicht mehr machen. Aber der Einwand, ob die Darstellung noch etwas mit Abfragen/Queries zu tun hat, könnte man gelten lassen. :)
cu
Chris
Anzeige
Ja, das ist ein guter Einwand
03.03.2022 17:35:30
lupo1
... die Rohdaten würden sogar als erstes sortiert. Dagegen wird neopa nichts haben können, weil die Wagenstandanzeige bei ihm auch sortiert ist.
Wenn man Texte verketten und wieder trennen könnte, ginge es auch in PQ. Sogar ohne TEXTVERKETTEN:
Sortierung und Verkettung mit C2: =WENN(A2=A1;C1&" ";"")&B2
Abt_01 Proj_01 Proj_01
Abt_01 Proj_05 Proj_01 Proj_05
Abt_02 Proj_01 Proj_01
Abt_02 Proj_02 Proj_01 Proj_02
Abt_02 Proj_04 Proj_01 Proj_02 Proj_04
Abt_02 Proj_05 Proj_01 Proj_02 Proj_04 Proj_05
Abt_03 Proj_02 Proj_02
Abt_03 Proj_03 Proj_02 Proj_03
Abt_03 Proj_04 Proj_02 Proj_03 Proj_04
Die Spalte C klappt m.E. auch in PQ.
Als nächstes filtert man die Zeilen, wo Inhalt Folgezeile (A:A) ungleich dem der lfd Zeile ist.
Der letzte Schritt ist dann das Aufteilen der Spalte C:
Das wäre übrigens auch eine Lösung ohne LAMBDA (aber mit LET) als Formellösung.
Anzeige
AW: die Gruppierung scheint das Problem zu sein ..
03.03.2022 16:24:01
neopa
Hallo Chris,
... vielen Dank schon mal für Deine Lösungsvariante, die war mir eine gute Hilfe für die Lösung.
Wenn man nach dem Einlesen der Daten ein Sortieren der "Poj" und danach die "Abt" vornimmt stimmt die gewünschte Reihenfolge . Aber die Gruppierung ignoriert einfach die Sortierung. Nun habe ich noch eine erste INDEXSpalte vor dem Gruppieren eingefügt und siehe da, es ist die Lösung.
let
Quelle = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Sortierte Zeilen" = Table.Sort(Quelle,{{"Proj", Order.Ascending}, {"Abt", Order.Ascending}}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Sortierte Zeilen", "Index", 1, 1, Int64.Type),
#"Gruppierte Zeilen" = Table.Group(#"Hinzugefügter Index", {"Abt"}, {{"alle", each _, type table [Abt=text, Proj=text]}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Benutzerdefiniert", each Table.AddIndexColumn([alle],"Index2",1)),
#"Erweiterte Benutzerdefiniert" = Table.ExpandTableColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Benutzerdefiniert", {"Proj", "Index2"}, {"Proj", "Index2"}),
#"Geänderter Typ" = Table.TransformColumnTypes(#"Erweiterte Benutzerdefiniert",{{"Index2", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Geänderter Typ", "Nr", each [Index2]&". Pr"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte1",{"alle", "Index2"}),
#"Pivotierte Spalte" = Table.Pivot(#"Entfernte Spalten", List.Distinct(#"Entfernte Spalten"[Nr]), "Nr", "Proj")
in
#"Pivotierte Spalte"
Hab jetzt gleich einen Termin melde mich später nochmal dazu.
Gruß Werner
.. , - ...
Anzeige
AW: die Gruppierung scheint das Problem zu sein ..
03.03.2022 18:03:58
Luschi
Hallo Werner / ChrisL,
ich habe zu ChrisL's Lösung meinen Senf dazugetan und die vertikale Sortierung der Projektnamen eingebaut.
Über diesen Trick 17 bin ich heute zufällig im I-Net gestolpert (Näheres siehe Komentare im M-Code)
https://www.herber.de/bbs/user/151540.xlsx
Gruß von Luschi
aus klein-Paris
AW: scheint mir so ...
03.03.2022 20:18:06
neopa
Hallo Luschi,
... als ob sie die bisher effektivste PQ-Lösung des Problems sein könnte. Vielen Dank für Deine Lösung.
Die Lösungen im MSO-Forum hab ich mir noch nicht näher angeschaut. Da ich mich dort nicht noch anmelden möchte, mal nachgefragt, kannst Du hier die dortige Datei von WS-53 einstellen? Wäre schon auch interessant.
Gruß Werner
.. , - ...
Anzeige
AW: hierzu ...
04.03.2022 10:01:34
neopa
Hallo Luschi,
... vielen Dank für die Einstellung der Datei von WS-53. Diese ist zumindest vom Ergebnis her das Gleiche, wie die erste Lösung von Chris und somit nicht das, was angestrebt war und zwischenzeitlich bereits auf Basis dessen schon gelöst war.
Gruß Werner
.. , - ...
AW: Danke ...
03.03.2022 20:10:48
neopa
Hallo Chris,
... für diese Deine Lösung und Deine Hinweis auf die Funktion. Diese kann wohl so einiges vereinfachen.
Gruß Werner
.. , - ...
AW: jetzt auch noch sortiert...
03.03.2022 20:39:09
Luschi
Hallo ChrisL,
ich habe Deine Version noch ein bisßchen verschlimm-bessert:
- beim Sortieren und anschließenden Indizieren werden keine neuen Spalten angelegt
- sondern alles passiert intern in der Spalte [alle]
- indem die entsprechenden Befehle in Table.TransformColumns(..). eingebettet werden
Ob es nur eine Spielerei mit der M-Sprache ist, oder auch Geschwindigkeitsvorteile bringt, weiß ich ncht.
Der PQ-Editor hilft einem dabei jedenfalls nicht.
https://www.herber.de/bbs/user/151541.xlsx
Gruß von Luschi
aus klein-Paris
Anzeige
AW: viele Wege führen nach Rom, ...
04.03.2022 09:53:00
neopa
Hallo Luschi,
... jetzt gilt es nur noch für mich den geeignetsten zu finden.
Vielen Danke Dir, mir einen weiteren Weg gezeigt zu haben, wenn auch nicht den einfachsten.
Gruß Werner
.. , - ...
AW: jetzt auch noch sortiert...
04.03.2022 10:04:24
ChrisL
Hi Luschi
Danke für die Rückmeldungen.
Jetzt hat Werner eine grössere Auswahl an Lösungsmöglichkeiten. Eine kleine Ergänzung hätte ich auch noch, nämlich dass sich die Funktionen auch verschachteln lassen z.B.

=Table.AddIndexColumn(Table.Sort([alle],"Proj"),"Index",1)
(Sortierung und Index in einem Klacks)
cu
Chris
Anzeige
AW: jetzt auch noch sortiert...
04.03.2022 10:48:04
Luschi
Hallo ChrisL,
User WS-53 hatte im MSO-Forum angedeutet, daß bei Table.Sort, die Benutzung von Table.Buffer sinnvoll wäre; weißt Du da mehr?
Mir ging es ja eigentlich darum, zu zeigen, daß nicht für jede Aktion (Index, Sort usw.) jedesmal eine neue Spalte angelegt wird, sondern sowas auch innerhalb der gleichen Spalte passieren kann - und so Löschaktionen entfallen können.
Gruß von Luschi
aus klein-Paris
AW: jetzt auch noch sortiert...
04.03.2022 11:24:05
ChrisL
Hi Luschi
Guter Punkt. Buffer scheint des Rätsels Lösung.
Ich muss zugeben, dass ich mich bei Aussagen zum Speichermanagement ausserhalb meiner Komfortzone bewege. Aber ich versuche trotzdem meine Erkenntnisse aufgrund einer kurzen Recherche zu Table.Buffer() zu vermitteln.
https://docs.microsoft.com/en-us/powerquery-m/table-buffer
Auto-Translate:
Puffert eine Tabelle im Arbeitsspeicher und isoliert sie während der Auswertung von externen Änderungen. Die Pufferung ist oberflächlich. Es erzwingt die Auswertung aller skalaren Zellwerte, lässt aber nicht skalare Werte (Datensätze, Listen, Tabellen usw.) unverändert.
Beachten Sie, dass die Verwendung dieser Funktion dazu führen kann, dass Ihre Abfragen schneller ausgeführt werden oder nicht. In einigen Fällen kann dies dazu führen, dass Ihre Abfragen langsamer ausgeführt werden, da die zusätzlichen Kosten für das Lesen aller Daten und das Speichern im Speicher sowie die Tatsache, dass die Pufferung ein Downstream-Folding verhindert, hinzukommen.

Table.Buffer kann also die Laufzeit beschleunigen oder verlangsamen. Kommt drauf an.
Bezogen auf die Aufgabe scheint mir folgender Beitrag interessant:
https://community.powerbi.com/t5/Desktop/How-do-I-buffer-my-table-in-Power-Query/m-p/778115
In meinen Laien-Worten ausgedrückt:
PQ hat seine eigenen Wege zur Optimierung. Das Ignorieren von Sortierungen im Rahmen von Gruppierungen scheint eine solche automatische Performance-Optimierung zu sein.
Mit Table.Buffer nimmt man die automatische Dynamik raus. Die Tabelle wird quasi "statisch" in den Speicher geladen.
Fazit:
Wäre die Sortierung nicht ignoriert worden, hätte man im ursprünglichen Lösungsansatz einfach direkt nach Einlesen der Quelle sortiert und alles wäre gut gewesen.

Quelle = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Sortierte Zeilen" = Table.Sort(Quelle,{{"Proj", Order.Ascending}}),
...
Indem man die Tabelle "buffert" und damit "statisch" macht, löst man das Problem.

Quelle = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Sortierte Zeilen" = Table.Buffer(Table.Sort(Quelle,{{"Proj", Order.Ascending}})),
...
cu
Chris
AW: an Alle die hierzu beigetragen haben ...
04.03.2022 10:23:32
neopa
Hall @all,
... an lupo, Chris, Luschi aber auch die Mitwirkenden im MSO-Forum mein Dank. Habe so wieder einiges gelernt.
Möchte aber nicht versäumen hier kundzutun, dass ich persönlich die von mir geforderte Lösung - auch horizontal lückenlose sortierte Ausgabe der Projekte - niemanden wirklich empfehlen würde.
Ich hätte eine reine Pivotlösung vorgenommen, die vom Ergebnisbild her meiner Piv_2 Ergebnislösung in etwa entspricht. Nur dass die Projekte in der Matrix mit Pivot nicht nochmal gelistet sondern durch ein "x" gekennzeichnet werden. Diese "x" hätte ich durch ein benutzerdefiniertes Zahlenformat der Zahl 1 erzeugt, welche für den Ergebniswert der Pivotauswertung nach Anzahl ermittelt wird. Eine solche Auswertung ist mE nicht nur am einfachsten und schnellsten erstellt sondern auch am übersichtlichsten. Aber natürlich ist das nur meine persönliche Ansicht. Andere sehen das womöglich eben anders.
Gruß Werner
.. , - ...
Empfehlungen sind immer so eine Sache
04.03.2022 11:55:58
lupo1
Wenn täglich ein Wagenstandanzeiger (der genauso aussieht, wie Deine PQ-Ausgabe) gedruckt werden soll, ist man froh, das automatisiert ausgeben zu können.
Überhaupt sind "Ausgaben" (als menschliche Schnittstelle für schnelles Erfassen) wichtig; sie haben mit korrekter Datenanordnung nichts zu tun. Die Daten für diese Ausgabe aber sollten korrekt sein.
Aber auch hier gibt es Ausnahmen. Ich erfasse die einzelnen Kostenarten von Beteiligten (oder: Monaten!) gern in einer Kreuztabelle, weil dann optisch viel besser "Plausi" möglich ist. Diese UNPIVOTiere ich in korrekte Datenanordnung und kann daraus dann in jede Richtung pivotieren.
https://www.office-hilfe.com/support/threads/36909#UNPIVOT
AW: hierzu ...
09.03.2022 13:05:36
neopa
Hallo Oli,
... vielen Dank auch für Deinen Beitrag. Dein Lösungsansatz ist prinzipiell gleich denen von ChrisL und Luschi. Aber wenn Du die Lösung selbst erarbeitet hast, dann hat sie Dir sicherlich auch Freude bereitet.
Gruß Werner
.. , - ...
AW: hierzu ...
09.03.2022 14:17:44
ChrisL
Hi Werner
Soweit ich sehe hat Oli gleich zum Start eine ordentliche Typenkonvertierung durchgeführt und dadurch funktionierte die anschliessende Sortierung trotz Gruppierung. Darum braucht es keinen Buffer oder Sortierung der bereits gruppierten Tabellen.
Die automatische Typenkonvertierung bzw. das Arbeiten mit korrekten Datentypen hat scheinbar auch in PQ einen höheren Stellenwert, wie ich zeitweise angenommen habe.
cu
Chris
AW: danke für euer Feedback owT
09.03.2022 16:04:03
Oli
danke für euer Feedback
Oli
AW: ja, so gesehen ...
09.03.2022 17:42:42
neopa
Hallo Chris und Oli,
... ist die Lösung von Oli es noch eine weitere Lösungsvariante. Gegenüber Deiner 2. Variante fehlt wie bei der von Luschi nur noch die Erweiterung der Nummern in der Überschriftszeile, so dass die Lösung von Oli ein Schritt mehr benötigt aber auch dann noch ein Schritt weniger als meine.
Ich danke Euch beiden für meinen weiteren Kenntniszugewinn.
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige