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 18/04/2007, 14h40   #1
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Par défaut [XI] Progression d'une valeur entre 2 enregistrements

Bonjour,

Je viens de commencer des rapports avec Crystal Report.

Je cherche a calculer l'evolution entre 2 notes de modules d'un cours.

Mon rapport affiche les nom du module et le score. 2 modules specifiques d'un cours sont affiches avec leur scores.

Pour calculer l'evolution, j'ai cree un "criteria" EVOLUTION_DECIDER. Pour le moment, je n'ai reussi qu'a faire l'affichage d'un resultat du module et non de l'evolution. Je n'arrive pas a creer une deuxieme boucle qui mettrait le score de l'autre module (Module 1 - Introduction) dans une variable locale pretest. Pour ensuite pouvoir faire le calcul de l'evolution a renvoyer dnas EVOLUTION_DECIDER : (posttest_score/pretest_score) -1 = % de l'evolution

Code :
1
2
3
4
IF {CNV_PUB_CMI_REGISTRATION.TITLE}="Module 7 - Sommaire"
then LOCAL NumberVar posttest := {CNV_PUB_CMI_REGISTRATION.SCORE};
global NumberVar EVOLUTION_DECIDER := posttest;
EVOLUTION_DECIDER;
CNV_PUB_CMI_REGISTRATION.TITLE: correspond au titre d'un module
CNV_PUB_CMI_REGISTRATION.SCORE: correspond au score du module

Si vous avez une idee... Merci d'avance pour votre aide. S'il faut tout reprendre, n'hesitez pas non plus a me proposer autre chose !

Christine.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 17h17   #2
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Bonjour,
je n'ai pas bien compris votre problème mais s'il s'agit tout simplement d'afficher sous la forme d'un pourcentage l'evolution entre 2 valeurs, je vous donne un exemple (syntaxe basic) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
WhilePrintingRecords
Dim PastValue AS Currency
Dim NowValue AS Currency
Dim Progression AS Number
IF RecordNumber > 1 then
    PastValue = PreviousValue({FactureLigne.Montant})
    NowValue = {FactureLigne.Montant}
end IF
progression = 0
IF pastValue <> 0 then
   Progression = ((NowValue/PastValue)-1) * 100
end IF
Formula = progression
L'exemple affiche sous la forme d'un pourcentage l'evolution entre le précédent montant de la ligne courante et le montant en cours.
Bonne continuation.
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 18h29   #3
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Merci bcp pour la reponse aussi rapide.

Je decouvre le code de Crystal Report. Je ne sais pas encore bien definir les variables et if>then (2 conditions). Est-ce que vous avez un "tutoriel" sur le code de Crystal Report XI (je n'ai pas reussi a trouver) ?

J'ai essaye ca, mais sans trop de resultat:
Code :
1
2
3
4
5
6
7
8
9
10
11
WhilePrintingRecords
LOCAL NumberVar PastValue := 0;
LOCAL NumberVar NowValue := 0;
LOCAL NumberVar Progression := 0;
IF RecordNumber > 1 then
    (PastValue := PreviousValue({CNV_PUB_CMI_REGISTRATION.SCORE});
    NowValue := {CNV_PUB_CMI_REGISTRATION.SCORE};)
progression := 0;
IF pastValue <> 0
then Progression := ((NowValue/PastValue)-1) * 100;
global NumberVar EVOLUTION_DECIDER := progression;
Merci encore,
Christine.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 19h17   #4
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Le meilleur tutoriel Crystal c'est la doc et le forum de DVP
....
Le code que j'ai donné en syntaxe basic fonctionne car je l'ai testé sur un etat.
Pourquoi vouloir absolument ecrire la formule en syntaxe crystal alors que la syntaxe basic est plus claire à mon sens ....
Dans ta formule en syntaxe Crystal, la seule chose qui me choque à priori,
je crois que c'est PreviousValue en syntaxe Basic et Previous en syntaxe crystal.
Bonne continuation. (dans le pire des cas j'essaierai ton code demain pour voir ce qui cloche mais là je n'ai pas CR sous la main)

EDIT : il manque aussi le point virgule après le WhilePrintingRecords
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 10h58   #5
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Merci bcp pour les explications Syntaxe basic/crystal.

Apparemment, il manquait aussi un ; apres le then ().

Seulement, je ne comprends pas bien comment fonctionne le "record number" et "previous", car j'ai l'impression que "Previous({CNV_PUB_CMI_REGISTRATION.SCORE})" ne prends que le record du dernier module et non pas celui d'avant.

Par exemple, ce code me donne le resultat du dernier module !
Code :
1
2
3
4
5
6
7
8
WhilePrintingRecords;
LOCAL NumberVar PastValue := 0;
LOCAL NumberVar NowValue := 0;
LOCAL NumberVar Progression := 0;
IF RecordNumber > 1 then
    (PastValue := Previous({CNV_PUB_CMI_REGISTRATION.SCORE});
    NowValue := {CNV_PUB_CMI_REGISTRATION.SCORE};);
global NumberVar EVOLUTION_DECIDER := PastValue;
Merci encore...

Christine.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 11h53   #6
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Bonjour Christine,
Il me faut un peu plus d'informations :
Comment est construit ton etat ?
Quels sont tes groupes ?
Quels sont les elements en lignes détails ?
Un petit jeu de test ne serait pas non plus de trop pour étayer ton exemple.
Quel est exactement le résultat que tu veux obtenir !?

Dans mon exemple, je testais simplement l'evolution du montant de la facture (niveau ligne détail) par rapport au montant de la ligne précédente uniquement si on etait au moins sur la deuxième ligne (deuxième enregistrement).
ex donnée
Code :
1
2
3
4
5
ID      Montant        progression
1       100              0
2       120              20
3       140              16.7
4       100              -28.6
etc ....

Peut-être aussi que j'ai tout simplement mal compris ton problème, dans ce cas n'hesite pas à le détailler.
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 14h13   #7
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Je vais essaye de tt reprendre... Je pense que ton exemple est bon. J'ai juste pas encore compris ttes les subtilitees de CR

Je cherche a afficher 3 resultats pour un participant d'un cours.
- note du test 1
- note du test 2
- evolution entre test 1 et 2 = ((test2/test1)-1) * 100;
(test 1 et test 2 sont les meme tests mais fait avant et apres le cours par le participant)

J'ai donc creer 2 groupes:
- premier qui tri par personne
- 2eme qui tri par module (les test sont dans des modules, dans module 1 et module 7)
(je ne sais pas si cette info reponds a ta question)

header le premier group contient:
- nom du participant

header du 2eme gour contient:
- Titre du module
- Score du module

footer du 2eme ne contient rien

footer du premier contient:
- evolution de la note (= formula field EVOLUTION_DECIDER)

le design ressemble a:
Code :
1
2
3
4
5
6
Nom participant: [USERNAME]
____
Nom module: {TITLE}
[SCORE]
_______
evolution:[EVOLUTION_DECIDER]
ce qui donne en preview:
Code :
1
2
3
4
5
6
7
8
9
Nom participant: christine
____
Nom module: Module 1 - Introduction
67
 
Nom module: Module 7 - Sommaire
100
____
evolution:39%

Pour n'afficher que les modules dont j'ai besoin (module 1 et module 7), j'ai insere une ligne dans select expert "{CNV_PUB_CMI_REGISTRATION.TITLE} in ["Module 7 - Sommaire", "Module 1 - Introduction"]".

Merc bcp d'etre aussi patient!
Christine.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 14h28   #8
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
es-tu certaine qu'il n'y aura jamais plus de 2 notes dans ton module !?
Pourquoi un groupe module puisque celui-ci est le niveau de detail le plus bas
(et qu'apparemment un module = 1 note !?

En tout cas comme ton exemple est présenté et s'il y a toujours 2 modules avec chacun une note, la formule devrait fonctionner aussi bien en footer participant qu'en footer module.
encore une question, la note rattachée au module est dans la table module ou dans une table jointe !?
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 14h48   #9
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Il y a 7 modules dans le cours, 5 modules contiennent des tests. Je n'ai besoin que des modules 1 et 7 (pretest, posttest). Il n'y a qu'un seul score par module (les participants ne peuvent faire qu'une seule fois le test du module 1 et qu'une seule fois celui du module 7).

La table module contient nom du module et score du module:
{CNV_PUB_CMI_REGISTRATION.TITLE}
{CNV_PUB_CMI_REGISTRATION.SCORE}

Pour le choix du group module, j'avais repris un report existant. Si je met "Nom module: {TITLE} et [SCORE]" dans le group paricipant et non module:
design:
Code :
1
2
3
4
5
6
Nom participant: [USERNAME]
Nom module: {TITLE}
[SCORE]
____
_______
evolution:[EVOLUTION_DECIDER]
Preview: il n'y a plus qu'un seul module
Code :
1
2
3
4
5
6
Nom participant: christine
Nom module: Module 1 - Introduction
67
____
____
evolution:0
Si je met Evolution dans le footer module:
Design:
Code :
1
2
3
4
5
6
7
Nom participant: [USERNAME]
____
Nom module: {TITLE}
[SCORE]
____
evolution:[EVOLUTION_DECIDER]
_______
Preview, l'evolution s'affiche 2 fois, mais tjrs a 0...
Code :
1
2
3
4
5
6
7
8
9
10
Nom participant: christine
____
Nom module: Module 1 - Introduction
67
    evolution:0
 
Nom module: Module 7 - Sommaire
100
    evolution:0
____
est-ce que ca peut aider?
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 16h28   #10
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Si tu mets le champ {CNV_PUB_CMI_REGISTRATION.SCORE} en section détail
que t'affiche-t-il !?
Il doit y avoir une ligne par module, est-ce le cas !?

J'aurai bien regardé directement ton etat mais je n'ai pas CR11, je ne dispose que de la V10.
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 17h12   #11
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
oups, il doit y avoir une erreur !

En mettant le score dans "details", j'ai 6 fois le score affiche par module (6 fois 67 et 6 fois 100) !!

Il y a 6 questions dans les tests de ces modules. Est-ce qu'il y aurait un group ou autre chose que je n'aurai pas vu qui mettrais 6 fois les score des modules ? A l'origine, ce report montrait les reponses par questions de chaque participant.

Merci encore pout tout.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 17h44   #12
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Pour que ca fonctionne, il va falloir revoir la formule car ca ne peut pas coller avec les données que tu as.
je ne l'ai pas testé mais l'idée est là
-> Formule à placer en fin de groupe module
Si c'est la premiere rupture, on récupère la valeur et progression = 0
Si c'est la deuxième fois ou plus, on calcule progression, on écrase past et on affiche la progression .....


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WhilePrintingRecords
Global PastValue AS Number
Global Compteur AS Number
Global NowValue AS Number
Dim Progression AS Number
IF Compteur <> 0 Then
   NowValue = {FactureLigne.Montant}
   Progression = ((NowValue/PastValue)-1) * 100
   PastValue = {FactureLigne.Montant}
Else
   Compteur = 1
   progression = 0
   PastValue = {FactureLigne.Montant}
End IF
Formula = progression
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 18h13   #13
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Merci pour la nouvelle formule, mais j'obtiens encore 0.

Si je remplace "Formula = progression" par "formula=PastValue" dans la derniere ligne, j'obtiens le score du dernier module (si Formule est en fin de groupe personne).

Si Formule est en fin de groupe module et "formula=PastValue", j'obtiens les scores des modules.

Est-ce que ca viendrais du fait que le details affiche 6 fois les scores ?

Merci encore de m'aider avec ce truc tordu !
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 00h49   #14
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Vu que cette formule est placée en footer module, ca devrait marcher !
Je l'essaierai dans un vrai etat demain pour te dire si elle marche ou pas!
@+
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 08h56   #15
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
Bonjour,

As-tu eu le temps de regarder si cette formule marchait? Je ne sais pas ce que je peux essayer d'autre...

Merci encore pour toute l'aide.
Creess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 09h21   #16
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Je ne t'ai pas oublié.
Je suis un tout petit peu overbooké en ce moment.
Je regarde ça entre midi et 14H avec un jeu de test en CR10.
@+
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 11h35   #17
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 2
Points : 2
J'ai trouve pourquoi j'avais 6 fois le resultats du score test1 et 6 fois le resultats test2 en mettant [SCORE] dans details.

Et la formule que tu m'avais donne au tout debut fonctionne tres bien ! Celle ci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
WhilePrintingRecords
Dim PastValue AS Currency
Dim NowValue AS Currency
Dim Progression AS Number
IF RecordNumber > 1 then
    PastValue = PreviousValue({FactureLigne.Montant})
    NowValue = {FactureLigne.Montant}
end IF
progression = 0
IF pastValue <> 0 then
   Progression = ((NowValue/PastValue)-1) * 100
end IF
Formula = progression
Merci encore pour tout.

Christine.
Creess 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 06h28.


 
 
 
 
Partenaires

Hébergement Web