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 :

PWQY - M : obtenir une table 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 PWQY - M : obtenir une table avec List.Accumulate
    Encore un exercice purement théorique dont l'objectif est d'obtenir une table via List.Accumulate


    J'ai le code suivant mais la colonne 3 est en erreur à cause de Table.FromList(anyFirstOut[col3]). Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let #"DataList" = 
        let
            lst=  {{1..10},{ "txt1","txt2", "txt3"}}
            ,tblTbl = List.Accumulate(lst{0}, #table({"col1","col2","col3"} ,{{0, lst,{"1,1","2,2"}}}),(anyFirstOut, anyCurr)=> 
            Table.InsertRows(anyFirstOut, anyCurr, {[col1 = anyCurr, col2 = anyFirstOut[col2], col3 =Table.FromList(anyFirstOut[col3])]})
            )
        in
            tblTbl
    in
        DataList
    L'objectif est d'obtenir en colonne 3 une table qui a autant d'enregistrement que le nombre de la liste {1..10} et en
    ligne 1 col1 = 1 et col2 = txt1
    Ligne 2 col1 = 2 et col2 = txt2

    Etc...

    Merci pour toute aide

    Merci par avance pour tout retour
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 259
    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 259
    Par défaut
    Re-bonjour
    je n'ai rien compris à l'objectif
    il y a 3 txt ; txt1, txt2 et txt3. mais 10 valeurs de 1 à 10 et donc 10 lignes à la fin on met quoi à partir de la ligne 4 ?
    à quoi sert la liste "1,1" , "2,2" ?

    vous cherchez quoi exactement avec vos exercices ?

    Stéphane

  3. #3
    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
    L'objectif est de comprendre la logique de M.

    J'ai fait évoluer mon objectif qui est devenu
    • Afficher en sortie une table
    • Appliquer un expand sur la col3 pour ajouter 2 colonnes supplémentaires correspondant à la liste {i, txti}


    Comme je n'arrivais pas à créer ces listes {i, txti} au niveau de chaque ligne, j'ai d'abord voulu tester la transformation de liste en table avec une liste écrite en dur
    Mais je pense après réflexion que si je veux appliquer un expand simple je ne dois de toute façon passer en paramètre qu'une liste simple donc {0,"test"}

    Enfin, j'avais dans l'idée quand il n'y a plus de valeurs txt, d'utiliser
    try .... otherwise null
    J'ai essayé ce code pour associé à chaque ligne du tableau une liste mais sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    let #"DataList" = 
        let
            lst = {{1..10},{ "txt1","txt2", "txt3"}}
            ,tblTbl = List.Accumulate(lst{0}, #table({"col1","col2","col3"} ,{{0, lst,{"0","AddRow"}}}),(anyFirstOut, anyCurr)=> 
            let
                //toto = Table.FromList(anyFirstOut[col3],{"col1","col2"})
                //toto =  {anyFirstOut[col2]{0}{anyCurr} } &  {try anyFirstOut[col2]{1}{anyCurr} otherwise null} // avec Try ... otherwise null
                 toto =  {anyFirstOut[col2]{0}{anyCurr}} &  {anyFirstOut[col2]{1}{anyCurr}}
                ,titi = Table.InsertRows(anyFirstOut, anyCurr, {[col1 = anyCurr, col2 = anyFirstOut[col2], col3 =toto]})
            in titi
            )
     
        in
            tblTbl
    in
        DataList
    Merci une nouvelle fois Stéphane pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 259
    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 259
    Par défaut
    Bonjour
    je suis désolé mais je ne comprends toujours pas l'objectif.
    il ne faut pas vouloir absolument utiliser Table.Accumulate dans toutes les situations.

    pour ajouter 2 colonnes à une table à partir de listes on peut décomposer une table avec Table.ToColumns, ajouter à la liste de listes obtenue les 2 nouvelles colonnes puis remettre sous forme de table avec Table.FromColumns ce qui ajoute automatiquement des null s'il n'y a pas assez d'éléments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.FromColumns(Table.ToColumns(Table) & {{1..10}, {"text1", "text2", "text3"}})
    Stéphane

  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
    Encore très très fort Stéphane


    Pour cet exemple ce code suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     let #"DataList" = 
        let
            lst = {{1..10},{ "txt1","txt2", "txt3"}}
           ,tblTbl =  Table.FromColumns( lst,{"col1", "col2"} )
        in tblTbl
    in
        DataList





    Merci pour cette très belle solution
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 259
    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 259
    Par défaut
    la table vide est inutile dans la ligne 4 du code, si lst est une liste de 2 listes Table.FromColumns(lst,{"col1", "col2"} ) suffit
    car Table.ToColumns(#table({},{})) renvoie une liste vide

    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
    Stéphane, comme d'habitude pourrais-tu corriger l'erreur dans ce code pour avoir à chaque ligne une table correspondant la sous liste {xi, txti} pour faire ensuite un EXPAND sachant que la meilleure solution est celle donnée plus haut car si on passe une table dans Table.ToColumns + Table.FromColumns = EXPAND implicite.

    Mais triturer le code me permet de comprendre la logique de M.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    et #"DataList" = 
        let
            lst = {{1..10},{ "txt1","txt2", "txt3"}}
     
            ,tblTbl = List.Accumulate(lst{0}, #table({"col1","col2","col3"} ,{{0, lst,{"0","ValueInit"}}}),(anyFirstOut, anyCurr)=> 
            let
                lstCurr =  {anyFirstOut[col2]{0}{anyCurr}} &  {anyFirstOut[col2]{1}{anyCurr}}
                ,tblCurr = Table.FromList(lstCurr,{"col1","col2"})
                ,ResultOut = Table.InsertRows(anyFirstOut, anyCurr, {[col1 = anyCurr, col2 = anyFirstOut[col2], col3 =tblCurr]})
            in ResultOut
    in
        DataList
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  8. #8
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 259
    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 259
    Par défaut
    Franchement, ça ne m'intéresse pas du tout de poursuivre cet échange.

    en quoi triturer ce code permet de comprendre la logique M ?
    Vous semblez persister avec List.Accumulate qui est une fonction puissante et un peu complexe mais qu'il faut utiliser à bon escient et pas vouloir tout faire avec.

    Sans même tester votre code je constate qu'il est rempli d'erreurs :
    - il manque le premier l au début (sûrement un problème de copier/coller)
    - il manque une ) après "in ResultOut" en ligne 10 pour fermer List.Accumulate
    - il y a 3 let et 2 in : il manque "in tblTbl" en ligne 11
    - les virgules en début de ligne 5, 8 et 9 ne sont pas des erreurs de code mais le rendent moins lisible


    Stéphane

  9. #9
    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
    Vous avez raison et passe en résolu la discussion.

    Merci encore pour votre aide très précieuse
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/04/2025, 11h21
  2. Réponses: 3
    Dernier message: 13/04/2025, 12h56
  3. Réponses: 2
    Dernier message: 12/12/2021, 18h28
  4. [Entité-Association] Gestion d'une table avec listes de référentiel
    Par dorian53 dans le forum Schéma
    Réponses: 9
    Dernier message: 13/03/2013, 21h49
  5. Réponses: 1
    Dernier message: 18/09/2006, 10h51

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