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 :

Variable contenant des Virgules en paramètre d'une autre variable


Sujet :

QlikView

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    PM IT BI
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PM IT BI
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 38
    Points
    38
    Par défaut Variable contenant des Virgules en paramètre d'une autre variable
    Bonjour,
    J'ai un souci d'interprétation de virgule dans une variable en paramètre d'une autre :

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let fmontest = 'Coucou,c est moi';
    let fmontest2 = 'Test de virgule $1';
    let echoTest = $(fmontest2($(fmontest)));
    le echoTest renvoie : Test de virgule Coucou
    Pour QlikView le "fmontest" est transformé en 2 paramètres.


    Comment contourner ce problème ?

    * 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
    La fonction $() remplace le contenu par sa valeur.
    Le script est ensuite interprété avec sa nouvelle valeur.
    On a donc : let echoTest = $(fmontest2($(fmontest)));
    qui devient : let echoTest = $(fmontest2(Coucou,c est moi)));
    Et là il essaie une fonction fmontest2 avec 2 paramètres : Coucou et c est moi
    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let fmontest = 'Coucou,c est moi';
    let fmontest2 = 'Test de virgule';
    let echoTest = '$(fmontest2) $(fmontest)';

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    PM IT BI
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PM IT BI
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Le but de mon exemple est d'avoir des expressions plus complexe.

    Je suis bloqué par un If

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    let fUniteConverti = 'UN * If([Type_Produit]=$1,0,1)';
    let fChiffreAffaire = 'CA * $(fUniteConverti("Promo"))'
     
    => fChiffreAffaire ='CA *UN * If([Type_Produit]="Promo"'

  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
    Tu te compliques la vie pour rien ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fChiffreAffaire=CA * UN
    IF [Type_Produit]="Promo" then fChiffreAffaire = 0
    Si c'est dans un load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Test:
    Load * inline [Code,UN,CA,Type
    1,1,1,x
    2,2,2,x
    3,3,3,y];
     
    Join Load Code, if(Type='y',0,UN*CA) as Chiffre resident Test;

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    PM IT BI
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PM IT BI
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Non mais je cherche vraiment une solution pour les virgules.

    Je veux faire mon UN, mon chiffre d'affaire, mes parts de marché, mes ratios, mes quotas....

    Je ne veux pas avoir des expressions trop longues et je veux surtout que cela soit récursif.

    Je modifie ma formule d'UNConvertie ça se propage dans toutes les expressions l'utilisant.

  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 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il ne faut pas confondre l'interprétation de chaines (qui nécessite l'utilisation très contraignante de quotes), et l'interprétation de fonctions (if, etc...).

    Pour éviter les problèmes de virgule, je vous conseille d'utiliser un autre caractère, puis de le changer au dernier moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LOAD * INLINE [
    Type_Produit, UN, CA
    Normal, 1, 1
    Promo, 2, 1
    Normal, 4, 1
    ];
     
    let fUniteConverti = 'UN * if([Type_Produit]=$1|0|1)'; // on utilise le 'pipe' à la place de la virgule
    let fChiffreAffaire = 'CA * $(fUniteConverti(' & chr(39) & 'Promo' & chr(39) & '))';
    et dans mon expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum($(=replace(fChiffreAffaire, '|', ',')))
    je change le 'pipe' par une virgule.




    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let fUniteConverti = 'UN * if([Type_Produit]=$1|0|1)';
    Set fChiffreAffaire = replace('CA * $(fUniteConverti(' & chr(39) & 'Promo' & chr(39) & '))', '|', ',');
    avec comme expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sum($(=$(fChiffreAffaire)))

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    PM IT BI
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PM IT BI
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse mais cela ne marche pas vraiment

    Si je veux faire du Delta de part de marché, je suis encore bloqué.

    Je vais faire autrement, plusieurs personne sur l'interweb semblent avoir le même souci.

  8. #8
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    L'exemple que j'ai donné fonctionne.

    Pouvez-vous nous expliquer plus en détail ce que vous souhaitez faire (avec un exemple de données) afin de comprendre votre problème ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    PM IT BI
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PM IT BI
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Si je veux faire de la PM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set fPartMarche = 'sum($1)/sum(TOTAL $1)'
    Pour les unités ok, le "remplace" marche mais pour le CA cela ne marche plus car tu as déjà fait le "remplace" et donc tu retrouves la virgule du if

    Et ensuite j'ai de l'evol d'UN et de l'evol de PM UN etc ...

  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 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Il faut faire le "replace" dans votre expression de graphique, pour qu'il ne soit fait qu'une seule fois.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/08/2013, 23h27
  2. Réponses: 3
    Dernier message: 29/04/2011, 18h02
  3. Réponses: 0
    Dernier message: 13/11/2009, 18h16
  4. Utilisation de variable contenant des nombres a virgule en SQL
    Par Rukawa dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 27/10/2006, 19h54
  5. Recuperer une variable contenant des espaces
    Par phpaide dans le forum Langage
    Réponses: 9
    Dernier message: 30/05/2006, 17h07

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