Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports
Crystal Reports Forum d'entraide sur Crystal Reports. Avant de poster --> FAQ Crystal, Tutoriels Crystal
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 25/02/2011, 14h41   #1
Futur Membre du Club
 
Pierre Granouillet
Inscription : septembre 2010
Messages : 93
Détails du profil
Informations personnelles :
Nom : Pierre Granouillet

Informations forums :
Inscription : septembre 2010
Messages : 93
Points : 19
Points : 19
Par défaut Affichage 1 seul résultat / valeurs multiples

Bonjour,

j'aimerais afficher un résultat dans une formule en fonction de ce qui se trouve dans le champ d'une base de données (contenant donc plusieurs valeurs).

Je m'explique: le champ de ma BDD peut contenir 3 résultats : OK, ALARME ou REJET.

Si on a au moins 1 REJET, le résultat doit être "REJET". Sinon, si on a au moins 1 alarme, le résultat doit être "ALARME". Sinon c'est "OK.

Quelques exemples:

OK
OK
OK
OK
...
-> le résultat affiché doit être "OK" ou

OK
OK
ALARME
REJET
-> le résultat affiché doit être "REJET" (en fait dès que REJET

Je ne pense pas qu'on puisse le faire avec un champs résumé étant donné qu'il s'agit d'une chaine ...

Quelqu'un aurait-il une idée?

Merci d'avance.
pierregr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 16h26   #2
Membre Expert
 
Avatar de luc_chivas
 
Inscription : avril 2004
Messages : 894
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 894
Points : 1 049
Points : 1 049
bonjour

formule dans ta section détail

Code :
1
2
3
4
5
6
7
8
whileprintingrecords;
SELECT {monchamp]
Case 'REJET' :
BooleanVar R:=1;
Case 'ALARM' :
BooleanVar ALARM:=1;
DEFAULT :
BooleanVar OK :=1 ;
Formule à l'endroit ou tu veux le résultat

Code :
1
2
3
4
5
6
whileprintingrecords
NumberVar REJET;
NumberVAR ALARM;
NumberVAR OK;
 
IF ALARM then 'ALARM' else IF REJET then 'REJET' else 'OK'

Vérifie la syntaxe et autres, je n'ai pas CR sous la main... c'est dans cet esprit

ne pas oublier de reinitaliser les variables en entête
__________________
Luc
luc_chivas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 16h43   #3
Membre habitué
 
Inscription : juin 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 96
Points : 114
Points : 114
Si j'ai bien compris tu n'affiche pas tous les enregistrements détails, la visibilité commence donc à une section de groupe.
Tu fais une formule {@tri} qui vaut 1 pour OK, 2 pour ALARME et 3 pour REJET.
Puis,si ta première section de groupe visible est le pied de groupe tu tries les enregistrements en tri croissant de {@tri} (décroissant si c'est l'en tête de groupe qui est visible, comme tu veux )
et tu mets ton champs tel quel dans ta première section de groupe visible, oh surprise il affiche le bon
GaelleH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 18h29   #4
Futur Membre du Club
 
Pierre Granouillet
Inscription : septembre 2010
Messages : 93
Détails du profil
Informations personnelles :
Nom : Pierre Granouillet

Informations forums :
Inscription : septembre 2010
Messages : 93
Points : 19
Points : 19
Bonsoir,

merci pour vos réponses. GaelleH, Malheureusement, je n'avais pas précisé que je voulais intégrer ce résultat dans un tableau croisé, donc je ne peux pas utiliser ta solution.

Du coup j'ai adopté pour celle de luc_chivas. Par contre j'ai plusieurs problèmes:

1- lorsque je mets ma formule en place, tout ce qui est après la première ligne du "case" n'est pas considéré comme faisant partie de la formule.
J'ai résolu ce problème en déclarant les variables comme des numériques et en incrémentant:

Code :
1
2
3
4
5
6
7
8
9
Global NumberVar R;
Global NumberVar limite;
Global NumberVar OK;
 
whileprintingrecords;
SELECT {mon_champ}
Case "rejet" : R:=R + 1
Case "limite" : limite:=limite + 1
DEFAULT : OK :=OK + 1
Par contre je ne retombe pas sur mes pieds au niveau de la formule de l'affichage car j'obtiens toujours "/" même si les valeurs ne sont pas toutes à 0:

Code :
1
2
3
4
5
6
7
8
Global NumberVar R;
Global NumberVar limite;
Global NumberVar OK;
 
IF R >= 1 then "Insatisfaisante" else
  IF limite >= 1 then "Acceptable" else
    IF OK >= 1 then "Satisfaisante" else
    "/"
pierregr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 10h22   #5
Membre habitué
 
Inscription : juin 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 96
Points : 114
Points : 114
Citation:
Envoyé par pierregr Voir le message
GaelleH, Malheureusement, je n'avais pas précisé que je voulais intégrer ce résultat dans un tableau croisé, donc je ne peux pas utiliser ta solution.
Si tu veux une sélection seulement des enregistrements intéressants pour le tableau croisé il faut utiliser la formule de sélection de groupe ( maximum({@tri},{tongroupe}) = {@tri}).

Citation:
Envoyé par pierregr Voir le message
Du coup j'ai adopté pour celle de luc_chivas. Par contre j'ai plusieurs problèmes:
1- lorsque je mets ma formule en place, tout ce qui est après la première ligne du "case" n'est pas considéré comme faisant partie de la formule.
Tu dois entourer tout le pavé du case d'une parenthèse ouvrante et fermante et mettre le ";" aprés la fermante.
GaelleH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 15h18   #6
Futur Membre du Club
 
Pierre Granouillet
Inscription : septembre 2010
Messages : 93
Détails du profil
Informations personnelles :
Nom : Pierre Granouillet

Informations forums :
Inscription : septembre 2010
Messages : 93
Points : 19
Points : 19
Citation:
Envoyé par GaelleH Voir le message
Si tu veux une sélection seulement des enregistrements intéressants pour le tableau croisé il faut utiliser la formule de sélection de groupe ( maximum({@tri},{tongroupe}) = {@tri}).



Tu dois entourer tout le pavé du case d'une parenthèse ouvrante et fermante et mettre le ";" aprés la fermante.
Merci pour ta réponse. Je n'ai pas réussi par la solution de luc_chiavas, mais la tienne fonctionne en tous cas.
pierregr 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 17h00.


 
 
 
 
Partenaires

Hébergement Web