IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POWER Discussion :

PWQ - M : Fusionner des lignes d'entêtes avec List.Accumulate


Sujet :

POWER

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut PWQ - M : Fusionner des lignes d'entêtes avec List.Accumulate
    Bonjour,

    J'ai un fichier Excel avec 2 lignes d'entêtes que je dois fusionner. Le chargement dans PWQ donne

    Nom : Doubleheaders.JPG
Affichages : 94
Taille : 18,9 Ko


    Une solution donnée par chandeep chhabra (alias goodly sur YT) est

    Nom : DoubleheaderSolGoodly.JPG
Affichages : 87
Taille : 14,2 Ko

    Mais j'aimerais modifier ce code en utilisant List.accumulate pour la concaténation des sous listes données par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table.ToColumns(Table.FirstN(#"TableRaw", 2))
    Nom : headerList.png
Affichages : 84
Taille : 6,4 Ko

    J'étais parti sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    = let 
       rec = Table.ToColumns(Table.FirstN(#"TableRaw", 2)),
       each rec (_) =>  List.Accumulate(_,"", (anyOut, anyFirst)=> anyFirst & anyOut)
    in Out
    Mais j'ai l'erreur

    Nom : DoubleheaderError.JPG
Affichages : 84
Taille : 25,7 Ko

    Merci par avance pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 276
    Par défaut
    Bonjour
    pourquoi vouloir utiliser un List.Accumulate dans ce cas ? Cette fonction n'est pas appropriée pour ce que vous voulez faire

    il faut un List.Transform comme goodly

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let
        Source = Votre_Source,
        rec = Table.ToColumns(Table.FirstN(Source, 2)),
        combine = List.Transform(rec, Text.Combine)
    
    in
        combine
    Stéphane

  3. #3
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 276
    Par défaut
    Ensuite je trouve sa solution bien complexe
    Voici une solution plus simple à mon avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let
        Source = Votre_Source,
        #"En-Tête" = List.Transform(Table.ToColumns(Table.FirstN(Source, 2)), Text.Combine),
        Données = Table.ToRows(Table.RemoveFirstN(Source, 2)),
        Résultat = #table(#"En-Tête", Données)
    in
        Résultat
    Stéphane

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Bonjour Raccourcix,

    Merci pour la solution que je vais tenter de comprendre.

    Utiliser List.Accumulate avait un objectif personnel d'exercice de style.


    Merci encore

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    J'ai implémenté List.Accumulate pour le geste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    = let 
      lst = Table.ToColumns(Table.FirstN(DataIn_Sheet,2 )), 
      lst2 = List.Transform (lst , each List.Accumulate(_,"", (anyOut, anyFirst)=> anyFirst &  " " & anyOut)), 
      anyOut = lst2
    in anyOut
    Mais je ne comprends pas les 3 derniers résultats en null

    Nom : DoubleheaderAccu.JPG
Affichages : 57
Taille : 32,6 Ko


    sachant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table.ToColumns(Table.FirstN(DataIn_Sheet,2 ))
    retourne pour les 3 dernières sous listes {Null, "Nom de colonne"}

    Nom : headerList2.png
Affichages : 56
Taille : 3,3 Ko



    Merci par avance

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 276
    Par défaut
    Dans Power Query, null & "A" renvoie null
    Idem pour les opérateurs, +, -, *, /, <, >, <>, =

    Voir la documentation
    https://learn.microsoft.com/fr-fr/po...re-combination

    D'où mon usage de Text.Combine

    Stéphane

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par Raccourcix Voir le message
    Dans Power Query, null & "A" renvoie null
    Idem pour les opérateurs, +, -, *, /, <, >, <>, =

    Voir la documentation
    https://learn.microsoft.com/fr-fr/po...re-combination

    D'où mon usage de Text.Combine

    Stéphane
    Merci beaucoup Raccourcix

    J'ai donc modifié mon code qui est pur exercice de style !

    Nom : Doubleheaders.JPG
Affichages : 37
Taille : 19,6 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     let 
      lst = Table.ToColumns(Table.FirstN(DataIn_Sheet,2 )),
     //lst2 = List.Transform (lst , each  Text.Combine(_," " )),
      lstDelNull = List.Transform(lst, each List.RemoveNulls(_)),
      lst2 = List.Transform (lstDelNull , each List.Accumulate(_,"", (anyFirstOut, anyCurrent)=>  anyFirstOut & " " & anyCurrent)), 
      anyOut = List.Transform(lst2, each Text.TrimStart(_, " "))
    in anyOut
    Nom : DoubleheaderAccu.JPG
Affichages : 37
Taille : 38,3 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/02/2009, 20h04
  2. fusionner des lignes d'un datagrid ?
    Par Pascale38 dans le forum Flex
    Réponses: 14
    Dernier message: 06/10/2008, 17h33
  3. Réponses: 1
    Dernier message: 15/09/2008, 10h43
  4. Fusionner des lignes en resultat
    Par kalagool dans le forum DB2
    Réponses: 3
    Dernier message: 30/04/2008, 15h31
  5. [SQL-VBA]fusionner des lignes
    Par shagun dans le forum Requêtes et SQL.
    Réponses: 42
    Dernier message: 13/04/2007, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo