Anzeige
Archiv - Navigation
1916to1920
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

Power Query - versetzte Zeilen

Power Query - versetzte Zeilen
26.01.2023 10:25:53
Kai
Moin moin,
ich habe mal eine Frage. Ich habe Inventurergebnisse als Textdatei und will diese mittels Power Query in Form bringen, damit verschiedene Menschen damit gut arbeiten können und ich das bei jeder folgenden Inventur gut anwenden kann. So weit, so gut. Durch ein Riesenlager kann es sein, dass Artikel an verschiedenen Positionen stehen und dementsprechend auf vielen verschiedenen Zählseiten aufgenommen werden. Diese Seitenzahlen werden in den Ergebnissen mit aufgeführt - allerdings trennt unser Programm nach 4 Seitenzahlen in die nächste Zeile auf. Ich möchte aber, dass pro Artikel eine Zeile da ist mit allen Seitenzeilen aneinandergereiht. Wie mache ich das in Power Query? Jemand eine Idee? Ich bin soweit, dass ich alle Zeilen in Spalten rechts angefügt bekomme aber dann stehen sie halt alle versetzt. Ich kann da ja schlecht leere löschen bzw. rausfiltern weil dann haben die zeilen keinen bezug mehr zur Artikelposition...
Userbild
Gruß
Kai

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: so noch nicht eindeutig ...
26.01.2023 10:58:01
neopa
Hallo Kai,
... u.a. was genau Du wo zunächst hast. Was sind Seitenzahlen und was Seitenzeilen? (D)eine (Beispiel)datei mit dem IST und Deinem Ziel wäre hilfreicher.
Aber vielleicht reicht Dir ja auch schon der Hinweis auf die Funktion [Ausfüllen; nach unten]
Gruß Werner
.. , - ...
AW: so noch nicht eindeutig ...
26.01.2023 11:14:40
Kai
Mein Ziel ist folgendes: Ich möchte, dass alle zum Artikel gehörenden Seitenzeilen in einer Reihe stehen... Bei dem Begriff "Seiten" handelt es sich um die Listen, auf denen die Zähler die Zählungen aufnehmen. In dem gewählten Bild haben Zähler den Artikel "Kekse" auf der physischen Seite 10, 15, 16, 18, 100, 233, 355, 155, 184, 134, 122 aufgenommen. Das Programm zeigt aber pro Artikel nur 4 Zählseiten in einer Reihe und bricht dann in nächste Zeile um - das ist das Problem.
Das ist hierbei aber eigentlich auch nicht so wichtig. Wichtig ist, dass alle Zahlen von Leerzeilen zu dem darüber liegenden Artikel gehören aber man leider nie wissen kann, wieviele leere Zeilen es gibt. Das gewünschte Ergebnis ist eigentlich das hier:
Userbild
Gruß
Kai
Anzeige
AW: dazu ...
26.01.2023 11:22:46
neopa
Hallo Kai,
... lade doch einfach mal den vorherigen ISTzustand als XLSX-Datei hoch. Nachstellen möchte ich es nicht.
Gruß Werner
.. , - ...
AW: dazu ...
26.01.2023 11:25:48
Kai
Hi Werner,
das ist der IST-Zustand. Genau so bekomme ich die Zeilen ins Power Query importiert.
Gruß
Kai
AW: kann nur wiederholen ...
26.01.2023 11:33:11
neopa
Hallo Kai,
... sStelle doch den entsprechenden Tabellenauszug Deines Imports hier als XLSX-Datei ein. Dann sehen wir weiter. "Bilder" kann man in Excel nicht auswerten.
Gruß Werner
.. , - ...
AW: Datei liegt nun vor, thread aber offen ...
26.01.2023 12:02:25
neopa
Hallo Kai,
... die "Idee" die mir "vorschwebte", konnte ich mit PQ nicht realisieren.
Bin aber überzeugt, dass ein PQ-Profi Deine Zielstellung realisieren kann. Deshalb habe ich für diese den thread schon als offen gekennzeichnet. Musst jetzt halt vielleicht etwas Geduld haben.
Gruß Werner
.. , - ...
AW: Datei liegt nun vor, thread aber offen ...
26.01.2023 12:28:19
Kai
Okay, danke für Deine Bemühungen!
AW: Datei liegt nun vor, thread aber offen ...
26.01.2023 13:18:49
Yal
Hallo Kai,
Du musst die 4 ersten Spalten "nach unten" ausfüllen, dann entpivotieren. Repivotieren lässt sich wahrscheinlich nur "ohne Aggregation" realisieren, dann erweitern.
VG
Yal
AW: nachgefragt ...
26.01.2023 13:33:24
neopa
Hallo Yal,
... genau was Du geschrieben hattest, war heute Vormittag meine "Idee". Nach dem entpivotieren kam ich nicht zu dem angestrebten. Ich dachte dann, ich müsste die erzeugte "Attributspalte" für die Nr. 12345 entsprechend neu durchnummerieren. Kam damit aber auch nicht klar.
Kannst Du mal bitte Deinen M-Code einstellen?
Gruß Werner
.. , - ...
Anzeige
AW: nachgefragt ...
26.01.2023 14:30:48
Kai
Hmm...ich weiß nicht. Jetzt habe ich nur noch 2 Spalten und bei allen Artikeln, in denen mehr als 4 Seiten benutzt wurden dasselbe Problem - nur nach unten jetzt :D
AW: nachgefragt ...
26.01.2023 14:35:13
Yal
Hallo zusammen,
der "Repivotieren" passt nicht. Man muss gruppieren. Die Werte müssen zuerst zu Text, um als Textkette kombiniert zu sein.
let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Lagerplatz", Int64.Type}, {"Artikelnummer", Int64.Type}, {"Artikeltext", type text}, {"Warengruppe", type text}, {"Wert", Int64.Type}, {"Wert2", Int64.Type}, {"Wert3", Int64.Type}, {"Wert4", Int64.Type}, {"Wert5", Int64.Type}, {"Wert6", Int64.Type}, {"Wert7", Int64.Type}, {"Wert8", Int64.Type}, {"Wert9", Int64.Type}, {"Inventurseite 1", Int64.Type}, {"Inventurseite 2", Int64.Type}, {"Inventurseite 3", Int64.Type}, {"Inventurseite 4", Int64.Type}}),
    #"Nach unten gefüllt" = Table.FillDown(#"Geänderter Typ",{"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe"}),
    #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Nach unten gefüllt", {"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe"}, "Attribut", "Wert.1"),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Entpivotierte andere Spalten",{{"Wert.1", "Wert"}}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Umbenannte Spalten", "Kennzahl", each if Text.Start([Attribut],4)= "Wert" then "Wert" else "Inventurseite"),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Attribut"}),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Entfernte Spalten",{{"Wert", type text}}),
    #"Gruppierte Zeilen" = Table.Group(#"Geänderter Typ1", {"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe", "Kennzahl"}, {{"Liste", each Text.Combine([Wert],","), type text}}),
    #"Pivotierte Spalte" = Table.Pivot(#"Gruppierte Zeilen", List.Distinct(#"Gruppierte Zeilen"[Kennzahl]), "Kennzahl", "Liste"),
    #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Pivotierte Spalte", "Inventurseite", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Inventurseite.1", "Inventurseite.2", "Inventurseite.3", "Inventurseite.4", "Inventurseite.5", "Inventurseite.6", "Inventurseite.7", "Inventurseite.8", "Inventurseite.9", "Inventurseite.10", "Inventurseite.11", "Inventurseite.12", "Inventurseite.13", "Inventurseite.14", "Inventurseite.15", "Inventurseite.16"}),
    #"Geänderter Typ2" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Inventurseite.1", Int64.Type}, {"Inventurseite.2", Int64.Type}, {"Inventurseite.3", Int64.Type}, {"Inventurseite.4", Int64.Type}, {"Inventurseite.5", Int64.Type}, {"Inventurseite.6", Int64.Type}, {"Inventurseite.7", Int64.Type}, {"Inventurseite.8", Int64.Type}, {"Inventurseite.9", Int64.Type}, {"Inventurseite.10", Int64.Type}, {"Inventurseite.11", Int64.Type}, {"Inventurseite.12", Int64.Type}, {"Inventurseite.13", Int64.Type}, {"Inventurseite.14", Int64.Type}, {"Inventurseite.15", Int64.Type}, {"Inventurseite.16", Int64.Type}}),
    #"Spalte nach Trennzeichen teilen1" = Table.SplitColumn(#"Geänderter Typ2", "Wert", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Wert.1", "Wert.2", "Wert.3", "Wert.4", "Wert.5", "Wert.6", "Wert.7", "Wert.8", "Wert.9", "Wert.10", "Wert.11", "Wert.12", "Wert.13", "Wert.14", "Wert.15", "Wert.16", "Wert.17", "Wert.18"}),
    #"Geänderter Typ3" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen1",{{"Wert.1", Int64.Type}, {"Wert.2", Int64.Type}, {"Wert.3", Int64.Type}, {"Wert.4", Int64.Type}, {"Wert.5", Int64.Type}, {"Wert.6", Int64.Type}, {"Wert.7", Int64.Type}, {"Wert.8", Int64.Type}, {"Wert.9", Int64.Type}, {"Wert.10", Int64.Type}, {"Wert.11", Int64.Type}, {"Wert.12", Int64.Type}, {"Wert.13", Int64.Type}, {"Wert.14", Int64.Type}, {"Wert.15", Int64.Type}, {"Wert.16", Int64.Type}, {"Wert.17", Int64.Type}, {"Wert.18", Int64.Type}})
