Power Query - mehrere Zellen mit Text zu einer aggregieren
#1
Hallo zusammen!

Ich habe eine Exceltabelle in der ich spezielle Interviewabfragen notiert habe - welche Person Erfüllt welche Eigenschaften in welchen Kategorien?

Zur Auswertung habe ich eine Power Query-Abfrage erstellt, die die Daten so organisiert wie ich möchte, nur dass sie daran scheitert dass Excel den Text nicht zu Listen aggregieren kann. Kann mir hier jemand helfen?

Beste Grüße,
avr


Angehängte Dateien
.xlsx   PQ - Excel-Matrix-Beispiel avr.xlsx (Größe: 28,55 KB / Downloads: 11)
Top
#2
Hallo,

warum nicht VBA'?

Da eine Person in einer Kategorie mehere Eigenschaften haben kann, ist die "Wunschlösung" nicht ganz klar.

mfg
Top
#3
Hi Fennek,

Mit VBA, habe ich leider überhaupt keine Erfahrung, darum versuche ich noch drumrum zu kommen.

Dass eine Person in einer Kategorie mehrere Eigenschaften haben kann, ist genau die Schwierigkeit, vor der ich stehe. Wäre es nur eine, würde meine Power-Query-Abfrage funktionieren, jetzt ist die Frage, wie ich Power Query dazu bringe, die in Frage kommenden Eigenschaften in eine Zelle zu aggregieren, ggf einfach mit Kommata getrennt.

beste Grüße,
avr
Top
#4
Hi

Versuch mal ob das Klappt.

Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Daten"]}[Content],
    #"Entpivotierte Spalten" = Table.UnpivotOtherColumns(Source, {"Eintrag", "Sub-Eintrag"}, "Attribut", "Wert"),
    #"Gefilterte Zeilen" = Table.SelectRows(#"Entpivotierte Spalten", each ([Wert] = 1)),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen",{"Wert"}),
    Benutzerdefiniert1 = Table.Group(#"Entfernte Spalten", {"Eintrag", "Sub-Eintrag"}, {{"Alle", each Text.Combine(_[Attribut], "; "), type text}}),
    #"Pivotierte Spalte" = Table.Pivot(Benutzerdefiniert1, List.Distinct(Benutzerdefiniert1[#"Sub-Eintrag"]), "Sub-Eintrag", "Alle")
in
    #"Pivotierte Spalte"

Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • avr
Top
#5
Hallo,

teste mal:

Code:
Sub F_en()
Sheets("Datensatz").Activate
r = 1
With Sheets("Test")
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        .Cells(r, 1) = Cells(i, 1)
        Sp = WorksheetFunction.Match(Cells(i, 2), Array("Kategorie A", "Kategorie B", "Kategorie C"), 0) + 1
        
        For j = 3 To Cells(1, Columns.Count).End(xlToLeft).Column
            
            If Cells(i, j) = 1 Then .Cells(r, Sp) = .Cells(r, Sp) & Cells(1, j) & ", "
            
        Next j
        
        If Cells(i, 1) <> Cells(i + 1, 1) Then r = r + 1
    Next i
End With
End Sub

mfg


Angehängte Dateien
.xlsm   PQ - Excel-Matrix-Beispiel avr.xlsm (Größe: 36,47 KB / Downloads: 2)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • avr
Top
#6
Moin

Alternative mit Pivot.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • avr
Top
#7
(30.07.2019, 10:50)Elex schrieb: Hi

Versuch mal ob das Klappt.

Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Daten"]}[Content],
    #"Entpivotierte Spalten" = Table.UnpivotOtherColumns(Source, {"Eintrag", "Sub-Eintrag"}, "Attribut", "Wert"),
    #"Gefilterte Zeilen" = Table.SelectRows(#"Entpivotierte Spalten", each ([Wert] = 1)),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen",{"Wert"}),
    Benutzerdefiniert1 = Table.Group(#"Entfernte Spalten", {"Eintrag", "Sub-Eintrag"}, {{"Alle", each Text.Combine(_[Attribut], "; "), type text}}),
    #"Pivotierte Spalte" = Table.Pivot(Benutzerdefiniert1, List.Distinct(Benutzerdefiniert1[#"Sub-Eintrag"]), "Sub-Eintrag", "Alle")
in
    #"Pivotierte Spalte"

Gruß Elex


Hi Elex,
das funktioniert bestens, vielen Dank! Ich konnte es auch schon für einige ähnliche Abfragen adaptieren, für etwas weitere entferntere fiel es mir schwer. Gibt es irgendwo ein Tutorial für die Funktion die du in der 'Benutzerdefiniert-Spalte benutzt?

(30.07.2019, 11:10)Fennek schrieb: Hallo,

teste mal:

Code:
Sub F_en()
Sheets("Datensatz").Activate
r = 1
With Sheets("Test")
   For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
       .Cells(r, 1) = Cells(i, 1)
       Sp = WorksheetFunction.Match(Cells(i, 2), Array("Kategorie A", "Kategorie B", "Kategorie C"), 0) + 1
       
       For j = 3 To Cells(1, Columns.Count).End(xlToLeft).Column
           
           If Cells(i, j) = 1 Then .Cells(r, Sp) = .Cells(r, Sp) & Cells(1, j) & ", "
           
       Next j
       
       If Cells(i, 1) <> Cells(i + 1, 1) Then r = r + 1
   Next i
End With
End Sub

mfg

Hi Fennek,
hier war mir nicht klar wo ich das verwenden soll - ist das VBA?


(30.07.2019, 21:57)shift-del schrieb: Moin

Alternative mit Pivot.


Hi shift-del,
Danach habe ich cshon gesucht bevor ich mich hier im Forum angemeldet habe, danke für die Hilfe! das hilft besonders für die einfacheren Fälle, da ich mich mit ähnlichen Fragen immer wieder beschäftige.

Beste Grüße an alle,
avr
Top
#8
Hi

Zitat:Gibt es irgendwo ein Tutorial


schau mal in den Beitrag von @shift-del.
https://www.clever-excel-forum.de/Thread...ower-Query

Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • avr
Top


Gehe zu:


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