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

BIRT Discussion :

Formattage conditionnel de valeur ?


Sujet :

BIRT

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut Formattage conditionnel de valeur ?
    Salut, j'ai un soucis de débutant : j'aimerai formatter une valeur de manière conditionnelle (pas le style mais la valeur).
    Exemple j'ai des valeurs en octets.
    Si c'est inférieur à 1000, je veux ma valeur du genre

    560 o
    Si c'est supérieur à 1000 et inférieur à 1 million
    123.2 ko
    et ainsi de suite (par exemple si j'ai des Go je vais juste afficher 2 chiffres après la virgule.
    Alors mon problème c'est que j'ai bien vu les highlights, je peux changer les couleurs, mais pas la valeur.
    J'ai vu les mapping, j'ai cru que ça m'aiderai mais il semble qu'on ne peut mettre qu'une valeur figée.
    Et j'ai du mal à voir comment avec les formatters je peux faire un truc conditionnel.
    Quelle est la bonne méthode ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    Salut,

    Ton idée de passer par les highlights est bonne, on peut presque aller au bout en utilisant 'Apply style' et en créant 4 styles avec des formats numbers différents mais ça coince avec les divisions par 1024. Je ne pense pas qu'on puisse faire ça avec des CSS, mais si quelqun a la solution ce serait effectivement la meilleure option.

    Donc je ne sais pas quelle est la meilleure méthode mais perso je le ferais au niveau du dataset, en créant un champs calculé de type String avec une expression effectuant le mapping.
    On peut aussi faire ce mapping directement dans les cellules du rapport en utilisant les évènements. A titre d'exemple voici un script qui convertit dans une cellule "Dynamic text" la taille d'un fichier, à copier dans l'évènement "onRender" de la cellule du texte dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var nbOctets= this.text; //récupère la taille en octets
    if (nbOctets<1024){
      this.text=nbOctets+"o";
    }else if (nbOctets>=1024 && nbOctets<1048576 ){
       this.text=(nbOctets/1024).toFixed(1)+"Ko";
    }else{
       this.text=(nbOctets/1048576).toFixed(2)+"Mo";
    }
    Pour être clean il faut l'externaliser dans une fonction javascript si il est utilisé à plusieurs endroits.

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Merci je suis passé par une computed column du dataset, ça marche.
    Je débute en birt, c'est pas simple au début.
    Pour externaliser une fonction javascript je suis obligé de faire un fichier js séparé ? C'est pas possible d'avoir une zone globale ou je pourrai mettre mes fonctions embarquées dans mon rapport ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    On peut éventuellement définir des fonctions globales dans l'évènement "Initialize" du rapport, mais c'est pas top. Par exemple en définissant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myScript1 = new Function("x", "y", "return (x + y)/2");
    myScript2 = new Function("x", "y", "return (x * y)");
    myScript1 et myScript2 peuvent maintenant être appelés depuis n'importe quel endroit du rapport, sauf depuis les dataset servant à remplir des listes de choix de paramètre.

Discussions similaires

  1. [XL-2003] VBA suppression conditionnelle de valeur
    Par jle41 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/06/2012, 09h43
  2. Réponses: 7
    Dernier message: 30/09/2010, 12h30
  3. Réponses: 5
    Dernier message: 16/12/2008, 15h28
  4. Réponses: 7
    Dernier message: 03/05/2008, 00h40
  5. Copie conditionnelle des valeurs d'une ligne
    Par frisette68 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/02/2008, 02h07

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