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 chaine au format numérique


Sujet :

QlikView

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Points : 120
    Points
    120
    Par défaut Transformer une chaine au format numérique
    Bonjour,

    j'essaie de transformer une chaine de caractères en numérique ex :

    00002000 et avoir pour résultat 2000.

    J'ai essayé num, mais cela ne fonctionne, quelqu'un aurait une idée ?

    par avance merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Si tu utilises une fonction numérique, qlikview traitera automatiquement ta zone en numérique.
    mazone -> 000020000
    mazone+0 -> 2000
    Sum(mazone) -> somme des valeurs de mazone traitées comme numériques.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Points : 120
    Points
    120
    Par défaut
    En fait, je veux le traiter dès le chargement des données, et donc je ne trouve pas la fonction qui me permet de transformer la chaîne 00002000 vers un format numérique (2000), précision le fichier d'origine est du txt.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    On peut le faire aussi dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Load zone1,zone2+0 as zone2,zone3 from monfichier.txt ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Points : 120
    Points
    120
    Par défaut
    Parfait, merci ça fonctionne, bonne journée

  6. #6
    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
    La fonction "num(nombre, format)" prend en paramètre un nombre et fait en sorte de l'afficher selon le format désiré.

    La fonction "num#(expression, ...)" prend en paramètre une expression et fait en sorte de l’interpréter selon les paramètre suivants (format, séparateur de décimales, séparateur des milliers, etc...).


    Supposons que le chargement est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD * INLINE [
    TEST
    0005000
    ];
    Le résultat sera :


    Vous voyez les "000" qui précèdent le nombre, mais notez que la valeur est alignée à droite, ce qui signifie que QlikView considère que la valeur est un numérique.
    C'est parce que, au chargement, QlikView a été assez intelligent pour savoir que c'est un nombre (ce qui n'est pas toujours le cas, cf. plus loin dans le post).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Data:
    LOAD num(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    aura le même résultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Data:
    LOAD TEST + 0 AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Data:
    LOAD TEST * 1 AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    Le fait de faire une opération mathématique va retourner comme résultat un nombre, qui sera formaté au format par défaut dans votre script.


    De la même façon, une opération de chaine va retourner comme résultat une chaine de caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Data:
    LOAD text(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    retournera donc


    On voit bien que l'alignement est cette fois à gauche, ce qui permet de savoir que QlikView interprète cette valeur comme une chaîne de caractères.

    Il est possible que votre source soit faite en sorte que QlikView n'arrive pas à savoir que votre colonne est en réalité un nombre, et interprétera comme une chaine.
    Si votre source est interprétée comme une véritable chaine de caractère, il ne sera plus possible d'effectuer directement une opération mathématique dessus.

    Ainsi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Data:
    LOAD TEST * 1 AS TEST;
    LOAD text(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    retournera... rien ! (valeur nulle)
    En effet, il n'est pas possible d'effectuer d'opération mathématique sur une chaine.

    La fonction "num()" n'aura alors aucun effet, car elle attend un nombre en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Data:
    LOAD num(TEST) AS TEST;
    LOAD text(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    retournera aussi des valeurs nulles.


    Il faut donc utiliser "num#()" qui permet de transformer une expression en nombre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Data:
    LOAD num#(TEST) AS TEST;
    LOAD text(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    sera alors capable de retourner un nombre (non formaté).

    Pour finir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Data:
    LOAD num(num#(TEST)) AS TEST;
    LOAD text(TEST) AS TEST;
    LOAD * INLINE [
    TEST
    0005000
    ];
    retournera un nombre, formaté.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    En complément,
    Si la zone contient le signe (+ ou -)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD * INLINE [
    TEST
    +0005000
    ];
    Qlikview m’interprète comme une chaîne de caractère. Comment faire pour qu'il l’interprète en numérique ?

    merci d'avance.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Bonjour.
    Load Test * 1 as TestNum devrait fonctionner.
    Tu dois pouvoir aussi charger la valeur telle quelle et faire des graphiques avec Test * 1. A voir

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Je me permets de répondre à cette discussion, ma question étant dans le périmètre :

    - Sous QV 11.00
    - Import d'un fichier plat ".csv", délimitateur ';'

    j'ai 1 colonne exprimant un montant qui s'exprime ainsi 518.78 (cinq cent dix huit virgule soixante dix-huit pour être précis). Le séparateur des décimales est bien le point dans ce fichier

    Mes variables locales dans QV sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET DecimalSep='.';
    SET MoneyThousandSep=' ';
    SET MoneyDecimalSep='.';
    SET MoneyFormat='# ##0.00 €;-# ##0.00 €';
    Après chargement de ce fichier externe via un LOAD, la donnée se visualise ainsi dans une liste de selection : 5.2e + 002 visuellement aligné à droite.

    Dans un tableau, si j'applique le format monétaire, je vois visuellement 518.78 €.

    Par contre, si j'exporte sous excel ce tableau, l'export me donne un format de visualisation à 0.52€ (alors que la cellule contient bien 518,78).
    Si j'applique un format monétaire à cette cellule excel, je retrouve mes 518.78€

    Comment puis-je faire pour avoir un format correct d'export ?

    Par avance merci pour votre aide.

  10. #10
    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
    Vous avez essayé le format "monétaire" et le format "défaut" en ayant mis en dur le format souhaité, et les 2 ne conviennent pas ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    J'ai essayé un "MONEY(VAR) as VAR" tout comme le "NUM(NUM#(VAR)) as VAR" que vous avez préalablement proposé et ça ne fonctionne pas.

    Quand je fais un aperçu de cette colonne dans mon modèle vectoriel (dans le visionneur de table) la colonne est exprimé dans un format 5.2e+002 (alignement à droite)
    Quand je met cette colonne dans une liste de sélection, le format affiché est identique
    Quand (dans un tableau croisé par exemple) j'utilise cette colonne et lui applique un format monétaire, l'affichage dans ce tableau dans Qlikview me donne un format monétaire correct. Les sommes et autres calculs se font sans soucis.

    Lors de l'export excel, les données exportées dans excel (2010) affichent 0.52 €.
    Si je clique dans la cellule excel, la valeur affichée dans la barre de formule donne bien 518,78 (c'est bien une virgule qui s'affiche et pas un point) et le format indique monétaire
    Si je passe le format de cette cellulle en "Standart", la valeur affichée devient 518,78
    Si je repasse le format de cette cellule en format monétaire , la valeur devient alors bien 518.78€ !!!

    Par avance merci pour votre aide

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

Discussions similaires

  1. transformer une chaine de caracteres en image
    Par jsunnyduckk dans le forum 2D
    Réponses: 7
    Dernier message: 16/02/2007, 14h51
  2. transformer une chaine de caracteres en du code
    Par giova_fr dans le forum C++
    Réponses: 6
    Dernier message: 15/01/2006, 16h37
  3. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  4. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

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