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 :

Report parameter en multi value ne passe pas


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 25
    Points : 18
    Points
    18
    Par défaut Report parameter en multi value ne passe pas
    Bonjour,
    jai un probleme avec birt:
    jai un dataset avec comme requete quelque chose du type:
    "select ...from ... where ..?..?.. union select ..from...where ...?..?..."

    => les "?" sont les parametres que recoit le dataset par lintermediaire de reports parameters.

    Le 3eme parametre est issu d'une listbox dans laquelle l'utilisateur peut choisir des valeurs multiples (case "multi value" cochee) et le champ sur lequel porte ce parametre n'est pas une colonne dans le resultat de la requete. et ca ne fonctionne pas! (tous les autres parametres fonctionnent car ils sont a valeur unique)

    jai essaye dintegrer du javascript dans le parametre du dataset afin de modifier le parametre quil recoit mais rien ny fait. Pour une valeur ca marche, mais pour plusieurs valeurs ca ne marche pas (lexecution du rapport se passe bien, mais aucune donnees nest rapatriee).
    Jai aussi essaye de mettre comme valeur de parametre dans le dataset quelquechose du genre: params["toto"].value.join(",") ;
    mais ca ne marche que lorsque je selectionne une seule ligne dans ma listbox.

    -comment faire?

    -quelle type de donnee est un 'params["toto"].value' ? un tableau de string a une dimension ou une chaine de string?

    -quelle type de donnee doit recevoir un parametre dun dataset? un tableau de donnee (1 ou plusieurs dimensions?) ou une chaine de caractere?

    merci

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Déjà, ton explication est vague, le fait d'avoir mis des points partout dans ta requête la rend illisible, en effet, tu aurais pu au moins écrire une requête bidon qui ressemble à ceci (c'est beaucoup plus clair) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Colonne1, Colonne2 FROM MaTable WHERE Nom LIKE ? OR Nom LIKE ?
    UNION
    SELECT Colonne1Bis, Colonne2Bis FROM MaTableBis WHERE Intitule IN (?)

    Essaye d'être plus précis par la suite stp.

    Tu devrais lire ceci :
    http://business-intelligence.develop...ltiplessimuler

    Un paramètre peut être de n'importe quel type, par défaut c'est un Object s'il n'est pas déclaré dans le rapport. S'il est déclaré, c'est le type que tu as choisi (en général String).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    c'est peut être un peu tard pour répondre, mais je viens d'avoir le même problème (en tout cas j'en ai l'impression) et j'ai trouvé ça sur internet, a tester.

    dans le beforeOpen du dataset paramétré

    Code javascript : 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
     
    importPackage(Packages.java.io)
    importPackage(Packages.java.util)
    importPackage(Packages.org.eclipse.birt.report.model.api)
    importPackage(Packages.org.eclipse.birt.report.engine.api)
    importPackage(Packages.org.eclipse.birt.report.engine.api.script.element)
     
    //fos = new java.io.FileOutputStream("C:\\demo_multivalue_debug.txt"); //Logging
    //printWriter = new java.io.PrintWriter(fos); //For Debugging
    //printWriter.println("ReportDesign.initialize"); 
     
    countryParamName = "paramCountry" //report parameter
    paramCountryLength = reportContext.getParameterValue(countryParamName).length;
     
    this.queryText = "Select * from customers "
    this.queryText += " where  country IN ("
     
    if (paramCountryLength > 0 ) {
    	for (i = 0; i < paramCountryLength; i ++ ) {	
    		thisCountry = reportContext.getParameterValue (countryParamName)[i];
    		if (thisCountry.equals("All Countries")){
    			this.queryText = "Select * from customers"
    			return;
    		}
    		thisCountryQuote = "'" + thisCountry + "'";
    		//printWriter.println("selected param value:"  + thisCountryQuote);
    		this.queryText += thisCountryQuote;
    		if ( i  != paramCountryLength -1  ) {
    			this.queryText += ","
    		}
     
    	}
    }
    this.queryText += " ) "
    this.queryText += " ORDER BY country " 
     
    //printWriter.close();

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    testé et approuvé, tu peux même mettre comme requête de base dans ton dataSet

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select null
    from null;

    Edit : Par contre, si tu fais tes requêtes comme moi (et beaucoup d'autre gens), c'est à dire que tu passes a la ligne et insères des tabulations pour indenter, alors il faut que tu rajoutes un espace a la fin de chaque ligne sinon ça te relève une erreur.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut Amélioration
    Le comportement du IN a été résolu en BIRT 2.5. En version inférieure faut passer par un Filtre sur le Dataset.

    Note pour celui qui a publié la "question" , merci de :

    1. Mettre dans la question la version de BIRT utilisée ( on est pas devins )

    2. D'essayer d'être un peu plus clair

    3. De rajouter un bout de méthode et de politesse , tous les gens ici sont volontaires et répondent sur leur temps perso.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    :s je suis en 2.5.2 et j'ai pas réussi avec le IN mais bon j'ai réussi avec le petit script que j'ai mis donc ça me suffit

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    Bonjour, je me permets de reouvrir le post car j'ai le meme probleme et je ne trouve pas la solution.
    Je resume :
    j'ai paremetre de rapport qui est un liste a choix multiple (alimenté par un dataset)
    je souhaite utiliser les valeurs (une ou plusieurs) dans ma requete sql de mon dataset. Lorsque je coche la case 'valeur multiple' dans mon parametre de rapport je ne peux plus le binder avec un parametre de dataset.
    J'ai vu dans un post plus haut qu'il etait possible d'utiliser IN dans BIRT v2.5.
    Quelqu'un peux m'expliquer me donner une piste sur comment faire?
    J'aimerai eviter de passer par un script sur le dataset.
    Merci de votre aide.
    Je suis en BIRT version2.5.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select 
    	count(*) as NumByRoute,
    	NO_ROUTE as NomRoute,
    	h_supplierid1 as 'CodeFournisseur',
    	h_suppliername as 'NomFournisseur'
    from idx 
    where str_to_date(SUBSTRING(date_lot,1,8),'%Y%m%d') 
    between ? and ?
    and typedoc like 'mac%'
    and date_lot is not null
    and h_supplierid1 IN ?
    group by NomRoute, h_suppliername;

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Désolé pour la réponse un peu tardive, mais je viens d'être confronté au problème des paramètres à valeurs multiples.

    J'ai réussis à résoudre mon problème en faisant un petit script tout simple dans le beforeOpen de mon dataset :

    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
     
    cpParamName = "le_nom_du_parametre";
    cpParamSize = reportContext.getParameterValue(cpParamName).toString().length();
     
    cpValue = reportContext.getParameterValue(cpParamName);
     
    this.queryText = "Select count(*) from ma_base "
    this.queryText += " where  ce_que_je_veux IN ("
     
    cut = 0;
    for (i = 0; i <= cpParamSize ;i++)
    {
    	if (cpValue.substring(i,i + 1) == ";")
    	{
    		this.queryText += "\"" + cpValue.substring(cut,i) + "\"";
    		if (i != cpParamSize - 1)
    			this.queryText += ",";
    		cut = i + 1;
    		i++;
    	}
    }
     
    this.queryText += ")"
    Dans mon cas, je dois remplir mon paramètre avec comme délimiteur un ; et en ajoutant un autre ; à la fin, comme dans l'exemple suivant :

    value1;value2;value3;value4;

    Ce qui donne une requête formaté comme ça :

    Select count(*) from ma_base where ce_que_je_veux IN ("value1","value2","value3","value4")

    Voila, j'éspère en avoir aidé quelques-uns d'entre vous.

Discussions similaires

  1. [2.5.1] Default Value dans un report parameter
    Par Hoegaarden dans le forum BIRT
    Réponses: 5
    Dernier message: 09/02/2010, 15h06
  2. Réponses: 0
    Dernier message: 10/09/2009, 10h33
  3. [SSRS][2k5] parameter multi-value
    Par ahmedz dans le forum SSRS
    Réponses: 2
    Dernier message: 07/05/2008, 11h13
  4. [2.2.1] Report parameters - Allow multiple values
    Par JahPil78 dans le forum BIRT
    Réponses: 4
    Dernier message: 26/02/2008, 18h36
  5. Réponses: 1
    Dernier message: 24/08/2007, 10h48

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