Aiuto su report

mercoledì 19 marzo 2008 - 19.39

trinity Profilo | Guru

salve ragazzi,
in allegato a questo post vi è un'immagine di un report con grafici che ho creato io in vb net 2005 con il crystal report.net integrato a visual studio.


1280x1024 123Kb


Se vedete l'immagine ci sono due grafici per due anni il 2006 ed il 2005 io vorrei che si creasse un solo grafico dove venissero visualizzati sia i le colonne dell'anno 2006 che del 2005.

Si può fare con il crystal report .net e se si come?

Tenete presente che nel file report non ci sono gruppi ma vi posto anche l'immagine di come è strutturato il report.


1280x1024 223Kb


Ciao aiutatemi.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

ciao,
devi mettere un altro campo nella lista dei campi "on change of" (al cambio di) direttamente da design del report.

Nel tuo caso metterei {campoData} e {campoCliente}, mentre come valore visualizzato lasci quello che hai messo, cosi' facendo lui fa la divisione per il primo campo (data) e dentro ad ogni valore, mette n barre verticali quanti sono i valori distinti del 2do campo (Cliente).
Cosi' sostanzialmente fai tutto con un grafico solo.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

>ciao,
>devi mettere un altro campo nella lista dei campi "on change
>of" (al cambio di) direttamente da design del report.
>
>Nel tuo caso metterei {campoData} e {campoCliente}

Ciao Matteo cosa intendi per aggiungere un campocliente..io non ho campi clienti nel mio caso.

Nel mio caso io ho i seguenti campi:

anno - arrivi_ita - presenze_ita - arrivi_str - presenze_str

e poi ho come confronto questi altri campi:

anno1 - arrivi_ita1 - presenze_ita1 - arrivi_str1 - presenze_str1

tieni presente questo:

che io vorrei che sull'asse Y escono i valori mentre sull'asse X vengono visualizzatti tutte le colonne raggrupate per anno

ossia una cosa del genere:
| | | | | | | | | |_____| | |_____________ | | |________ 2007 2008 (anno) (anno1)


esempio rudimentale ma per farti capire come deve uscire il grafico


PS. hai un cantatto msn così se per te non ci sono problemi potremmo sentirci via messenger


>
>
>ciao.
>
>Matteo Raumer
>[MCAD .net]
>http://blogs.dotnethell.it/freeteo

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

ciao,
ok grazie per la precisazine schematica, ti posto questo esempio:

800x600 336Kb


come vedi ho messo come gruppi l'anno, e poi come valori da visualizzare il conteggio di alcune proprieta' del record (colonne) che sono i valori che voglio visualizzare...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

ok ho capito grazie mille.

Senti vedo che conosci molto bene il crystal report allara colgo l'occasione di porti questa ulteriore domanda:

Io ho una tabella sql server, la collego a crystal report, poi prendo i campi che devo andare nella sezione dettaglio.
Nella sezione dettaglio verranno visualizzati due record che corrispondono a due anni diversi.

C'è la possiblità e se si come di creare una formula che mi esegui delle addizioni o sottrazioni fra campi?

Mi spiego meglio:

immaginiamo che appena eseguo il report ecco i dati che escono nella sezione dettaglio:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Calcola che i totali e le differenze nella tabella non ci sono deveno essere calcolati.

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

ciao,
certamente! ti basta aggiungere alla sezione dettagli un campo formula (lo aggiungi da tastoDX sul nodo "formula" del document outline) .
Appena aggiunto si apre un editor dove devi scrivere dentro una sintassi "pseudo-c++" o "pseudo-vb" dove gli dici che calcoli fare.

Nel tuo caso dentro alla formula ti bastera' scrivere:

{campo1} - {campo2}

Dove i campi li prendi dalla treeview dei campi del db che trovi dentro a questo editor (e ovviamente capisci subito che ci sono tante funzioni selezionabili dalle altre treeview che vedi) e quello che scrivi è gia' il valore che deve essere visualizzato dalla formula (quindi non devi fare "return" o corpi della funzione etc...)

Dopodiche' la trascini nella sezione dettagli e il report la tratta come fosse un campo del database, quindi potrai usarla per fare altri calcoli, sommatorie, grafici etc...


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

>ciao,
>certamente! ti basta aggiungere alla sezione dettagli un campo
>formula (lo aggiungi da tastoDX sul nodo "formula" del document
>outline) .
>Appena aggiunto si apre un editor dove devi scrivere dentro una
>sintassi "pseudo-c++" o "pseudo-vb" dove gli dici che calcoli
>fare.
>
>Nel tuo caso dentro alla formula ti bastera' scrivere:
>
>{campo1} - {campo2}
>


Sisi questo lo so ma ora ti posto un'immagine che ti fa vedere la mia reale situazione:


1280x1024 165Kb


Come noterai ti ho evidenziato la treevuw da dove prelevo i campi e li porto nel report e precisamente nella sezione "Dettaglio".
Qui alla fine avrò un risultato del genere:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


ma avevndo fisicamente solo una serie di campi come faccio a fare una sottrazione?

Ossia mi spiego meglio: Se devo trovare il totale arrivi, basta che faccio nella formula campo_arr.italiani + campo_arr.stranieri e mi esce il totale sia dell'anno 2007 che dell'anno 2008, ma come faccio a fare poi una sottrazione tra arrivi del 2007 e arrivi del 2008 oppure una sottrazione tra il totale arrivi 2007 e totale arrivi 2008, non avendo fisicamente due campi record a confronto?

Ciao e grazie

>Dove i campi li prendi dalla treeview dei campi del db che trovi
>dentro a questo editor (e ovviamente capisci subito che ci sono
>tante funzioni selezionabili dalle altre treeview che vedi) e
>quello che scrivi è gia' il valore che deve essere visualizzato
>dalla formula (quindi non devi fare "return" o corpi della funzione
>etc...)
>
>Dopodiche' la trascini nella sezione dettagli e il report la
>tratta come fosse un campo del database, quindi potrai usarla
>per fare altri calcoli, sommatorie, grafici etc...
>
>
>ciao.
>
>Matteo Raumer
>[MCAD .net]
>http://blogs.dotnethell.it/freeteo

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

ciao,
scusami ma forse non mi sono spiegato bene.

Nella tua sezione dettagli i totali come sono calcolati?
dovrebbero essere con un formula ad esempio per i totali arrivi: {db.campoArriviIT} + {db.campoArriviWW}

a questo punto come ti dicevo prima, quel campo è a tutti gli effetti come se fosse un campo del db, an che se in realta' è una formula, quindi puoi fare una sommatori (tastDX sopra al campo->Insert->Summary) sia come "GranTotal" o come "SommatoriaPerGruppo", te lo fa il report senza bisogno di altri campi.

Percui fatta la formula come ti dicevo, e messa nella sezione dettagli il tutto è fatto.

ps: le formule puoi usarle per combinarle con altri dati in altre formule, quindi ad esempio puoi fare:
formula1 => {campo1} + {campo2}
formula2 => {@formula1} + {campo3}

percio puoi fare tutto quello che ti serve, partendo dai tuoi dati.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

Ok per fare la sommatoria non ci sono problemi.

però vedi l'immagine che ti ho mandato nell'ultimo post e vedrai che io ho solo uan tabella dataset del db.

Se questi campi li trascino nel report e li metto nella sezione Dettaglio una volta che lancio la stampa si generano dua record che fanno con anni diversi...io devo eseguire la sottrazione tra i dati del primo anno ed i dati del secondo anno.
Però attenzione non devo fare come la sommatoria arrivi_italiani + arrivi_stranieri ma bensì nel campo arrivi_italiani io avrò due valori e dal primo valore devo sottrarci il secondo.

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

ciao,
la cosa forse la risolvi con un campo sommatoria (RunningTotalField) che trovi nel document explorer.
Quando lo aggiungi si apre un editor che ti permette di fare dei calcoli piu' complessi e "indipendenti" dal flusso di dati del report, li dentro ti basta dirgli di azzerare il conto al cambio di anno.

Oppure puoi provare anche con l'inserimento di un gruppo (per anno) e fare dei calcoli li.

Se invece devi sapere il valore del campo precedente per forza, a livello di recordprecedente, il report hala funzione "Previous({campo})" (e il duale Next(...)) che puoi usare nei campi formula, e che ti danno il valore del campo per il record precedente (o successivo) rispetto al record dove viene visualizzata la formula in quel momento.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

c'è un modo di creare una formula nella quale posse eseguire un ciclo su un campo del db?

Se si mi sapresti dire come?

Poi per dichiarare delle variabili in una formula basta scrivere "dim variabile as string" se la sintassi e vb mentre se fosse crystal devo scrivere "nomevariabile String"

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

freeteo Profilo | Guru

>c'è un modo di creare una formula nella quale posse eseguire
>un ciclo su un campo del db?
>Se si mi sapresti dire come?
non hai accesso mai ai valori del campo, hai solo il puntatore al record corrente/precedente/successivo di quelli che sta elaborando in quel momento.
Per fare calcoli indipendenti dal flusso, come ti dicevo prima, devi usare i RunningTotalField, non ci sono alternative (se non codice .net ovviamente)



>Poi per dichiarare delle variabili in una formula basta scrivere
>"dim variabile as string" se la sintassi e vb mentre se fosse
>crystal devo scrivere "nomevariabile String"
si io uso questa sintassi:
shared stringvar miavar := 'matteo'

e poi la uso su un'altra formula con:
shared stringvar miavar * 2...

il modificatore "shared" me la rende visibile in tutte le sezioni del report.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5