in
    #"Geänderter Typ3"
Die Anzahl an Spalten ist durch die Wiederholung der Elemente in Zeilen 1 und 4. Da müsste eher eine Summierung vorkommen, aber verliert man die Verbindung Wert zu InventurSeite.
Vielleicht reicht es, wenn man die 2 letzte "SplitColumn" auslässt.
VG
Yal
Anzeige
AW: das ist so nicht das gewünschte owT
26.01.2023 15:40:47
neopa
Gruß Werner
.. , - ...
AW: das ist so nicht das gewünschte owT
26.01.2023 22:51:30
Yal
Hallo zusammen,
da wäre dann Kais Rückmeldung gefragt.
In dem Beitrag von 26.01.2023 11:14:40 war aber etwas sehr ähnlich zu finden. Daran habe ich mich orientiert.
VG
Yal
Nur entpivotiert
26.01.2023 14:37:29
Yal
Vielleicht reicht es nur enpivotiert...
let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Lagerplatz", Int64.Type}, {"Artikelnummer", Int64.Type}, {"Artikeltext", type text}, {"Warengruppe", type text}, {"Wert", Int64.Type}, {"Wert2", Int64.Type}, {"Wert3", Int64.Type}, {"Wert4", Int64.Type}, {"Wert5", Int64.Type}, {"Wert6", Int64.Type}, {"Wert7", Int64.Type}, {"Wert8", Int64.Type}, {"Wert9", Int64.Type}, {"Inventurseite 1", Int64.Type}, {"Inventurseite 2", Int64.Type}, {"Inventurseite 3", Int64.Type}, {"Inventurseite 4", Int64.Type}}),
    #"Nach unten gefüllt" = Table.FillDown(#"Geänderter Typ",{"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe"}),
    #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Nach unten gefüllt", {"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe"}, "Attribut", "Wert.1"),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Entpivotierte andere Spalten",{{"Wert.1", "Wert"}}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Umbenannte Spalten", "Kennzahl", each if Text.Start([Attribut],4)= "Wert" then "Wert" else "Inventurseite"),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Attribut"}),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Entfernte Spalten",{{"Wert", type text}}),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Geänderter Typ1",{"Lagerplatz", "Artikelnummer", "Artikeltext", "Warengruppe", "Kennzahl", "Wert"})
in
    #"Neu angeordnete Spalten"
VG
Yal
Anzeige
AW: TE wollte es anders ...
26.01.2023 15:44:27
neopa
Hallo Yal,
... ich hatte das entpivotieren auch nur für die Spalten ab "Wert" vorgenommen. Doch dann kam ich nicht weiter.
Gruß Werner
.. , - ...
AW: Nur entpivotiert
27.01.2023 08:22:09
Luschi
Hallo PQ-Fan's,
Ich habe auf der Grundlage von Yal's Idee der Gruppierung/Entpivotierung ein bißchen mehr Dynamik für die 'Datentypänderung' und Splitten/Spaltenüberschriften hinzugefügt.
Hier mal mein Versuch: https://www.herber.de/bbs/user/157493.xlsx
Gruß von Luschi
aus klein-Paris
AW: Nur entpivotiert
27.01.2023 09:04:22
Kai
Moin moin,
das sieht gut aus! So muss das ;) Wie geht das?
Gruß
Kai
Anzeige
AW: wenn ich der TE wäre, ...
27.01.2023 09:12:12
neopa
Hallo Luschi,
... würde ich zu Deinem Ergebnis schreiben: "so meinte ich das nicht". Mein Ziel wäre es, dass die Datenwerte aus R5:Y5 in R2:Y2 "verschoben" sein sollten und die Datenzeile 5 damit ganz entfällt. Der aktuelle Datensatz in Zeile 6 hat dagegen seine Berechtigung, weil deren Daten sich in Wert.1 bis Wert.9 sich zumindest teilweise unterscheiden.
Persönlich meine ich nach wie vor, dass es am einfachsten ist, die Datensätze in PQ einzulesen, die fehlenden Datenwerte nach unten auffüllen zu lassen und dann nach Artikelnummer noch zu sortieren. Das ist einfach wie schnell getan und wäre für mich auch übersichtlich genug. Aber ich bin nicht der TE.
Gruß Werner
.. , - ...
Anzeige
AW: Nur entpivotiert
27.01.2023 10:07:46
Yal
@Luschi: sehr gut. Könnte zwar das Ergebnis sehen (die Erweiterung der Beispiel bringt mehr Sichtbarkeit für das Ergebnis), aber im M-Code mit meiner xl2016 nicht in die Tiefe gehen.
@Werner: Ich gehe davon aus, dass Du deine Beitrag verfasst hast, während Kai seine Antwort postete. Persönlich würde ich mir höchsten zumuten "so habe ich den Fragensteller nicht verstanden" zu sagen. Um "so hat der Fragesteller nicht gemeint" zu sagen, fehlen mir die Fähigkeit Gedanken zu lesen. Aber ich arbeite dran ;-)
VG
Yal
AW: Nur entpivotiert
27.01.2023 11:26:56
Luschi
Hallo Yal,
auch in Excel 2019/21 kann man bei 'Functions', 'list in list', zusammengesetzten Kette von PQ-Schritten usw. nicht in die Tiefe gehen, um Zwischenergebnisse sich anzuschauen.
Das ist dann so, wie bei den neuen Let- und Lambda-Möglichkeiten in E_365 - die Funktionsketten werden immer länger und die F9-Taste hilft da überhaupt nicht, um Teilergebnisse zu erhalten.
Fazit: auch PQ-M hat seine Tücken und viel Wissen darum hilft dann auch viel. Nur mal dann an PQ denken, wenn Excelformeln nicht weiterhelfen oder Massendaten einem um die Ohren fliegen, ist es meistens schon zu spät.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: dem ist so ...
27.01.2023 11:45:32
neopa
Hallo Yal,
... als ich den Beitrag von Luschi sah, hatte Kai noch nicht geantwortet. Ich hatte mir dann zunächst den Lösungsvorschlag von Luschi angesehen (ohne in die Tiefe seines M-Codes einzudringen) und meinen Beitrag geschrieben. Dies ohne nachzusehen, ob zwischenzeitlich ein weiterer Beitrag eingestellt war. Danach habe ich mir den thread auch nicht gleich angesehen, so dass ich den Beitrag von Kai erst jetzt gelesen habe.
Zu meiner getroffenen Aussage stehe ich aber jetzt noch. Ich schrieb in meinen vorherigen Beitrag ja abschließend auch: "Aber ich bin nicht der TE".
Gruß Werner
.. , - ...
Anzeige
Die Lösung
27.01.2023 12:26:33
Kai
So, ich habe die Lösung:
Auffüllen der Daten
Neue Benutzer-definierte Spalte und in dieser die Seitenzahlen miteinander verknüpfen ("&")
Auswählen aller Spalten bis auf dieser und Gruppieren mittels "Summieren" der Benutzerdefinierten Spalte
Erstens will ich aber gar kein Summieren, bin nur zu faul, das alles zu schreiben und zweitens erhalte ich dadurch einen Fehler, also: Ich tausche List.Sum durch Text.Combine aus und voilà: Alles in Reihe!
Das einzige, was mir jetzt noch spanisch vorkommt, sind die Leerzeichen dazwischen...aber die kriege ich auch noch weg ;)
Danke für eure Hilfe und Gedankenanstöße!
AW: Die Lösung
28.01.2023 15:31:00
Luschi
Hallo Kai,
von welchen Leerzeichen sprichst Du, sowas gibt es in meiner Lösung nicht - zeige doch mal Deinen PQ-M-Code und leeche nicht nur von unseren gezeigten Beispielen.
Gruß von Luschi
aus klein-Paris

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige