Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Power Query - Neue Spalte erstellen

Forumthread: Power Query - Neue Spalte erstellen

Power Query - Neue Spalte erstellen
08.11.2023 16:01:40
Mikel
Hallo zusammen,

das Forum hier hat mir schon so oft weitergeholfen, ob im Post oder nur zum nachlesen, vielen Dank dafür :-)

Bin jetzt aktuell mit Power Query am experimentieren (tolles Tool) und habe jetzt folgendes Problem:
Ich habe eine Spalte mit einem Artikel, darunter steht die Farbe:

Artikel 1
Farbe 1
null
null
null
Artikel 2
Farbe 2
null
null
null
Artikel 3
Farbe 3
null
null
null


Jetzt würde ich gerne eine neue Spalte generieren, in der die Farbe quasi 1 Zeile höher gesetzt wird... Also neue Spalte mit der Farbe auf gleicher Höhe...


Artikel 1 Farbe 1
null
null
null
null
Artikel 2 Farbe 2
null
null
null
null
Artikel 3 Farbe 3
null
null
null
null

Vielleicht hat ja jemand ne Idee...
Vielen Dank schon mal im voraus und viele Grüße
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: z.B. interaktiv & if ... then ... else ...
08.11.2023 16:21:32
neopa C
Hallo Mikel,

... vorgemerkt: ich bin kein PQ-Profi, deshalb nachfolgend nur eine weitestgehend interaktive Lösung, worin ich Deine angegebenen "null" Werte als Textwerte belassen habe.

(M)ein interaktiv erstellter M-Code lautet dafür:

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 0, 1, Int64.Type),
#"Hinzugefügter Index1" = Table.AddIndexColumn(#"Hinzugefügter Index", "Index.1", 1, 1, Int64.Type),
#"Zusammengeführte Abfragen" = Table.NestedJoin(#"Hinzugefügter Index1", {"Index.1"}, #"Hinzugefügter Index1", {"Index"}, "Hinzugefügter Index1", JoinKind.LeftOuter),
#"Erweiterte Hinzugefügter Index1" = Table.ExpandTableColumn(#"Zusammengeführte Abfragen", "Hinzugefügter Index1", {"Spalte1"}, {"Hinzugefügter Index1.Spalte1"}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Erweiterte Hinzugefügter Index1", "neu", each if ([Spalte1]>"null" and [Hinzugefügter Index1.Spalte1] > "null") then [Spalte1]&" "&[Hinzugefügter Index1.Spalte1] else "null"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Spalte1", "Index", "Index.1", "Hinzugefügter Index1.Spalte1"})
in
#"Entfernte Spalten"


Gruß Werner
.. , - ...
Anzeige
AW: Power Query - Neue Spalte erstellen
09.11.2023 15:21:05
Mikel
Hallo zusammen,

super, ich danke Euch! Es hat wunderbar funktioniert :-)

Eine weitere Frage habe ich noch, wenn ich die Funktion "Werte ersetzen" nutze, dann kann ich immer nur einen Wert ersetzten, oder ?
Als Beispiel : Aus "18" mach "15"

- Table.ReplaceValue(#"Geänderter Typ1","18","15",Replacer.ReplaceText,{"Column1"})


Wenn ich aber jetzt auch noch aus einer "20" eine "10" machen will, dann muss ich das wieder als einzelnen Aufruf machen, oder
gibt es eine Möglichkeit, das Ganze in einer "Zeile" abzuarbeiten ?

Viele Grüße und nochmals danke,
Mikel
Anzeige
AW: was spricht gegen einen zusätzlichen Schritt? ...
09.11.2023 16:10:29
neopa C
Hallo Mikel,

... vielleicht findest Du ja hier https://learn.microsoft.com/de-de/powerquery-m/power-query-m-function-reference dazu was Du suchst.
Ich bin und werde kein PQ-Profi, mir würde der zusätzliche Schritt, welcher ja sehr schnell definiert ist, völlig reichen.

Vielleicht aber kann Dir Luschi mehr Informationen dazu schreiben.

Gruß Werner
.. , - ...
Anzeige
AW: Power Query - Neue Spalte erstellen
09.11.2023 18:20:09
Luschi
Hallo Mikel,

was soll man mit dieser Nachfrage anfangen, die nix mit dem Anfangssituation zu tun hat. Stell bitte 1 Beispieldatei bereit, und es wird Dir gezeigt, wie man das per PQ-M-Code und 1er Excel Austauschtabelle macht.

Gruß von Luschi
aus klein-Paris
AW: z.B. interaktiv & if ... then ... else ...
08.11.2023 20:43:44
Luschi
Hallo Mikel,

hier mal Werner's und meine PQ-Lösung in 1er Beispieldatei: https://www.herber.de/bbs/user/164132.xlsx

Gruß von Luschi
aus klein-Paris

Anzeige
AW: dazu nachgefragt ...
09.11.2023 16:16:16
neopa C
Hallo Luschi,

... Deine Lösung setzt voraus, daß die Artikel auch wirklich mit "Artikel" beginnend beschriftet sind. Dies erscheint mir als wenig wahrscheinlich. Oder?
Die Abfrage2 in Deiner eingestellten Datei dient wozu?

Gruß Werner
.. , - ...
AW: dazu nachgefragt ...
09.11.2023 17:54:46
Luschi
Hallo Werner,

natürlich natürlich kann man 'Artikel' & 'Farbe' dynamisieren:
- per Parameter-Abfrage
- per M-Code, um die Werte der 1. beiden Inhalte der 1. Spalte selbst zu ermitteln
- aber wer will das schon haben?

Gruß von Luschi
aus klein-Paris

PS: Das Ersetzen mehrere Werte durch Austauschwerte geht natürlich per 'M' auch und ich werde dazu noch 1 Post absetzen.

Anzeige
AW: dazu ...
09.11.2023 18:12:34
neopa C
Hallo Luschi,

... ich wollte nur darauf hinweisen, daß Deine eingestellte PQ-Lösung zu "statisch" ist. Wenn z.B. in den Quelldaten anstelle "Artikel #" z.B. nur " Artikel #" steht, wird die dazugehörige Farbe nicht "geholt" und erfahrungsgemäß wird wahrscheinlich noch nicht mal "Artikel" vor eine ´r Art. Nr. voran geschrieben sein.

Gruß Werner
.. , - ...


Anzeige
AW: dazu ...
10.11.2023 08:47:27
Luschi
Hallo Werner,

die Forderung, PQ-Abfragen soweit wie möglich zu dynamisieren, werden wohl nicht nur jeden PQ-Einsteiger überfordern. Aus Spaß an der Freude habe ich 3 dynamische Abfragen erstellt:
- PQ-Luschi_dynamisch_1 & PQ-Luschi_dynamisch_2 setzen voraus, das bei 'Artikel' und 'Farbe' 1 Leerzeichen existiert
  also 'Artikel 1'... und 'Farbe 1'...
- bei PQ-Luschi_dynamisch_3 wird die 1. Position einer beliebigen Ziffer ermittelt

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

Gruß von Luschi
aus klein-Paris

PS: Hier noch die Lösung zum Problem 'Austauschen mehrerer Werte in 1 Spalte': https://www.herber.de/bbs/user/164170.xlsx
Anzeige
AW: will Dir ja nicht den Spaß an der Freude verderben ...
10.11.2023 09:27:08
neopa C
Hallo Luschi,

... aber "dynamisch" (nach meiner Interpretation) ist keine Deiner drei Lösungsangebote. Ersetze doch einfach mal im Quelltext ein (oder auch mehr) "Artikel"-Text durch ein beliebig anderen Text und schon ist der Lack äääh die Farbe ab ;-) Meine "Hausmanns"-PQ-Lösung dagegen macht das, was ich mir unter "dynamisch" vorstelle.

Gruß Werner
.. , - ...
Anzeige
AW: will Dir ja nicht den Spaß an der Freude verderben ...
10.11.2023 13:35:54
Luschi
Hallo Werner,

sorry, aber ich hatte nur eine Vorstufe und nicht die Endversion hochgeladen.

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

Gruß von Luschi
aus klein-Paris
AW: scheint heute nicht Dein Tag zu sein oder? ...
10.11.2023 16:24:32
neopa C
Hallo Luschi,

... was Du nun eingestellt hast, hat immer noch den gleichen Mangel wie in Deinen vorherigen Versionen.

Ändere mal z.B. A26 ab in z.B.: "hmm" und vergleiche mal nach der Aktualisierung Dein Ergebnis mit dem meiner PQ-Abfrage.

Gruß Werner
.. , - ...
Anzeige
AW: scheint heute nicht Dein Tag zu sein oder? ...
15.11.2023 06:17:53
Luschi
Hallo Werner,

so habe ich die Aufgabenstellung nie angesehen, wenn es denn so sein sollte/ist, dann hier meine Lösung (wie immer mehr M als PQ-Standardmöglichkeiten):
// PQ-Luschi_dynamisch_3 (2)

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 1, 1, Int64.Type),

#"neue Spalte.1" = Table.AddColumn(#"Hinzugefügter Index", "neuer Inhalt",
each
let xx1 = Table.RowCount(#"Hinzugefügter Index"),
xx2 = #"Hinzugefügter Index"[Spalte1]{[Index]},
xx3 = if [Index] = xx1
then "null"
else if xx2 = "null" or [Spalte1] = "null"
then "null"
else [Spalte1] & " - " & xx2
in
xx3),
#"Andere entfernte Spalten" = Table.SelectColumns(#"neue Spalte.1",{"neuer Inhalt"})
in
#"Andere entfernte Spalten"
Gruß von Luschi
aus klein-Paris

Anzeige
AW: jetzt haben wir ein gleiches Ergebnislisting :-) ...
15.11.2023 08:52:27
neopa C
Hallo Luschi,

... nun ist nur noch offen, ob Mikel das auch wirklich genau so haben wollte oder anders.

Gruß Werner
.. , - ...
AW: nun noch zum Datenaustausch ...
10.11.2023 09:50:09
neopa C
Hallo Luschi,

... also wenn nur zwei/drei Zahlen zu ersetzen sind, würde ich nachwie vor einfach ein/zwei Zusatzschritte definieren.

Deine Lösung wird natürlich einem Programmierer eher gerecht als meine folgende Lösung nach Hausmanns-PQ-Lösung:

let

Source = Excel.CurrentWorkbook(){[Name="tab_Daten"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Source,{{"Artikel", type text}, {"Anzahl", Int64.Type}}),
#"Zusammengeführte Abfragen" = Table.NestedJoin(#"Geänderter Typ", {"Anzahl"}, tab_Austausch, {"alter Wert"}, "tab_Austausch", JoinKind.LeftOuter),
#"Erweiterte tab_Austausch" = Table.ExpandTableColumn(#"Zusammengeführte Abfragen", "tab_Austausch", {"neuer Wert"}, {"tab_Austausch.neuer Wert"}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Erweiterte tab_Austausch", "neue Anzahl", each if [tab_Austausch.neuer Wert]=null then [Anzahl] else [tab_Austausch.neuer Wert]),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "alte Anzahl", each if [tab_Austausch.neuer Wert]=null then null else [Anzahl]),
#"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte1",{"Anzahl", "tab_Austausch.neuer Wert"}),
#"Sortierte Zeilen" = Table.Sort(#"Entfernte Spalten",{{"Artikel", Order.Ascending}})
in
#"Sortierte Zeilen"


Bin jetzt gleich erst einmal bis wahrscheinlich heute Abend nicht mehr online.

Gruß Werner
.. , - ...
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Power Query: Neue Spalte erstellen und Werte ersetzen


Schritt-für-Schritt-Anleitung

Um eine neue Spalte in Power Query hinzuzufügen, die die Werte einer bestehenden Spalte um eine Zeile nach oben verschiebt, folge diesen Schritten:

  1. Abfrage in Excel erstellen: Öffne Excel und lade die Daten in Power Query. Du kannst dies tun, indem du die Daten auswählst und auf "Daten" > "Abfragen und Verbindungen" > "Abfrage erstellen" klickst.

  2. Indexspalte hinzufügen: Füge eine Indexspalte hinzu, indem du im Power Query Editor auf "Start" > "Indexspalte hinzufügen" klickst. Wähle "Von 0" oder "Von 1", je nach Bedarf.

  3. Zusammenführen: Verwende die Funktion Table.NestedJoin, um die Tabelle mit sich selbst zu verbinden, basierend auf der Indexspalte. Dies hilft, die Werte nach oben zu verschieben.

  4. Benutzerdefinierte Spalte hinzufügen: Gehe zu "Spalte hinzufügen" und wähle "Benutzerdefinierte Spalte". Verwende einen M-Code, um die Farbe aus der verschobenen Zeile zu holen.

    Beispielcode:

    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Vorherige Schritt", "Farbe Höher", each if [Farbe] <> null then [Farbe] else null)
  5. Null-Werte ersetzen: Wenn du null-Werte durch 0 ersetzen möchtest, kannst du dies in einer weiteren benutzerdefinierten Spalte tun.

    Beispiel:

    #"Null durch 0 ersetzen" = Table.ReplaceValue(#"Vorherige Schritt", null, 0, Replacer.ReplaceValue, {"Deine Spalte"})

Häufige Fehler und Lösungen

  • Problem: Die neue Spalte zeigt nur null-Werte an.

    • Lösung: Überprüfe den M-Code und stelle sicher, dass die Bedingungen für die Benutzerdefinierte Spalte korrekt sind.
  • Problem: Die Werte werden nicht wie gewünscht verschoben.

    • Lösung: Stelle sicher, dass die Indexspalte korrekt erstellt wurde und dass die Tabelle richtig verbunden ist.

Alternative Methoden

Wenn du die Farbe aus einer anderen Tabelle hinzufügen möchtest, kannst du die Funktion Table.Join verwenden, um die beiden Tabellen zu kombinieren. Dadurch kannst du auch bei power query spalte aus anderer tabelle hinzufügen profitieren.

Beispiel:

#"Zusammengeführte Abfragen" = Table.Join(Tabelle1, "Schlüssel", Tabelle2, "Schlüssel", JoinKind.LeftOuter)

Praktische Beispiele

Hier sind einige praktische Anwendungsfälle:

  1. Power Query leere Spalte hinzufügen: Wenn du eine leere Spalte erstellen möchtest, um später Werte zu ergänzen, kannst du dies mit Table.AddColumn tun:

    #"Leere Spalte hinzugefügt" = Table.AddColumn(Tabelle, "Neue Spalte", each null)
  2. Power BI benutzerdefinierte Spalte if: In Power BI kannst du ähnliche M-Code-Strukturen verwenden, um benutzerdefinierte Spalten mit Bedingungen zu erstellen:

    #"Benutzerdefinierte Spalte" = Table.AddColumn(Tabelle, "Neue Bedingung", each if [Wert] > 10 then "Hoch" else "Niedrig")

Tipps für Profis

  • Dynamische Filter: Nutze power query dynamischer filter, um Daten dynamisch basierend auf bestimmten Kriterien zu filtern.

  • Werte ersetzen: Wenn du mehrere Werte gleichzeitig ersetzen möchtest, kannst du Table.ReplaceValue in einer Schleife verwenden, um die Effizienz zu steigern:

    List.Accumulate({{"18", "15"}, {"20", "10"}}, Tabelle, (state, current) => Table.ReplaceValue(state, current{0}, current{1}, Replacer.ReplaceText, {"Deine Spalte"}))

FAQ: Häufige Fragen

1. Wie kann ich mehrere Werte in einer Spalte ersetzen?
Du kannst die Table.ReplaceValue Funktion mehrmals aufrufen oder eine Schleife verwenden, um mehrere Ersetzungen in einem Schritt durchzuführen.

2. Kann ich in Power Query eine neue Zeile hinzufügen?
Ja, du kannst mit Table.InsertRows eine neue Zeile hinzufügen, um zusätzliche Daten in deine Abfrage einzufügen.

3. Wie kann ich einen dynamischen Filter in Power Query erstellen?
Nutze Parameter in Power Query, um dynamische Filter zu erstellen, die sich je nach Eingabewerten ändern.

4. Wie kann ich die Abfrage in Excel speichern?
Nachdem du die Abfrage in Power Query abgeschlossen hast, klicke auf "Schließen & Laden", um die Abfrage in dein Excel-Dokument zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige