Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/03/2011, 14h32   #1
Nouveau Membre du Club
 
Femme Marie
Ingénieur développement logiciels
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Nom : Femme Marie
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 28
Points : 28
Par défaut Tableau croisé / Script / Filtre

Bonjour,

J'aimerais créer un filtre pour mon tableau croisé via script dans le onPrepare. Mon problème c'est que j'ai trouvé des exemples pour les tableaux mais ils ne fonctionnent pas avec les tableaux croisés.

Je pense savoir comment créer le filtre mais je ne trouve pas comment l'ajouter à mon tableau croisé :

Code :
1
2
3
4
5
6
7
// je récupère la valeur de mon paramètre
var statut = reportContext.getParameterValue("statut");
 
// je crée mon filtre
var filterCondition = StructureScriptAPIFactory.createFilterCondition();
filterCondition.setExpr("dimension['Etablissement']['statut_etablissement']"); filterCondition.setOperator("eq");
filterCondition.setValue1("Conventionné");//params[\"statut\"]
et pour l'ajouter à mon tableau croisé j'ai testé plusieurs choses qui ne fonctionnent pas :
Code :
1
2
3
var filterKey = filterCondition.getStructure();
var filterItem = SimpleElementFactory.getInstance().createFilterCondition( filterKey );
this.addFilterCondition( filterItem );
ou encore :
Code :
1
2
var cube = reportContext.getDesignHandle().findCube("masse_salariale");
cube.addFilter(filterCondition);
Est-ce que quelqu'un saurait me dire si je suis dans la bonne voie et ce qui me manque ? Ou bien me donner une référence vers une documentation détaillée du script des filtres avec les tableaux croisés.

Bonne après-midi,

--
Marie
shintaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h02   #2
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut Usage du Cube

Hello,

Le cube est hérité ou est dans le rapport?

Ce cube c'est généré avec un .datadesign?

Sinon , il y a un onglet filtres dans le Cube et dans le Crosstab , vous pouvez filtrer à partir d'un paramètre par là , pas besoin de script.
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h13   #3
Nouveau Membre du Club
 
Femme Marie
Ingénieur développement logiciels
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Nom : Femme Marie
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 28
Points : 28
Le cube est hérité.

Il est créé dans un .datadesign.

Oui si je pouvais filtrer directement par l'onglet ce serait mieux. Mais dans mon cas je ne pense pas que ce soit possible. Je m'explique : je veux ajouter une condition seulement dans certains cas et pas dans d'autres. Si je passe par l'interface voilà ce que je fais :
  • Cible : Détails
  • Condition : dimension["Etablissement"]["statut_etablissement"]
  • Opérateur : Egal à
  • Condition :
    Code :
    1
    2
    3
    4
    if (params["statut"].value == 'Tous')
    	// ici je ne veux pas de filtre
    else
    	params["statut"].value;

Je ne peux pas filtrer la valeur 'Tous' car elle ne se trouve pas ds mon cube. Je l'ai ajouté "à la main" pour donner le choix à l'utilisateur de pouvoir tout sélectionner. J'espère que je suis assez claire.

J'ai aussi essayé de mettre ça ds le résultat :
Code :
1
2
3
4
if (params["statut"].value == 'Tous')
	dimension["Etablissement"]["statut_etablissement"];
else
	params["statut"].value;
Ca ne marche pas vraiment. Je pense pas que ce soit nécessaire que je détaille ce problème.

C'est pourquoi j'ai pensé au script.

--
Marie
shintaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h02   #4
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Bonjour,

J'ai pu produire le comportement que tu cherches. Ta dernière idée est la bonne, l'erreur se trouve sans doute dans la syntaxe ou les fonctions utilisées.

Tu peux télécharger mon exemple ici (tu peux le tester avec les valeurs de paramètre "TOUS" ou "Italy", par exemple).

Les différences notables :
  • J'ai mis le filtre dans la section "data set" du data cube ; si ton cube est hérité, et que tu ne peux pas le modifier, la syntaxe sera différente, mais le principe est le même.
  • J'utilise la fonction BirtComp.equalTo() au lieu de l'opérateur "==" ;

En tout cas, tu n'es pas loin.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h06   #5
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut multi valeur

Le paramètre en question est un paramètre multi valeur?

Si oui , il retourne un objet et non un string.

params["CountryParameter"].value.join();

passer par ce genre de script

http://blog.zenika.com/index.php?pos...eurs-multiples
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h19   #6
Nouveau Membre du Club
 
Femme Marie
Ingénieur développement logiciels
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Nom : Femme Marie
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 28
Points : 28
@nicolas.1.vives

Je vais tester ton rapport. J'en profite pour expliquer pourquoi je n'ai pas utiliser cette méthode. Si dans mon premier crosstab je fais ce que tu dis ça fonctionne. Mais si je c/c ce crosstab alors ça ne fonctionne plus (erreur génération état ...). Bref dès que j'ai deux conditions ou plus identiques ça crash. Mais je vais quand même regarder par là.

@Stephan

Non ce n'est pas un paramètre multi valeur. Il s'agit d'une liste avec un seul choix possible.
shintaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h42   #7
Nouveau Membre du Club
 
Femme Marie
Ingénieur développement logiciels
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Nom : Femme Marie
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 28
Points : 28
@nicolas.1.vives

Ci-joint ton fichier avec un filtre sur les dimensions, qui ne fonctionne pas. J'ai mis l'extention en .txt car le site ne voulait pas du rptdesign, je ne sais pas trop pourquoi.

Sinon j'ai essayé un nouveau code pour le script :

Code :
1
2
3
4
5
6
7
8
var coldim = crosstab.getColumnLevels().get(0);
 
var filterCondition = StructureScriptAPIFactory.createFilterCondition();
filterCondition.setExpr("dimension['Etablissement']['statut_etablissement']"); 
ilterCondition.setOperator("eq");
filterCondition.setValue1("Conventionné");
 
coldim.addFilterCondition(filterCondition);
Mais ça ne marche toujours pas. Je suis pas sure que j'utilise la bonne méthode pour instancier un filtre.

Je continue de chercher.

Merci pour vos réponses.

--
Marie
Fichiers attachés
Type de fichier : txt CrossTabFiltreDynamique.txt (33,0 Ko, 2 affichages)
shintaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h54   #8
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut Trouvé.

J'ai rajouté un filtre sur le Crosstab.

[GEO/COUNTRY] LIKE

if (params["Pays"].value == 'All') { '%' }
else { params["Pays"].value }

ça marche nickel.
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 17h02   #9
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Moi j'ai continué sur l'état que tu viens de poster.
J'ai cru voir (j'ai eu des problèmes pour ouvrir le fichier) que dans la condition du filtre tu utilises la syntaxe "dimension["Pays"]["COUNTRY"]" pour désigner la donnée. Cette syntaxe est utilisée quand tu utilises les éléments de la catégorie "Current Data Cube" dans l'expression builder.
Moi j'ai fait la même chose avec la catégorie "Available Column Bindings", qui produit la syntaxe "data["COUNTRY"]"... et ça marche.

Remplace l'un par l'autre et regarde. Si ça ne marche toujours pas, j'aurais besoin de plus d'éléments pour comprendre tes erreurs (analyse du retour d'erreur, explication de ta procédure - est ce que tu fais des copiés-collés, etc).

Bon courage.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 17h06   #10
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut Oui

Effectivement , je pense que Nicolas a raison. Il faut filtrer le Crosstab et pas le Cube car hérité.

donc data["..."] ( le binding ) à la place de dimension["..."] ( membre du cube ).

les 2 API sont très similaires , mais c'est pas la même chose , le Crosstab est l'image du Cube , ce que vous voulez faire c'est filtrer l'image , pas sa source ( le cube Actuate est déjà généré et monté en mémoire lors de son usage comme source ).
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 17h20   #11
Nouveau Membre du Club
 
Femme Marie
Ingénieur développement logiciels
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Nom : Femme Marie
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 28
Points : 28
@nicolas.1.vives & Stephan

En remplaçant l'un par l'autre chez moi ça ne fonctionne pas. Je trouve ça bizarre. Mais mon code :
Code :
1
2
3
4
if (params["statut"].value == 'Tous')
	dimension["toto"]["tata"];
else
	params["statut"].value;
ne fonctionne pas. En fait il ne fonctionne pas toujours.

Du coup je viens de le remplacer par :
Code :
1
2
3
4
if (params["statut"].value == 'Tous')
	'%';
else
	params["statut"].value;
et là ça fonctionne.

Je ne sais pas pourquoi j'ai pas pensé à l'opérateur LIKE ... j'ai testé beaucoup de choses improbables mais pas ça. Tout de même je trouve ça étrange que ça ne fonctionne pas avec l'opérateur égal. Cependant je suis trop débutante pour comprendre le fonctionnement interne des tableaux croisés / cubes / dimensions pour le moment.

Merci à vous deux en tout cas !

--
Marie
shintaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h02.


 
 
 
 
Partenaires

Hébergement Web