Power Query - Filtern nach Spaltentitel
#1
Hallo Zusammen,

ich kämpfe jetzt seit Tagen mit Powerquery. 

Ich würde gerne einen Datenimport nach einem bestimmten Namen im Spaltentitel z.B. "Abc" aussortieren und mir dann nur diese Spalten + ein paar Standardspalten anzeigen lassen.

Ich hab jetzt aus meiner Tabelle eine Liste mit = List.Select(AlleSpaltennamen, each Text.Contains(_,"abc")) gemacht, das funktioniert auch soweit.

Allerdings komm ich jetzt nicht mehr weiter. Wie krieg ich jetzt aus der Liste wieder meine Tabelle mit meinen Werten? 

Zudem müsste ich dann noch 2 von den gefundenen Spalten aufsummieren bzw. ich brauche nur die Zeilen, in denen in einer der beiden Spalten eine Zahl drin steht.

Ist die Liste der richtige Weg oder bin ich auf dem Holzweg? 

Danke!

Viele Grüße
Antworten Top
#2
Moin,

mit Table.SelectColumns() kannst du die beizubehalten den Spalten als List angeben. Du musst also nur das List.Select da einbauen und gegebenenfalls mit List.Combine() eine weitere Liste mit den fixen Spalten ergänzen.

Deine zweite Frage habe ich nicht verstanden. Vielleicht stellst du mal eine Beispieldatei zur Verfügung.

Viele Grüße
derHöpp
Antworten Top
#3
Hi,

wenn Du Spalten auswählen willst, gibt es 2 Möglichkeiten. Entweder, Du gibst die (als Liste) an, die Du behalten willst, oder die (als Liste), die Du entfernen willst.
Dementsprechend musst Du die Spalten selektieren oder removen. Nimm die Liste, mit den wenigsten Elementen. Die Namen, der betreffenden Spalten kennst Du ja...

Bsp.: 
let
    Quelle = Excel.CurrentWorkbook(){[Name="tblErfasst"]}[Content],
   
    //Liste aller Spaltennamen der Tabelle /(wird hier nicht gebraucht, dient nur als Beispiel)
    Spaltennamen = Table.ColumnNames(Quelle),                             

    //Liste der gewünschten Spalten 
    DieseSpaltenBehalten = {"Rubrik", "Händler", "Gruppe", "Bezeichnung"},
    //Liste der zu entfernenden Spalten 
    DieseSpaltenEntfernen = {"Händler", "Gruppe"} ,                         

    BehalteSpalten = Table.SelectColumns(Quelle,DieseSpaltenBehalten),          //behalten: über Listennamen
    EntferneSpalten = Table.RemoveColumns(Quelle,{"Händler", "Gruppe"})     //entfernen: statt Listenname geht es auch als neue Liste
in
    EntferneSpalten
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

[-] Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:
  • Grantlhaua
Antworten Top
#4
(20.03.2024, 15:16)derHoepp schrieb: Moin,

mit Table.SelectColumns() kannst du die beizubehalten den Spalten als List angeben. Du musst also nur das List.Select da einbauen und gegebenenfalls mit List.Combine() eine weitere Liste mit den fixen Spalten ergänzen.

Deine zweite Frage habe ich nicht verstanden. Vielleicht stellst du mal eine Beispieldatei zur Verfügung.

Viele Grüße
derHöpp


super danke an euch beide, ich denk ich habs jetz auch hinbekommen. 

die 2. Frage war:

Ich hab 2 Spalten nach denen ich filtern muss. Ich brauche jede Zeile in denen entweder in einer der beiden oder in beiden ein Wert steht. Würde ja gehen in dem ich eine Hilfsspalte einbaue, die die Summe aus beiden bildet und dann nach größer 0 filtert. 

dann muss ich aber die 2 Spalten fix angeben. Ich möchte aber, dass ich das z.b. über eine Variable die Spalten erst durch Eingabe festlege.
Antworten Top
#5
...letzten Endes willst Du ja auch wieder nur Zeilen filtern. Und wenn ich es richtig verstanden habe, dann willst Du alle die sehen, wo in mindestens einer von 2 Spalten ein Wert steht. Also, die, wo in beiden nix steht, die sollen raus. Das ginge z. Bsp. so:

= Table.SelectRows(Quelle, each not ([Menge] = null and [Anzahl] = null))
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

[-] Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:
  • derHoepp
Antworten Top
#6
(20.03.2024, 19:31)Ralf A schrieb: ...letzten Endes willst Du ja auch wieder nur Zeilen filtern. Und wenn ich es richtig verstanden habe, dann willst Du alle die sehen, wo in mindestens einer von 2 Spalten ein Wert steht. Also, die, wo in beiden nix steht, die sollen raus. Das ginge z. Bsp. so:

= Table.SelectRows(Quelle, each not ([Menge] = null and [Anzahl] = null))

Ah super danke!

Kann ich das auch dynamisch machen? 

Z.B. möchte ich, je nach Eingabe, einmal die Spalten abcd-Bedarf und abce-Bedarf auswerten. bei anderer Eingabe dann xyzd-Bedarf und xyze-Bedarf. Die ersten 3 Buchstaben der Spalte sind entsprechend bei den Spalten immer gleich, d.h. ich müsste diese 3 Buchstaben in der Formel tauschen. Das geht aber in der formel oben nicht oder weil ich da ja die Quelle durch anklicken auswähle?
Antworten Top
#7
...klar kannst Du. Indem Du Record.Field verwendest. Im Beispiel werden die 6. und 7. Spalte verwendet (Achtung, Listen sind null basiert!), ohne deren Namen zu kennen.

Spaltennamen = Table.ColumnNames(Quelle),       //Liste aller Spaltennamen der Tabelle 
Spalte5 = Spaltennamen{5},                               //nur zur Kontrolle....
Filtern = Table.SelectRows(Quelle,each not( Record.Field(_,Spaltennamen{5}) = null and Record.Field(_,Spaltennamen{6}) = null)),
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste