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 :

Utilisation de paramètre


Sujet :

BIRT

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut Utilisation de paramètre
    Bonjour c'est encore moi, toujours des questions !

    Actuellement j'ai trois rapport chacun representant un niveau. Lorsque je clique sur l'axe X ça m'ouvre le rapport du niveau inférieur. Dans chaque rapport j'ai des paramètres, à chaque niveau inférieur j'ai un parametre supplémentaire me permetant d'avoir un niveau plus fin de détail. J'ai lié les paramètres des rapports inférieurs aux paramètres des rapports supérieur (lorsque ceci existait déjà) via le drill through. Tout fonctionne correctement mais j'aurais quand même quelques questions.

    Serait-il possible de créer un rapport avec autant de paramètre qu'il me faut.
    Par exemple avec une requête du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Select *
    from table 
    where code = ?
    Si j'ai un parametre N qui implique N-1 impliquant lui même N-2. Chaque parametre étant crée a partir d'un data set qui lui est propre avec le parametre supérieur comme parametre dans la requête du data set en question. (en sachant que chacun de ces paramètres récupère un code)
    Ma question est donc si le paramètre N-2 n'est pas remplis est-il possible de faire en sorte que la requête prenne N-1 ? Même chose si N-1 est vide ?

    Sinon une autre question, est-il possible de créer une liste ou l'utilisateur peut choisir directement le code qui l'interesse, en choissisant un code cela modifierais la requête et donc le rapport en direct ?

    Enfin si rien de cela n'est possible quelque chose de plus simple. Est-il possible que lorsque l'utilisateur clique sur un département dans mon graphique dans l'axe X cela prenne directement le département (code du département) dans le paramètre du rapport 'enfant'. Et donc par la même occasion comme tout les paramètres seraient remplit dans le rapport enfant, est-il possible de cacher les paramètres a l'utilisateur ? Que le rapport ce créé directement sans que l'utilisateur ai la page de selection des valeurs de parametre qui s'affiche ? En sachant donc que j'utilise que des paramètre en cascade et je n'ai pas vu la possibilité de cliquer sur "hidden", qui lui es présent pour les paramètres "normaux"..

    C'est peut-être un peu fouillis ce que je dis la.. Je peux essayer d'expliquer mieux s'il y a besoin.

    Quelqu'un a t'il quelque chose à me proposer pour effectuer ce que je veux faire ?

  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,

    1/ Pour la première question, l'astuce est de ne pas lier le paramètre de dataset à un paramètre de rapport mais à une expression:

    Nom : param-defaultvalue-expression.png
Affichages : 1683
Taille : 13,0 Ko

    L'expression en question est de ce type, toutefois le test permettant de savoir si un paramètre est défini dépend du contexte et du type de paramètre: parfois il faudra plutôt tester si il est vide ou si il a une valeur spécifique, dans d'autres cas il faudra tester si"typeof(params["Niveau1"].value)" retourne 'undefined' etc. Merci de poster l'expression que tu utiliseras au final, cela aidera probablement d'autres personnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (params["Niveau1"].value!=null){
    	params["Niveau1"].value;
    }else if (params["Niveau2"].value!=null){
    	params["Niveau2"].value;
    }else{
    	params["Niveau3"].value;
    }
    2/Pour le deuxième point il faut définir un élément "Liste" contenant les libellés des codes possibles depuis un dataset puis créer un drillthrough sur le label. Les listes BIRT peuvent s'afficher verticalement ou horizontalement en jouant sur la propriété "Display" des éléments -> ("block"|"inline)

    3/Pour le troisième point oui, on peut récupérer les valeurs cliquées et les transmettre en hyperlien. Pour éviter la fenêtre des paramètres avec le webviewer, le seul moyen à ma connaissance est de définir le paramètre en question comme étant facultatif (décocher "Is required") et mettre une valeur arbitraire en valeur par défaut.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bonjour,

    Merci de ta réponse.

    1/ Du coup pour le moment j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if (params["SelectEntiteSupSup"].value !=null) {
    params["SelectEntiteSupSup"].value;
    } else if (params["SelectEntiteSup"].value != null) {
    params["SelectEntiteSup"].value;
    } else '00000'
    Ce qui fonctionne bien. Le seul truc qui me va pas c'est que quand je ne selectionne pas de valeur le rapport est vide. Je suis donc obligé de selection "Null Value" pour que ça m'affiche le rapport avec des choses à l'intérieur.

    J'ai donc essayé plusieurs chose comme
    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
    19
    20
    21
     if (params["SelectEntiteSupSup"].value !=null) {
    params["SelectEntiteSupSup"].value;
    }  else if (typeof(params["SelectEntiteSupSup"].value != 'undefined')) {
    params["SelectEntiteSupSup"].value;
    } else if (typeof(params["SelectEntiteSup"].value != 'undefined')) {
    params["SelectEntiteSup"].value;
    } else if (params["SelectEntiteSup"].value != null) {
    params["SelectEntiteSup"].value;
    } else '00000'
     
    ou bien 
     
    if (params["SelectEntiteSupSup"].value !=null) {
    params["SelectEntiteSupSup"].value;
    }  else if (params["SelectEntiteSupSup"].value != '')) {
    params["SelectEntiteSupSup"].value;
    } else if (params["SelectEntiteSup"].value != '') {
    params["SelectEntiteSup"].value;
    } else if (params["SelectEntiteSup"].value != null) {
    params["SelectEntiteSup"].value;
    } else '00000'
    En essayant différentes méthode exemple avec ' ' ou " " ou encore "undefined", avec guillement, sans etc.. Du coup je seche un peu, parce que je trouve pas intuitif que l'on soit obligé de choisir "null values", surtout que le parametre n'est pas "required" sinon le "null values" n'est plus là et on ne peux pas ne pas selectionner de valeur sinon le rapport ne ce lance pas.

    2/ Je n'ai pas encore essayé le point 2 je vais tenter dans la semaine je pense.

    3/ Par contre pour le dernier point il faut selectionner "Interactivity" dans "X-axis" de chart non ? Après on choisis l'évenement mouse click, action hyperlink. On crée un lien vers un rapport, la j'ai donc remis mes autres paramètres via le drill through, mais pour le paramètre supplémentaire comment je lui indique qu'il doit prendre la valeur qui à été cliqué ?

    Et pour caché les paramètres en cascade j'ai essayé cela ne fonctionne pas.
    Du coup ce que j'ai fais c'est que j'ai crée des paramètres "normaux" sur les rapports suivant, sans les mettres en requis et en les mettants en hidden. Ce qui fonctionne, mais implique donc qu'on lance toujours le rapport N avant de lancer les autres rapports alors ?

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bonjour,

    Je me suis penché sur le point avec la liste.

    J'ai crée ma liste, maintenant si j'ai bien compris il me suffit de cliquer sur Hyperlink dans propriété (pour l'objet liste bien sur) ? Et d'ensuite créer un drill through en mettant mon parametre. Donc je relancerais vers le même report design ?

    Du coup toujours la même question comment indiquer à BIRT qu'il doit selectionner la valeur cliqué ? Et aussi, cette possibilité avec le drill through lorsque l'on clique sur un element de la liste, cela ne va t'il pas ouvrir un nouveau rapport ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    En faite je viens de me rendre compte que c'est normal que mon code ne fonctionne pas, vu que si c'est un blank il prend comme même la valeur params["SelectEntiteSupSup"].value vu que c'est différent de null. Non ?
    Du coup il faudrait que je test les deux possibilité en même temps. Je pars donc sur cette piste

    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
    19
    20
    21
    if (params["SelectEntiteSupSup"].value !=null) {
     if (params["SelectEntiteSupSup"].value != undefined) {
     params["SelectEntiteSupSup"].value; 
    }
    } else if (params["SelectEntiteSup"].value != null) {
     if (params["SelectEntiteSupSup"].value != undefined) {
    params["SelectEntiteSup"].value;
    }
    } else '00000'
     
    ou encore 
     
    if (params["SelectEntiteSupSup"].value !=null) {
    if (params["SelectEntiteSupSup"].value != '') {
     params["SelectEntiteSupSup"].value; 
    }
    } else if (params["SelectEntiteSup"].value != null) {
    if (params["SelectEntiteSupSup"].value != '') {
    params["SelectEntiteSup"].value;
    }
    } else '00000'
    En essayant encore plusieurs possibilité ' ' ou " " enfin bref je ne comprend pas du coup..

    Mais ça ne fonctionne encore pas

  6. #6
    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
    Hello,

    1/ Si on souhaite appliquer deux conditions sur un même paramètre, il faut bien sûr mettre un "ET" logique entre les 2 sinon impossible que ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (params["A"].value!=null && params["A"].value!=""){
      params["A"].value;
    }else if (params["B"].value!=null && params["B"].value!=""){
      params["B"].value;
    }etc...
    Il ne faut pas rester bloqué sur des expressions complexes mais plutôt découper le problème. Par exemple créer temporairement des textes dynamiques dans le rapport pour vérifier les conditions:
    créer un texte dynamique avec pour expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Is null="+(params["A"].value!=null)
    puis créer un autre texte dynamique avec pour expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Is empty="+(params["A"].value!="")
    Idem avec paramètre B, C etc.
    En voyant ce qu'il affiche dans ces textes tu trouveras rapidement ce qui ne va pas dans l'expression du dataset.

    2/ Pour ce qui est de la liste oui c'est bien cela: un drill-through en sélectionnant le même .rptdesign. ça fonctionne très bien, j'appelle ça un "auto-drill" Il n'ouvrira pas de nouveau rapport si tu coches l'option de drillthrough qui va bien: "Show target report in"-> "Same frame".

    3/ Pour connaitre la valeur cliquée dans la liste: quand on renseigne l'expression du mapping des paramètres dans le drillthrough, la liste des champs du dataset associé à la liste est proposée. Comme dans l'image postée ci dessous.

    4/ Pour le drill dans le graphe, je reconnais que c'est plus coriace. perso j'utilise le plus souvent l'interactivité de la série, pas de l'axe. ça dépent du type de graphe et de ce que l'on souhaite faire, mais la plupart du temps c'est la série qui nous intéresse pour le drill. Ce sera plus simple avec un exemple: clique sur ce rapport: l'interactivité des bulles est gérée sur la série en faisant:

    Series -> Value (Y) Series ->Interactivity -> Action:Hyperlink -> Add -> Edit Base URL -> Drillthrough.

    Pour lier le paramètre "Country", dans l'expression builder on a accès aux champs du dataset du graphe:

    Nom : drill-chart.png
Affichages : 1695
Taille : 61,4 Ko

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Un grand merci !

    Je n'avais pas pensé pour le graph à utilisé les valeurs de la série. Effectivement c'est bien plus simple, ça ne me proposais pas les colonnes du graphique autrement.

    Je ferais un point quand j'aurais finis, pour montrer ce que j'ai utilisé et voir au cas où si j'ai encore quelque soucis.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bon du coup voilà ce que j'utilise maintenant.

    Pour selectionner le paramètre en fonction de ce qui à été mis dans les deux paramètres. J'ai mis ce code dans tout mes data set comportant ce parametre. ça fonctonne donc si je ne selectionne pas des valeurs ou si je met "null value" !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if (params["SelectEntiteSupSup"].value !=null &&  params["SelectEntiteSupSup"].value != ""){
     params["SelectEntiteSupSup"].value; 
    } else if (params["SelectEntiteSup"].value != null && params["SelectEntiteSup"].value != "") {
    params["SelectEntiteSup"].value;
    } else '00000'
    Dans mon premier rapport trois parametre sont obligatoire : le mois, l'année et l'indicateur désiré. La selectionne de entitesup ou entitesupsup n'étant donc pas obligatoire. J'ai ensuite une liste qui prend les libellés des entites, avec la fonction hyperlink si je clique sur un rapport cela me renvois un autre rapport (généré dans la même fenetre) en plaçant tout les parametres dans le second rapport et avec la valeur cliqué en paramètre. J'ai mis tout les paramètres en "hiden" donc ils ne s'affichent pas pour l'utilisateur .

    J'ai aussi crée la même liste mais qui permet d'affiché le niveau encore en dessous, et j'ai crée dans ma requete sql me servant à alimenté la liste une condition pour qu'au dernier niveau la liste n'affiche plus rien. J'ai du faire ça manuelement avec le "IN (code1, code2,code3, ..., codeN) pas très pratique mais pas trouvé mieux . En tout ca ça fonctionne, c'est ce qui compte j'ai envie de dire.
    J'ai également crée une deuxième liste avec un lien qui me ramene vers le premier rapport aussi, si l'utilisateur veux changer le mois, l'année ou l'indicateur.

    Maintenant j'ai deux petit soucis avec les graphiques.

    Lorsque je ne met pas de minimum, BIRT prend un minimum assez aléatoire, qui ne me convient pas, je voudrais qu'il prenne 0 si dans le chart il n'y a pas de valeur négative. Jusque la simple suffit de mettre "0" en min dans les propriétés du graphique. Mais selon l'indicateur choisis je peux avoir des valeurs négative ! Donc serait il possible de parametrer le minimum ? A la même ocassion le maximum, même si les valeurs auto rendent assez bien.

    Aussi pour les labels, lorsque j'ai un "0" comme valeur le label de la serie s'affiche juste a coté de mon label de l'axe X (vu que j'utilise un graphique en barre avec l'option flip axis). Ce qui fais donc que c'est illisible :/. Y a pas un moyen de le mettre plus à droite ? J'ai essayé de mettre "20" dans inset point left, ce qui fais que tout mes labels de valeur de série sont mis un peu plus à droite, SAUF ceux pour lesquels la valeur est 0
    Comprend pas pourquoi ça ne fonctionne pas bien

    Le rapport que tu m'as envoyé au dessus est un rapport qui à été crée à partir de birt ?

  9. #9
    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
    Et bien parfait, ça semble commencer à prendre forme . Oui le rapport lié plus haut a bien été réalisé avec le designer BIRT Eclipse.

    1/décalage des labels

    Des soucis d'affichage avaient été évoqués dans ce topic, mais je ne savais pas qu'il y avait un problème spécifique avec les valeurs 0. Peut être pourrais tu remplacer les valeurs à 0 par un truc genre 0.001 dans le "Dataset binding" du graphe, et afficher une valeur arrondie pour que ça ne se voit pas?

    2/Min-Max
    Oui on peut affecter le min-max des axes par script, dans la méthode "beforeGeneration" du graphe en question. Par contre les scripts des graphes sont nettement plus difficiles que les autres aspects de BIRT, il vaut mieux éviter de trop en faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function beforeGeneration( chart, icsc )
    {
    importPackage( Packages.org.eclipse.birt.chart.model.data.impl );
     
    	var min=getParameterValue("min"), 
    		max=getParameterValue("max"), 
    		xAxis=chart.getBaseAxes()[0],
    		yAxis = chart.getOrthogonalAxes( xAxis, true)[0],
    		yscale = yAxis.getScale();
     
    	yscale.setMax( NumberDataElementImpl.create(parseFloat(max)) );
    	yscale.setMin( NumberDataElementImpl.create(parseFloat(min)) );
    	yAxis.setScale(yscale);
    }
    Tu peux également calculer le min du dataset dans une variable pour éviter d'embêter l'utilisateur avec trop de paramètres, mais ça se complique.

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bonjour,

    Oui j'étais déjà tombé sur cette discussion. Mais j'avais déjà essayé de modifier ça, mais ça ne fonctionnais pas. Je vais tester pour le 0,01 dès que j'en aurais l'occasion.

    Par contre pour le code, je ne suis pas sûr d'avoir compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function beforeGeneration( chart, icsc )
    {
    importPackage( Packages.org.eclipse.birt.chart.model.data.impl );
     
    	var min=getParameterValue("min"), 
    		max=getParameterValue("max"), 
    		xAxis=chart.getBaseAxes()[0],
    		yAxis = chart.getOrthogonalAxes( xAxis, true)[0],
    		yscale = yAxis.getScale();
     
    	yscale.setMax( NumberDataElementImpl.create(parseFloat(max)) );
    	yscale.setMin( NumberDataElementImpl.create(parseFloat(min)) );
    	yAxis.setScale(yscale);
    }
    var min=getParameterValue("min"),
    ça nécessite donc un parametre nommé min que l'utilisateur devras rentrer ? Même chose pour le max alors ? Le problème étant que le min n'est pas connu de l'utilisateur, ni le max.

    Je ne comprend pas les trois lignes suivante :
    xAxis=chart.getBaseAxes()[0],
    yAxis = chart.getOrthogonalAxes( xAxis, true)[0],
    yscale = yAxis.getScale();

    Enfin si j'ai bien compris, on crée une variable xAxis, yAxis, yscale qui on les valeurs déjà prédéfinis dans le graphique c'est ça ?

    Ensuite il me semble que l'on affecte juste la valeur par rapport au paramètre plus haut.

    Mais s'il s'agit bien de paramètre que l'utilisateur doit rentrer, cela ne me va malheureusement pas ^^". Créer un minimum et un max dans le data set ne me pose aucun soucis. Le seul soucis que j'ai c'est comment je l'affecte dans la variable "Min" et "Max" du coup ? Je dois quand même créer un parametre qui prend cette valeur ? Mais du coup je sais pas comment faire non plus..

  11. #11
    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
    Oui "min" et "max" sont ici 2 paramètres, mais ce n'est qu'un exemple et il est bien entendu possible de les remplacer par une variable globale ou une variable persistente caculée dans le dataset ou par script

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bonjour,

    Du coup l'utilisation d'un parametre n'est pas ce que je veux faire.

    J'essaie donc de crée une variable qui recupére le minimum et le maximum mais je n'y arrive pas à chaque fois j'ai l'erreur suivante
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    ReportDesign (id = 1): 
    + There are errors evaluating script "vars["MinMoisEntite"] = Math.min("Realmois");":
    Report variable"MinMoisEntite" does not exist 
    birt.core.JavascriptCommonError ( 1 time(s) )
    detail : org.eclipse.birt.report.engine.api.EngineException: There are errors evaluating script "vars["MinMoisEntite"] = Math.min("Realmois");":
    Report variable"MinMoisEntite" does not exist
    	at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1245)
    	at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1190)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask.initReportVariable(EngineTask.java:1913)
    	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:98)
    	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)
    	at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:937)
    	at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:973)
    	at org.eclipse.birt.report.service.actionhandler.BirtRunAndRenderActionHandler.__execute(BirtRunAndRenderActionHandler.java:76)
    	at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)
    	at org.eclipse.birt.report.presentation.aggregation.layout.EngineFragment.doService(EngineFragment.java:318)
    	at org.eclipse.birt.report.presentation.aggregation.AbstractBaseFragment.service(AbstractBaseFragment.java:76)
    	at org.eclipse.birt.report.servlet.BirtEngineServlet.__doGet(BirtEngineServlet.java:116)
    	at org.eclipse.birt.report.servlet.BaseReportEngineServlet.doGet(BaseReportEngineServlet.java:185)
    	at org.eclipse.birt.report.servlet.BaseReportEngineServlet.doPost(BaseReportEngineServlet.java:224)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
    	at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.eclipse.birt.report.servlet.BaseReportEngineServlet.service(BaseReportEngineServlet.java:116)
    	at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)
    	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
    	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)
    	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:360)
    	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
    	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
    	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
    	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
    	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    	at org.eclipse.jetty.server.Server.handle(Server.java:370)
    	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
    	at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
    	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
    	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: org.eclipse.birt.core.exception.CoreException: There are errors evaluating script "vars["MinMoisEntite"] = Math.min("Realmois");":
    Report variable"MinMoisEntite" does not exist
    	at org.eclipse.birt.report.engine.javascript.JavascriptEngine.evaluate(JavascriptEngine.java:295)
    	at org.eclipse.birt.core.script.ScriptContext.evaluate(ScriptContext.java:159)
    	at org.eclipse.birt.report.engine.executor.ExecutionContext.evaluate(ExecutionContext.java:789)
    	at org.eclipse.birt.report.engine.executor.ExecutionContext.evaluate(ExecutionContext.java:718)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask.initReportVariable(EngineTask.java:1907)
    	... 42 more
    Caused by: org.mozilla.javascript.JavaScriptException: Report variable"MinMoisEntite" does not exist
    	at org.eclipse.birt.report.engine.executor.ScriptablePageVariables.put(ScriptablePageVariables.java:72)
    	at org.mozilla.javascript.ScriptableObject.putProperty(ScriptableObject.java:1729)
    	at org.mozilla.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1531)
    	at org.mozilla.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1514)
    	at org.mozilla.javascript.gen.c1131._c0(<inline>:1)
    	at org.mozilla.javascript.gen.c1131.call(<inline>)
    	at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:398)
    	at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3065)
    	at org.mozilla.javascript.gen.c1131.call(<inline>)
    	at org.mozilla.javascript.gen.c1131.exec(<inline>)
    	at org.eclipse.birt.report.engine.javascript.JavascriptEngine.evaluate(JavascriptEngine.java:290)
    	... 46 more
    J'ai utiliser le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vars["MinMoisEntite"] = Math.min("Quantimois");
    avec ce code dans le script de mon graphique
    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
    19
    20
    21
    22
    23
    24
    function DataSetFiled( series, dataSet, icsc )
    {
    importPackage( Packages.org.eclipse.birt.chart.model.data.impl );
     
     	var premier=GetVariableValue("MinMoisEntite");
     	if (premier > 0) {
     	var min=0,
     		max=Row["MaxMois"],
    		xAxis=chart.getBaseAxes()[0],
    		yAxis = chart.getOrthogonalAxes( xAxis, true)[0],
    		yscale = yAxis.getScale();
    		} else 
    		var min=GetVariableValue("MinMoisEntite")
     		Row["MinMois"],
    		max=Row["MaxMois"],
    		xAxis=chart.getBaseAxes()[0],
    		yAxis = chart.getOrthogonalAxes( xAxis, true)[0],
    		yscale = yAxis.getScale();
    ;
     
    	yscale.setMax(parseFloat(max) );
    	yscale.setMin(parseFloat(min) );
    	yAxis.setScale(yscale);
    }
    J'ai essayé aussi avec le "beforeGeneration" mais cela me retournais une erreur similare à la première. Sauf que ça me disais Row (ou DataSetRow en fonction de ce que j'utilisais) n'est pas défini at..

    Bref j'arrive pas du tout. L'histoire des paramètres semble beaucoup plus simple au niveau conception, mais bien plus chiante pour l'utilisateur. Vu que j'ai 4 graphiques, dont minimum 2 qui peuvent avoir des valeurs négative mais il me semble que les 4 peuvent avoir des valeurs négative, pas sûr à 100%.
    ça veux dire que je devrais faire rentrer à l'utilisateur 8 autres paramètres. Enfin la du coup je dois créer 8 variables (si je trouve comment faire.) ça ne risque pas de peser trop lourd ?

    Merci de ton aide

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Bonjour,

    Pour les label qui s'affichent à coté de mon axe X j'ai essayé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (row["REALMOIS"]=0) {
     
    Math.round(0,01)
     
    } else row["REALMOIS"]
    Est ce quelque chose comme cela que tu avais en tête ? En tout cas cela ne fonctionne pas. Je te joins ce que ça me fais :

    Nom : label0.png
