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

QlikView Discussion :

Transformer une liste en lignes


Sujet :

QlikView

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut Transformer une liste en lignes
    Bonjour,

    J'ai un script QV (QlikView 11.2 SR13) dans lequel je charge les données d'un champ dont j'aimerais que les valeurs (séparées par des "/") soient mises dans des lignes différentes.

    Ainsi, voici ma structure initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     ID     CHAMP
    1        Info1/Info2/Info3/
    2        Info1/Info4
    3        Info1
    J'aimerais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID  NUM  CHAMP
    1    1    Info1
    1    2    Info2
    1    3    Info3
    2    1    Info1
    2    2    Info4
    3    1    Info1
    Les éventuels séparateurs "/" situés en fin de ligne doivent être supprimés.

    Merci pour vos idées de rédaction du script de chargement et de modification de ces données.

    MarieO

  2. #2
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Supposons que vous ayez les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data:
    LOAD * INLINE [
    ID, CHAMP
    1, Info1/Info2/Info3/
    2, Info1/Info4
    3, Info1
    ];
    Si vous souhaitez simplement découper le CHAMP par "/", il suffit d'utiliser la fonction subfield(champ, séparateur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    new_data:
    LOAD 
    ID AS new_ID, 
    SubField(CHAMP, '/') AS new_CHAMP
    RESIDENT data
    ;
    On supprime les valeurs vides avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INNER JOIN(new_data)
    LOAD 
    DISTINCT new_CHAMP
    RESIDENT new_data
    WHERE len(new_CHAMP) > 0;
    (mais peut-être c'est plus simple de virer les "/" finaux dès le chargement de la table, à vous de voir)

    Si vous avez vraiment besoin de la position de l'élément, il faut faire un script un peu plus tricky. On va boucler avec WHILE sur les éléments du subfield :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    new_data2:
    LOAD 
    ID AS new2_ID, 
    SubField(CHAMP, '/', IterNo()) AS new2_CHAMP,
    IterNo() AS new2_NUM
    RESIDENT data
    While IterNo() <= 1 + len(KeepChar(CHAMP, '/'))
    ;
     
    INNER JOIN(new_data2)
    LOAD 
    DISTINCT new2_CHAMP
    RESIDENT new_data2
    WHERE len(new2_CHAMP) > 0;
    Nom : HR98ibC.png
Affichages : 91
Taille : 3,5 Ko

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci pour ces premiers éléments de réponse. Je vais tester car cela me semble vraiment correspondre à ce que je recherche.

    Question supplémentaire : comment supprimer dans le script de chargement les "/" finaux ?


    Merci beaucoup,

    MarieO

  4. #4
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par marieo Voir le message
    Bonjour,
    Question supplémentaire : comment supprimer dans le script de chargement les "/" finaux ?
    En regardant le dernier caractère.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data:
    LOAD
    ID,
    if(Right(CHAMP, 1) = '/', left(CHAMP, len(CHAMP) - 1), CHAMP) AS CHAMP
    ;
    LOAD * INLINE [
    ID, CHAMP
    1, Info1/Info2/Info3/
    2, Info1/Info4
    3, Info1
    ];

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup.

    Ca fonctionne correctement pour l'ensemble des scripts.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/07/2017, 06h31
  2. Fiches doublons transformer une liste affichée en colonne en lignes
    Par AliséeFSM dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/12/2015, 10h44
  3. Transformer une liste de caractères en nombre
    Par divpload dans le forum Général Python
    Réponses: 2
    Dernier message: 18/05/2008, 19h31
  4. Transformer une liste en tableau
    Par basket dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/09/2006, 16h01
  5. Transformer une liste en chaîne de caractères
    Par nounjours dans le forum Prolog
    Réponses: 1
    Dernier message: 23/02/2006, 15h41

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