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 BI Discussion :

Spliter un champ en fonction de ses valeurs


Sujet :

Power BI

  1. #1
    Membre habitué
    Inscrit en
    février 2004
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 300
    Points : 143
    Points
    143
    Par défaut Spliter un champ en fonction de ses valeurs
    Bonjour,

    J'ai un champ "ldap_info" qui comprend une valeur.
    PI, cette valeur est répurée via de mon système "Active Directory"

    Le contenu du champ "ldap_info" est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CN=XXX,OU=Disabled,OU=GSE,DC=Movib,DC=NOBON"
    Et je souhaite spliter le contenu par colonne et ses résultat.
    Donc avoir 5 colonnes/champs en plus sur la même table.

    ex:


    CN OU_1 OU_2 DC_1 DC_2
    XXX Disabled GSE Movib NOBON

    Donc, dans mon champs initale "ldap_info", j'ai une valeur qui comprend 5 libellés (CN=, OU=, OU=, DC=, DC=) et je souhaite récuperer les 5 libellés et les ajouter à la même table avec ses valeurs associées.

    ex, suite:


    LDAP_INFO CN OU_1 OU_2 DC_1 DC_2
    CN=XXX,OU=Disabled,OU=GSE,DC=Movib,DC=NOBON XXX Disabled GSE Movib NOBON

    Et ce afin de définir par exemple une relation avec une autre table sur le champs "CN".

    Avez-vous une idée ?

    Merci d'avance,

    Yves

  2. #2
    Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : novembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Yves,

    Tu as essayé l'ajout de colonne conditionnelle ?
    Nom : colonne conditionnelle.PNG
Affichages : 20
Taille : 26,9 Ko

  3. #3
    Membre habitué Avatar de Tippa
    Homme Profil pro
    Consultant Formateur en Business Intelligence
    Inscrit en
    mars 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant Formateur en Business Intelligence

    Informations forums :
    Inscription : mars 2010
    Messages : 111
    Points : 189
    Points
    189
    Par défaut Split by Delimiter
    Bonjour,

    Un Fractionner la colonne avec comme délimiteur le = et sur toutes les occurrences,
    suivi d'un peu de nettoyage (Remplacer les valeurs ou bouton Format) devrait faire l'affaire, non ?

    Dites nous si ça fonctionne...

    Soit en code M :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcvazjYiI0PEPtXXJLE5MyklNAbHdg111XJxtffPLMpNADD9/J38/pdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Colonne 1" = _t]),
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"Colonne 1", type text}}),
        #"Duplication de la colonne" = Table.DuplicateColumn(#"Type modifié", "Colonne 1", "Colonne 1 - Copier"),
        #"Fractionner par signe =" = Table.SplitColumn(#"Duplication de la colonne", "Colonne 1", Splitter.SplitTextByDelimiter("=", QuoteStyle.Csv), {"Colonne 1.1", "Colonne 1.2", "Colonne 1.3", "Colonne 1.4", "Colonne 1.5", "Colonne 1.6"}),
        #"Colonnes permutées" = Table.ReorderColumns(#"Fractionner par signe =",{"Colonne 1 - Copier", "Colonne 1.1", "Colonne 1.2", "Colonne 1.3", "Colonne 1.4", "Colonne 1.5", "Colonne 1.6"}),
        #"Type modifié1" = Table.TransformColumnTypes(#"Colonnes permutées",{{"Colonne 1.1", type text}, {"Colonne 1.2", type text}, {"Colonne 1.3", type text}, {"Colonne 1.4", type text}, {"Colonne 1.5", type text}, {"Colonne 1.6", type text}}),
        #"Rempla ,OU par Rien" = Table.ReplaceValue(#"Type modifié1",",OU","",Replacer.ReplaceText,{"Colonne 1.1", "Colonne 1.2", "Colonne 1.3", "Colonne 1.4", "Colonne 1.5", "Colonne 1.6"}),
        #"Rempla ,DC par Ren" = Table.ReplaceValue(#"Rempla ,OU par Rien",",DC","",Replacer.ReplaceText,{"Colonne 1.1", "Colonne 1.2", "Colonne 1.3", "Colonne 1.4", "Colonne 1.5", "Colonne 1.6"})
    in
        #"Rempla ,DC par Ren"
    Ou en image :
    Nom : Resultat1.png
Affichages : 20
Taille : 79,4 Ko

    Nom : Resultat2.png
Affichages : 19
Taille : 28,0 Ko

  4. #4
    Membre actif
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    octobre 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2011
    Messages : 130
    Points : 260
    Points
    260
    Par défaut
    Bonjour,

    Avec une requête Power Query comme celle-ci, je pense que cela devrait répondre à ton attente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    let
        Source = Excel.CurrentWorkbook(){[Name="tabData"]}[Content],
        RemplacerGuillemets = Table.ReplaceValue(Source,"""","",Replacer.ReplaceText,{"Data"}),
        FractionnerColonneEnLigne = Table.ExpandListColumn(Table.TransformColumns(RemplacerGuillemets, {{"Data", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Data"),
        FractionSurBaseSigneEgal = Table.SplitColumn(FractionnerColonneEnLigne, "Data", Splitter.SplitTextByDelimiter("=", QuoteStyle.Csv), {"Data.1", "Data.2"}),
        TranspositionTable = Table.Transpose(FractionSurBaseSigneEgal),
        PromotionEntêtes = Table.PromoteHeaders(TranspositionTable, [PromoteAllScalars=true]),
        ModificationTypesDonnées = Table.TransformColumnTypes(PromotionEntêtes,{{"CN", type text}, {"OU", type text}, {"OU_1", type text}, {"DC", type text}, {"DC_2", type text}})
    in
        ModificationTypesDonnées
    Il suffit de remplacer la source par celle de tes données, les autres étapes devraient être identiques, peut-être faudra-t-il ajouter d'autres étapes.
    Cordialement
    DanixDB

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    février 2010
    Messages
    7 344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : février 2010
    Messages : 7 344
    Points : 13 941
    Points
    13 941
    Par défaut
    Bonjour à tous

    A priori la solution de danixdb ne marche pas pour plusieurs lignes

    Des étapes permettent de ne pas ternir compte du titre de la colonne à éclater
    Reste à adapter Tableau1
    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
    17
    18
    let
        Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"truc", type text}}),
        #"En-têtes rétrogradés" = Table.DemoteHeaders(#"Type modifié"),
        #"Premières lignes supprimées" = Table.Skip(#"En-têtes rétrogradés",1),
        #"Valeur remplacée" = Table.ReplaceValue(#"Premières lignes supprimées","""","",Replacer.ReplaceText,{"Column1"}),
        #"Index ajouté" = Table.AddIndexColumn(#"Valeur remplacée", "Index", 0, 1, Int64.Type),
        #"Fractionner la colonne par délimiteur" = Table.ExpandListColumn(Table.TransformColumns(#"Index ajouté", {{"Column1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Fractionner la colonne par délimiteur1" = Table.SplitColumn(#"Fractionner la colonne par délimiteur", "Column1", Splitter.SplitTextByDelimiter("=", QuoteStyle.Csv), {"Titre", "Valeur"}),
        #"Lignes groupées" = Table.Group(#"Fractionner la colonne par délimiteur1", {"Titre", "Index"}, {{"Tabl", each _, type table [truc.1=nullable text, truc.2=nullable text, Index=number]}}),
        #"Personnalisée ajoutée" = Table.AddColumn(#"Lignes groupées", "Idx", each Table.AddIndexColumn([Tabl],"Idx",1)),
        #"Idx développé" = Table.ExpandTableColumn(#"Personnalisée ajoutée", "Idx", {"Valeur", "Idx"}, {"Valeur", "Idx.1"}),
        #"Colonnes fusionnées" = Table.CombineColumns(Table.TransformColumnTypes(#"Idx développé", {{"Idx.1", type text}}, "fr-FR"),{"Titre", "Idx.1"},Combiner.CombineTextByDelimiter("_", QuoteStyle.None),"Colonne"),
        #"Colonnes supprimées" = Table.RemoveColumns(#"Colonnes fusionnées",{"Tabl"}),
        #"Colonne dynamique" = Table.Pivot(#"Colonnes supprimées", List.Distinct(#"Colonnes supprimées"[Colonne]), "Colonne", "Valeur"),
        #"Colonnes renommées" = Table.RenameColumns(#"Colonne dynamique",{{"CN_1", "CN"}})
    in
        #"Colonnes renommées"
    Chris
    PowerQuery existe depuis plus de 10 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/04/2007, 10h13
  2. Réponses: 21
    Dernier message: 21/04/2007, 08h00
  3. Réponses: 12
    Dernier message: 13/02/2007, 14h21
  4. Réponses: 5
    Dernier message: 30/12/2006, 15h35
  5. Réponses: 18
    Dernier message: 21/03/2006, 13h46

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