Affichages : 1481
Taille : 55,6 Ko

    Pour le minimum à 0 j'ai trouvé une solution très simple, mais qui rend moins bien. J'ai crée une deuxième série avec dans expression "0" ce qui fais que j'ai toujours 0 d'affiche sur mon axe X.
    Le problème c'est que ça espace mes barres (normal car il devrais y avoir 2 fois plus de barre mais la moitié ne sont pas visible.) alors que je voudrais quelque chose de peu espacé (j'ai mis l'espacement des barres à 10.)

    Voici ce que cela me fais pour le moment

    Nom : 0min.png
Affichages : 1427
Taille : 37,9 Ko
    Nom : 0minbis.png
Affichages : 1565
Taille : 43,0 Ko

Discussions similaires

  1. Utilisation du paramètre *Sender
    Par olivier4020 dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/12/2006, 09h22
  2. Utilisation des paramètres avec rowsource - 97 et 2003
    Par IntenseM3 dans le forum Access
    Réponses: 1
    Dernier message: 10/05/2006, 09h18
  3. Réponses: 2
    Dernier message: 21/09/2005, 17h23
  4. problème d'utilisation de paramètre
    Par pelelive dans le forum Access
    Réponses: 2
    Dernier message: 22/06/2005, 14h55
  5. [XSLT] Utilisation de paramètre
    Par stailer dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 10/05/2004, 14h49

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