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 - List.Accumulate + Table.TransformColumns


Sujet :

POWER

  1. #1
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut PWQ - List.Accumulate + Table.TransformColumns
    Bonjour,

    Je veux traiter des colonnes multivaluées pour que chaque valeur d'un champ multivalué se décompose en autant de ligne que de valeurs multivaluées. Autrement dit je pars de

    Nom : champsMultivalués.JPG
Affichages : 275
Taille : 36,6 Ko

    Et veux arriver à ça (Copie partielle du résultat)

    Nom : champsMultivaluésRésult.JPG
Affichages : 275
Taille : 33,9 Ko

    Mon problème est de ne pas écrire en dur les colonnes à transformer en liste. Le code ci-dessous ne transforme que la dernière colonne d'une liste et non pas la totalité des champs de la liste, pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    = let 
        lstColName = Table.ColumnNames(Typage) //, anyOut = lstColName
        ,lstFieldForExpand = List.Skip (lstColName, 2) //, anyOut = lstFieldForExpand
         //,tblWithList = Table.TransformColumns(Typage,{{"Location", each  Text.Split(_,",")}, {"Business", each Text.Split(_,",")},{"Department",  each Text.Split(_,",")}}), anyOut = tblWithList 
        ,tblWithList = List.Accumulate (lstFieldForExpand, "", (anyInitOut,anyCurr)=> Table.TransformColumns(Typage,{anyCurr, each Text.Split(_,",")})), anyOut = tblWithList
    in anyOut
    Nom : champsMultivaluésRésultError.JPG
Affichages : 276
Taille : 34,4 Ko

    Merci par avance pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 350
    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 350
    Par défaut
    Bonsoir
    Pas d'ordinateur pendant 10 jours, je déconnecte
    Je pense que je partirai sur un List.Transform pour générer le 2e argument de Table.TransformColumns à partir de la liste ListFieldForExpand
    Stéphane

  3. #3
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par Raccourcix Voir le message
    Bonsoir
    Pas d'ordinateur pendant 10 jours, je déconnecte
    Je pense que je partirai sur un List.Transform pour générer le 2e argument de Table.TransformColumns à partir de la liste ListFieldForExpand
    Stéphane
    J'ai suivi ton conseil qui est bien sûr la bonne solution


    = let
    lstColName = Table.ColumnNames(Typage)
    ,lstFieldForExpand = List.Skip (lstColName, 2)
    ,tblWithList = Table.TransformColumns( Typage,List.Transform(lstFieldForExpand, each {_, each Text.Split(_,",")})) , anyOut = tblWithList
    in anyOut


    Nom : champsMultivaluéSol1.JPG
Affichages : 237
Taille : 49,9 Ko


    Merci et bonne déconnexion numérique !

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 350
    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 350
    Par défaut
    Bonjour

    de retour...

    notez que List.Accumulate n'est pas inutile pour développer les colonnes avec des listes afin d'éviter les 3 étapes successives évoquées sur le forum Microsoft
    https://community.fabric.microsoft.c...le/m-p/4422744


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
      lstColName = Table.ColumnNames(Typage),
      lstFieldForExpand = List.Skip (lstColName, 2),
      tblWithList = Table.TransformColumns( Typage,List.Transform(lstFieldForExpand, each {_, each Text.Split(_,",")})),
      anyOut = List.Accumulate(lstFieldForExpand, tblWithList, (state, current) => Table.ExpandListColumn(state, current))
    in anyOut
    A partir de la table tblWithList, chacune des colonnes de lstFieldForExpand va être développée successivement.


    Enfin, le troisième argument de la fonction List.Accumulate peut même être simplifié car les 2 arguments state et current sont présents et dans l'ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
      lstColName = Table.ColumnNames(Typage),
      lstFieldForExpand = List.Skip (lstColName, 2),
      tblWithList = Table.TransformColumns( Typage,List.Transform(lstFieldForExpand, each {_, each Text.Split(_,",")})),
      anyOut = List.Accumulate(lstFieldForExpand, tblWithList, Table.ExpandListColumn)
    in anyOut
    Stéphane

  5. #5
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Merci Stéphane et heureux de te lire à nouveau. Je passe maintenant sur DAX avec un nouveau post

    A+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/02/2025, 13h13
  2. Réponses: 6
    Dernier message: 31/10/2022, 11h01
  3. liste des tables par base
    Par rupert dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/05/2004, 09h38
  4. Obtenir la liste des tables
    Par edamiral dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 23/04/2004, 13h33
  5. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20

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