Petit challenge PowerQuery

Bonjour

J'ai trouvé un challenge intéressant sur un site : je le soumets aux aficionados de PowerQuery.

Le but est évidemment d'avoir le moins d'étapes possibles...

29challengepq.xlsx (11.72 Ko)

Bonjour,
Je me lance !
8 lignes, 4 étapes.
Cdlt.

10challengepq.xlsx (21.30 Ko)
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    SplitColumn = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Hobby", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Hobby"),
    AddedIndex = Table.AddIndexColumn(SplitColumn, "Index", 0, 1, Int64.Type),
    PivotedColumn = Table.Pivot(AddedIndex, List.Distinct(AddedIndex[Hobby]), "Hobby", "Index", List.Count),
    ChangedTypes =Table.TransformColumnTypes(PivotedColumn,List.Transform(List.RemoveFirstN(Table.ColumnNames(PivotedColumn),1),each {_,type logical}))
in
    ChangedTypes

Bonjour Jean-Eric

Cool !

Attendons les autres...

Bonjour à tous !

Initiative géniale 78chris ! Je me demandais à quel moment l'idée d'un Challenge Power Query allait arriver..... J'ai la réponse.

J'avais déjà travaillé ce challenge ....et ma proposition initiale était similaire à celle présentée par Jean-Eric.

L'auteur du challenge fait une suggestion brillante. Power Query est vaste......

Re,
Apparemment, nous suivons les mêmes sites liés à Power Bi et Power Query !
Bonne journée.

Bonjour à tous,

Sympa ce challenge, ça change de VBA !

Et finalement, peut-on mieux faire ?

Quels sites suivez-vous ?

RE

Et finalement, peut-on mieux faire ?

Quels sites suivez-vous ?

Attendons d'autres propositions...

J'ai découvert ce site il y a peu : c'est une vrai mine d'or.

J'ai utilisé 2 vidéos pour ce post où j'ai amélioré ma 1ère solution d'une vidéo à l'autre https://forum.excel-pratique.com/excel/actualiser-requete-par-onglet-et-message-pendant-mise-a-jour-...

RE,

Oui, quel site ?

Pour le challenge, je ne vois pas comment mieux faire

RE

J'avais fait en 3 étapes après Source et ai finalement gagné une étape

Bon pas foule ici alors je la donne

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Split = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Hobby", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Hobby"),
    Pivot = Table.Pivot(Split, List.Distinct(Split[Hobby]), "Hobby", "Hobby", each List.Count(_) > 0)
in
    Pivot

Bonsoir à tous !

@78chris : Superbe !

Bonsoir à tous de nouveau !

Une proposition d'Oz du Soleil : https://www.youtube.com/watch?v=TM9bNNa_tqk

Moins concise mais traitant le cas particulier de la personne sans hobby

Re,
Un autre lien :

Access Analytic

Cdlt.

Bonsoir @ tous !

Vous me connaissez, non ? Toujours j'ai dit qu'il fallait que je m'y mette et en fin de compte je ne m'y met pas ! C'est pas comme si PQ existe depuis 10 ans et qu'il est totalement intégré depuis Excel 2016 !

Et au vu des questions/réponses sur PQ, presque il faudrait qu'il y ait un forum dédié comme un peu GoogleSheet !
Mais bon du coup où poser sa question ?

Aller je vous laisse vous amusez entre "PQ adepte", continuez de répandre "la poudre" afin de touche un maximum de monde !
Au vu des différentes réponses des "demandeurs", nul doute que la quantité d'afficionados de PQ n'arrête pas de croitre grâce à vous !

@ bientôt

LouReeD

Bonsoir à tous,

Cool ce petit exercice. Pas réussi à descendre en dessous de 8 étapes.

Bonne soirée,
Cordialement.

2challengepq.xlsx (22.05 Ko)

Bonsoir,

sinon une autre proposition en VBA :

Sub Test_LRD()
    tablo = Range("Source")
    For j = 2 To UBound(tablo)
        For i = 2 To UBound(tablo, 2)
            If tablo(j, i) = True Then
                tablo(j, i) = tablo(1, i)
                If i <> 2 Then tablo(j, 2) = tablo(j, 2) & ", " & tablo(1, i)
            Else
                tablo(j, i) = ""
            End If
        Next i
        If Left(tablo(j, 2), 1) = "," Then tablo(j, 2) = Mid(tablo(j, 2), 3, 99)
        If tablo(j, 2) = "" Then tablo(j, 2) = "Pas de hobby !"
    Next j
    tablo(1, 2) = "Hobby"
    Range("E15").Resize(UBound(tablo), 2) = tablo
End Sub

Petit clin d'oeil aux proposition PQ sur les réponses faites en VBA !
Je suis d'humeur joyeuse ce soir !

@ bientôt

LouReeD

Bonsoir,
@LouReed,
Avec Microsoft 365, tu peux envisager d'utiliser les nouvelles fonctions !
Cdlt.

9challengepq.xlsx (26.94 Ko)

Je crois que c'est comme PQ et GoogleSheet, j'ai du mal à appréhender les nouveautés !

Je regarde cela plus tard, merci !

@ bientôt

LouReeD

RE

Moins concise mais traitant le cas particulier de la personne sans hobby

Une solution pour l'absence de hobby (null)

let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    Split = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Hobby", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Hobby"),
    #"null remplacé" = Table.ReplaceValue(Split,null,"",Replacer.ReplaceValue,{"Hobby"}),
    Pivot = Table.Pivot(#"null remplacé", List.Distinct(#"null remplacé"[Hobby]), "Hobby", "Hobby", each List.Count(_) > 0),
    #"Colonnes supprimées" = Table.RemoveColumns(Pivot,{""})
in
    #"Colonnes supprimées"

RE

Cool ce petit exercice. Pas réussi à descendre en dessous de 8 étapes.

7 car on ne compte pas source

Ce qui est gênant c'est la dernière étape qui nomme les colonnes à modifier : si le tableau source comporte de nouveaux Hobbies, ça coincera

Tu es le seul à avoir respecter l'ordre initial des noms

Si je le respecte j'ajoute aussi des étapes...

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Index ajouté" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    Split = Table.ExpandListColumn(Table.TransformColumns(#"Index ajouté", {{"Hobby", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Hobby"),
    Pivot = Table.Pivot(Split, List.Distinct(Split[Hobby]), "Hobby", "Hobby", each List.Count(_) > 0),
    #"Lignes triées" = Table.Sort(Pivot,{{"Index", Order.Ascending}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Lignes triées",{"Index"})
in
    #"Colonnes supprimées"
Rechercher des sujets similaires à "petit challenge powerquery"