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

Aus mehreren Spalten 2 machen mit PQ

Aus mehreren Spalten 2 machen mit PQ
11.03.2024 12:01:44
Christian
Hallo,

würdet ihr mit bitte bei folgendem Problem weiterhelfen:
https://www.herber.de/bbs/user/167929.xlsx

Ich habe als Ausgangspunkt die Spalten A bis F (im Original sind es knapp 600 Spalten und 400 Zeilen), habe es jetzt zur Veranschaulichung auf 6 Spalten und 101 Zeilen beschränkt.

Diese habe ich mit der PQ Abfrage in Spalte J in eine einzige Spalte gebracht.

Das was ich aber eigentlich wollte, ist die Spalte M und N, dass im Endeffekt in der ersten Spalte alle Texte stehen, die aus den geraden Spalten stammen untereinander stehen und in der zweiten Spalte alle Texte, die aus den ungeraden Spalten stammen.

Wie mache ich das?

Vielen Dank
Christian
die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 12:03:43
Christian
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 12:31:12
daniel
Hi
ich bin jetzt nicht der PowerQuery-Kenner, daher kann ich dir nicht die exakten Befehle und Formeln nennen, aber vom Prinzip her so:
du greifst nach dem Entpivotisieren ein. Hier hast du als Spalte Attribut immer den Text "Spalte" + Spaltennummer
diese Spalte solltest du teilen (entweder nach der Anzahl der Zeichen oder nach Zeichenwechsel: Ziffer nach Text) und dann die zweite Spalte von Text in Zahl wandeln (Typwechsel), dann solltest du als Attribut2 die Spaltennummer haben.
dann wendest die Funktion IsEven auf diese Spaltennummern an.
dann bekommst du ein WAHR für gerade Spalten und ein FALSCH für ungerade Spalten.
Damit solltest du die Tabelle dann in zwei Teile teilen und nebeneinander anordnen können.

Gruß Daniel
Anzeige
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 12:55:59
Christian
Hallo Daniel,

danke erstmal für deine Antwort. Leider gibt mir die Formel Number.IsEven[Attribut.2] Error aus.
Lediglich IsEven scheint es nicht zu geben.

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

Gruß
Christian
Frage für PQ-Spezialisten
11.03.2024 13:06:49
daniel
wie gesagt, ich bin kein PQ-Spezialist.
da müssten jetzt mal die Fachleute ran.
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 19:08:11
Yal
Hallo Christian,

teilweise wie Daniel es beschrieben hat, aber mit einige Tücken: mit IsEven macht man aus dem Index 1,2,3,4,5,6, .. eine Folge 2,2,4,4,6,6.
Wir filtern die Einträge "Spalte1" und "Spalte2" (so nach der Name dem Entpivotierung) und pivotieren.

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", type text}, {"Spalte3", type text}, {"Spalte4", type text}, {"Spalte5", type text}, {"Spalte6", type text}}),
#"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Geänderter Typ", {}, "Attribut", "Wert"),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Entpivotierte Spalten", "Index", 1, 1, Int64.Type),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.TransformColumns(#"Hinzugefügter Index", {"Index", each _ + (if Number.IsEven(_) then 0 else 1)}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Attribut] = "Spalte1" or [Attribut] = "Spalte2")),
#"Pivotierte Spalte" = Table.Pivot(#"Gefilterte Zeilen", List.Distinct(#"Gefilterte Zeilen"[Attribut]), "Attribut", "Wert"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Pivotierte Spalte",{"Index"})
in
#"Entfernte Spalten"


Über den "Erweiterter Editor" kannst Du im PW-Editor diese M-Code reinpasten.

VG
Yal
Anzeige
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 19:26:43
daniel
sollte "isEven" nicht sowieso schon WAHR oder FALSCH ausgeben ?
du nutzt es doch genauso in der Formel.
Warum wird dass dann nicht in die Wertspalte geschrieben?
PQ ist irgendwie komisch. Und intuitiv lässt sich das auch nicht mehr bedienen wenn man mal tiefer einsteigen will.
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 20:02:56
Yal
Hallo Daniel,

ja, richtig, man kommt nicht drum, Number.IsEven() zu verwenden. Da PQ stark typisiert ist, muss ein Boolean in einem Zahl umgewandelt, bevor es addiert werden kann.
Ich entdecke gerade, dass Number.From auch aus True 1 und False 0 machen kann. Aber dann muss der Index mit einem geraden Zahl anfangen.

Ich gebe zu, ich hätte zwecks Übersichtlichkeit diese Schritte teilen: prüfen, ob gerade als neue Spalte (Table.AddColumn), Summe bilden (Umwandlung in Zahl weiterhin notwendig. Ich habe hier beide Schritte zusammengefügt) und Quellspalten löschen.

Das Filtern habe ich vorangestellt. Dann sind weniger Zeilen zu behandeln.

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Entpivotierte Spalten" = Table.UnpivotOtherColumns(Quelle, {}, "Attribut", "Wert"),
#"Gefilterte Zeilen" = Table.SelectRows(#"Entpivotierte Spalten", each ([Attribut] = "Spalte1" or [Attribut] = "Spalte2")),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Gefilterte Zeilen", "Index", 0, 1, Int64.Type),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index", "Temp", each [Index] + Number.From(Number.IsEven([Index]))),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Index"}),
#"Pivotierte Spalte" = Table.Pivot(#"Entfernte Spalten1", List.Distinct(#"Entfernte Spalten1"[Attribut]), "Attribut", "Wert"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Pivotierte Spalte",{"Temp"})
in
#"Entfernte Spalten"


VG
Yal
Anzeige
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 19:39:00
Christian
Hallo Yal,

erstmal vielen Dank.
Aber irgendwie...

wenn ich eine Abfrage mit diesem Code erstelle, bekomme ich eine Kopie der ersten beiden Spalten, aber was ist mit den restlichen Spalten?

Gruß
Christian

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

Deine Abfrage in Spalte P und Q
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 20:30:47
Yal
Ach so, hatte nicht nach unten gescrollt. 10 Quellzeilen hättenauch gereicht.

Dann komplett andere Strategie: die Spalte je 2 zusammengeführt, dann entpivotiert, und wieder auseinaner gemacht.

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Zusammengeführte Spalten" = Table.CombineColumns(Quelle,{"Spalte1", "Spalte2"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt 1"),
#"Zusammengeführte Spalten1" = Table.CombineColumns(#"Zusammengeführte Spalten",{"Spalte3", "Spalte4"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt 2"),
#"Zusammengeführte Spalten2" = Table.CombineColumns(#"Zusammengeführte Spalten1",{"Spalte5", "Spalte6"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt 3"),
#"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Zusammengeführte Spalten2", {}, "Attribut", "Wert"),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Entpivotierte Spalten", "Index", 0, 1, Int64.Type),
#"Sortierte Zeilen" = Table.Sort(#"Hinzugefügter Index",{{"Attribut", Order.Ascending}, {"Index", Order.Ascending}}),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Sortierte Zeilen", "Wert", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Wert ungerade", "Wert gerade"}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Spalte nach Trennzeichen teilen",{"Attribut", "Index"})
in
#"Entfernte Spalten"


VG
Yal
Anzeige
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 22:11:00
Christian
Hallo Yal,

kein Problem, jeder kann mal etwas übersehen. Nur leider hast du noch etwas übersehen, ich hatte im Eingangspost davon gesprochen, dass es im Original fast 600 Spalten sind. Wenn ich deinen Vorschlag richtig verstehe, braucht es fast 300 Zeilen "zusammengeführte Spalten" im Code.

Sicherlich machbar, aber sehr umständlich.

Ich bin leider total müde, den Code teste ich morgen.

Gruß
Christian
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
11.03.2024 22:39:15
Yal
Hallo Christian,

dann teste lieber diese letzten Code:

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(Quelle, {}, "Attribut", "Wert"),
#"Hinzugefügter Index1" = Table.AddIndexColumn(#"Entpivotierte andere Spalten", "Index", 0, 1, Int64.Type),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index1", "Gerade", each Number.From(Number.IsEven([Index]))),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "IndexGerade", each [Index]+[Gerade]),
#"Andere entfernte Spalten" = Table.SelectColumns(#"Hinzugefügte benutzerdefinierte Spalte1",{"Wert", "Gerade", "IndexGerade"}),
#"Pivotierte Spalte" = Table.Pivot(Table.TransformColumnTypes(#"Andere entfernte Spalten", {{"Gerade", type text}}, "de-DE"), List.Distinct(Table.TransformColumnTypes(#"Andere entfernte Spalten", {{"Gerade", type text}}, "de-DE")[Gerade]), "Gerade", "Wert"),
#"Hinzugefügte benutzerdefinierte Spalte2" = Table.AddColumn(#"Pivotierte Spalte", "Benutzerdefiniert", each Number.Mod([IndexGerade], List.Count(Table.ColumnNames(Quelle)))),
#"Sortierte Zeilen" = Table.Sort(#"Hinzugefügte benutzerdefinierte Spalte2",{{"Benutzerdefiniert", Order.Ascending}, {"IndexGerade", Order.Ascending}}),
#"Andere entfernte Spalten1" = Table.SelectColumns(#"Sortierte Zeilen",{"1", "0"})
in
#"Andere entfernte Spalten1"

Vorsicht: funktioniert nur bei einem geraden Anzahl von Spalten gut. Dafür egal wieviel.

VG
Yal
Anzeige
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
12.03.2024 20:56:48
Christian
Hallo Yal,

das sieht soweit gut aus, vielen Dank

Christian

PS: Sorry ich war den ganzen Tag unterwegs
AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
18.03.2024 05:29:13
Luschi
Hallo Yal,

interessante Idee über Indizes die 2-spaltige Anaordnung zu erreichen. Hier mal meine Variante dazu, die aber ohne PQ-Oberflächenbedienung auskommen muß.

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

Gruß von Luschi
aus klein-Paris


AW: die Reihenfolge der Spalten muss auch beibehalten werden owT
18.03.2024 13:42:19
Christian
Hallo Luschi,

sieht soweit doch super aus. Aber warum keine PQ Nutzung, du nutzt doch genauso eine PQ Abfrage.

Gruß
Christian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige