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

Power Query Hilfe

Power Query Hilfe
23.02.2024 15:00:04
Rene
Hallo zusammen!

Ich bin hier überfragt...
Ich lese aus einer Exceldatei über alle Tabellenblätter 16 Zeilen aus 12 Spalten aus. Es sind immer verschiedene Türkonfigurationen pro Blatt, die immer das gleiche Merkmal aber unterschiedliche Ausprägungen haben. Auf dem Bild kann man hoffentlich erkennen, dass ab Zeile 17 die Merkmale erneut auftauchen. Wie bekommen ich denn die Tabellenblätter nebeneinander, damit ich nur einmalig die Merkmale habe und jede Tür von Links nach rechts aufgeführt ist?

let

wk_read = Excel.CurrentWorkbook(){[Name="p_workbook"]}[Content]{0}[Column1],
Source = Excel.Workbook(File.Contents(wk_read), null, true),
#"Gefilterte Zeilen" = Table.SelectRows(Source, each ([Hidden] = false)),
#"Gefilterte Zeilen1" = Table.SelectRows(#"Gefilterte Zeilen", each not Text.StartsWith([Name], "_xlnm.Print_Area")),
#"Gefilterte Zeilen2" = Table.SelectRows(#"Gefilterte Zeilen1", each ([Name] > "Grundlagen")),
#"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen2",{"Item", "Kind", "Hidden"}),
#"Transponierte Tabelle" = Table.Transpose(#"Entfernte Spalten"),
#"Transponierte Tabelle1" = Table.Transpose(#"Transponierte Tabelle"),
#"Erweiterte Column2" = Table.ExpandTableColumn(#"Transponierte Tabelle1", "Column2", {"Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37", "Column38", "Column39"}, {"Column2.Column27", "Column2.Column28", "Column2.Column29", "Column2.Column30", "Column2.Column31", "Column2.Column32", "Column2.Column33", "Column2.Column34", "Column2.Column35", "Column2.Column36", "Column2.Column37", "Column2.Column38", "Column2.Column39"}),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Erweiterte Column2",{"Column1"}),
#"Gefilterte Zeilen3" = Table.SelectRows(#"Entfernte Spalten1", each [Column2.Column27] = "Band_2_tlg" or [Column2.Column27] = "Band_3_tlg" or [Column2.Column27] = "Band_links" or [Column2.Column27] = "Band_rechts" or [Column2.Column27] = "Ecob" or [Column2.Column27] = "eco_aufsatz" or [Column2.Column27] = "Fußluft_Prod" or [Column2.Column27] = "Profillaenge" or [Column2.Column27] = "Pulver" or [Column2.Column27] = "Schlo_links" or [Column2.Column27] = "Schlo_rechts" or [Column2.Column27] = "Steige" or [Column2.Column27] = "Stkz" or [Column2.Column27] = "sy_aufsatz" or [Column2.Column27] = "sy_sp" or [Column2.Column27] = "Tuerlaenge"),
#"Umbenannte Spalten" = Table.RenameColumns(#"Gefilterte Zeilen3",{{"Column2.Column27", "Merkmal"}, {"Column2.Column28", "Tür1"}, {"Column2.Column29", "Tür2"}, {"Column2.Column30", "Tür3"}, {"Column2.Column31", "Tür4"}, {"Column2.Column32", "Tür5"}, {"Column2.Column33", "Tür6"}, {"Column2.Column34", "Tür7"}, {"Column2.Column35", "Tür8"}, {"Column2.Column36", "Tür9"}, {"Column2.Column37", "Tür10"}, {"Column2.Column38", "Tür11"}}),
#"Entfernte Spalten2" = Table.RemoveColumns(#"Umbenannte Spalten",{"Column2.Column39"})
in
#"Entfernte Spalten2"


Userbild

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: (D)eine (Beispiel)datei wäre hilfreich(er) owT
23.02.2024 15:01:45
neopa C
Gruß Werner
.. , - ...
AW: "finale" Zielstellung mir noch nicht verständlich, ...
23.02.2024 16:09:47
neopa C
Hallo Rene,

... reduziere doch mal Deine Beispieldatei in Blatt Jetzt auf 3x16 Datensätze und zeige dafür die von Dir angestrebte "finale" Ergebnis an, welches dann auch nachvollziehbar ist Deine Abfrage ist nicht notwendig, weil die dafür zu Grunde liegenden Datendateien hier sowieso nicht zur Verfügung stehen.

Gruß Werner
.. , - ...
AW: "finale" Zielstellung mir noch nicht verständlich, ...
26.02.2024 06:47:06
Rene
https://www.herber.de/bbs/user/167330.xlsx

Guten Morgen!

Ich habe noch ein paar Hinweise notiert und mein Ziel so dargestellt, wie es sein muss. Den Datensatz verkleinern wäre vielleicht nicht der richtige Ansatz, da der Datensatz schon sehr sehr klein ist - zumindest im Vergleich zu dem, was ich sonst bearbeiten muss.
Anzeige
AW: nachgefragt ...
27.02.2024 13:43:06
neopa C
Hallo Rene,

... zunächst nur zu Deiner "Ziel"-Tabelle. Spricht was dagegen, die Merkmalbezeichnungen anstelle in Spalte A in Zeile 1 zu transformieren und dann die Datenwerten darunter?

Gruß Werner
.. , - ...
AW: nachgefragt ...
28.02.2024 08:20:27
Rene
Der Aufbau während und nach der Datenverarbeitung ist nicht sonderlich relevant. Das kann nebeneinander oder auch untereinander erfolgen.

Wichtig war mit nur, dass man nachvollziehen kann, wie sich der Datensatz zusammensetzt und es letztlich sehr große Datenmengen sein können, die sich über viele Tabellenblätter immer Blockweise (12 Spalten / 16 Zeilen) verteilen.

Anzeige
AW: kennzeichne den thread als offen ...
28.02.2024 09:58:49
neopa C
Hallo Rene,

.... denn ich habe aktuell noch keinen erfolgversprechenden Lösungsansatz mit PQ gefunden.
Eine Formellösung mit XL365 - Funktionen könnte ich mir vorstellen (es sind ja auch "nur" max 1600 Datensätze auszuwerten). Da ich aber selbst diese XL-Version nicht im Einsatz habe, kann ich Dir eine solche nicht aufzeigen. In meiner älteren XL-Version würde die Formelauswertung wohl zu umständlich.

Eine Lösung für Dein Problem gibt es aber sicher auch mit PQ.

Gruß Werner
.. , - ...
AW: kennzeichne den thread als offen ...
28.02.2024 13:58:16
Yal
Hallo zusammen,

Werner/Neopa hat mich auf die Frage aufmerksam gemacht.

Das Vermerken der Eigenschaft zu den "Blätter" wird erreicht, indem einen Index eingeführt wird, darauf eine Formel: wenn Eigenschaft = "Stkz", nimme Index, sonst null. Dann "Nach unten" ausfüllen. So haben Blöcke. Der Zahl selbst ist nicht relevant, muss nur pro Block eindeutig sein.

Die Schwierigkeit leigt einzig daran, dass Anhand der Merkmale die gleichen Türen identifirziert werden, dann die Stückzahl summiert, aber der Rest gleich bleibt.
Eine Gruppeirung erwartet eine Aggregationsformel: Summe, Min, Max, usw. Ein "behälte nur den ersten" gibt es nicht (bzw. habe nicht danach gesucht),
daher muss man die Summe einerseits bilden und der Rest mit einem "Duplikat entfernen" isolieren, dann anschliessend beide wieder zusammenführen.

Anbei eine Lösung, die bis auf die benuzterdefinierte Spalte nur per Klick eingerichtet wurde.
Wie gesagt, wenn die Gruppierung einen "behalte den ersten" annehmen kann, könnte man eine leichtere Lösung haben. Schaue ich vielleicht heute abend danach.

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

VG
Yal
Anzeige
AW: kennzeichne den thread als offen ...
28.02.2024 16:30:11
Yal
Hallo zusammen,

relativ einfach "List.First(..". Diese Einträge können aber nicht geklickt werden, da muss man in erweiterte Editor Copy-Paste-Correct betreiben.

Daher meine finale Lösung ist nur noch eine Abfrage:

let

Quelle = Excel.CurrentWorkbook(){[Name="Türen_Filtern"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Merkmal", type text}, {"Tür1", type any}, {"Tür2", Int64.Type}, {"Tür3", Int64.Type}, {"Tür4", Int64.Type}, {"Tür5", Int64.Type}, {"Tür6", Int64.Type}, {"Tür7", Int64.Type}, {"Tür8", Int64.Type}, {"Tür9", Int64.Type}, {"Tür10", Int64.Type}, {"Tür11", Int64.Type}}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 1, 1, Int64.Type),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index", "Blatt", each if [Merkmal] = "Stkz" then [Index] else null),
#"Nach unten gefüllt" = Table.FillDown(#"Hinzugefügte benutzerdefinierte Spalte",{"Blatt"}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Nach unten gefüllt",{"Index"}),
#"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Entfernte Spalten", {"Blatt", "Merkmal"}, "Attribut", "Wert"),
#"Pivotierte Spalte" = Table.Pivot(#"Entpivotierte andere Spalten", List.Distinct(#"Entpivotierte andere Spalten"[Merkmal]), "Merkmal", "Wert"),
#"Sortierte Zeilen" = Table.Sort(#"Pivotierte Spalte",{{"Attribut", Order.Ascending}, {"Blatt", Order.Ascending}}),
#"Zusammengeführte Spalte eingefügt" = Table.AddColumn(#"Sortierte Zeilen", "Zusammengeführt", each Text.Combine({Text.From([Profillaenge], "de-DE"), Text.From([Tuerlaenge], "de-DE"), Text.From([Schlo_links], "de-DE"), Text.From([Schlo_rechts], "de-DE"), Text.From([Fußluft_Prod], "de-DE"), Text.From([sy_aufsatz], "de-DE"), Text.From([eco_aufsatz], "de-DE"), Text.From([sy_sp], "de-DE"), Text.From([Band_links], "de-DE"), Text.From([Band_rechts], "de-DE"), Text.From([Steige], "de-DE"), Text.From([Band_2_tlg], "de-DE"), Text.From([Band_3_tlg], "de-DE"), Text.From([Ecob], "de-DE"), Text.From([Pulver], "de-DE")}, ";"), type text),
#"Gruppierte Zeilen" = Table.Group(#"Zusammengeführte Spalte eingefügt", {"Zusammengeführt"},
{{"Stkz", each List.Sum([Stkz]), type number},
{"Profillaenge", each List.First([Profillaenge]), type number},
{"Tuerlaenge", each List.First([Tuerlaenge]), type number},
{"Schlo_links", each List.First([Schlo_links]), type number},
{"Schlo_rechts", each List.First([Schlo_rechts]), type number},
{"Fußluft_Prod", each List.First([Fußluft_Prod]), type number},
{"sy_aufsatz", each List.First([sy_aufsatz]), type number},
{"eco_aufsatz", each List.First([eco_aufsatz]), type number},
{"sy_sp", each List.First([sy_sp]), type number},
{"Band_links", each List.First([Band_links]), type number},
{"Band_rechts", each List.First([Band_rechts]), type number},
{"Steige", each List.First([Steige]), type number},
{"Band_2_tlg", each List.First([Band_2_tlg]), type number},
{"Band_3_tlg", each List.First([Band_3_tlg]), type number},
{"Ecob", each List.First([Ecob]), type number},
{"Pulver", each List.First([Pulver]), type number}
}),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Gruppierte Zeilen",{"Zusammengeführt"}),
// Achtung: folgende Zeile nur, falls die Türen mit null Stückzahl raus müssen!
#"Gefilterte Zeilen" = Table.SelectRows(#"Entfernte Spalten1", each ([Stkz] > 0)),
#"Tiefer gestufte Header" = Table.DemoteHeaders(#"Gefilterte Zeilen"),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Tiefer gestufte Header",{{"Column1", type any}, {"Column2", type any}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}, {"Column9", type any}, {"Column10", type any}, {"Column11", type any}, {"Column12", type any}, {"Column13", type any}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}}),
#"Transponierte Tabelle" = Table.Transpose(#"Geänderter Typ1")
in
#"Transponierte Tabelle"


VG
Yal
Anzeige
AW: kennzeichne den thread als offen ...
29.02.2024 12:42:39
Rene
Vielen Dank für eure super Unterstützung bisher. Ich bin derzeit ein wenig am Probieren, sobald ich Luft im Arbeitsalltag habe. Eventuell wird es am Ende eine Kombination aus deiner Abfrag @Yal und einer Formel (Array Formel für "doppelte Werte filtern" und Summe wenn "Merkmalschlüssel gleich")

https://www.herber.de/bbs/user/167420.xlsx
AW: kennzeichne den thread als offen ...
29.02.2024 12:53:01
Yal
Hallo Rene,

bevor Du dich verrennst: eine Kombination PQ-dann-Formel ist eine unnötige Verkomplizierung. Wenn Du die Datenhandlung mit Power Query machst, dann lass PQ das vollständige Endergebnis liefern.

Zu früh aus PQ rauszugehen und dann per Formel vervollständigen, ist absurd. Du sägst auch 80% deines Profils mit der Kreissäge, um dann die letzten 20% mit der Handsäge zu machen.

VG
Yal
Anzeige
AW: danke Yal owT
28.02.2024 20:16:03
neopa C
Gruß Werner
.. , - ...

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige