PDA

View Full Version : Range dinamici per Dial Chart



Adrianvs
01-30-2009, 11:36 AM
ciao a tutti,
sto utilizzando da poco la suite Pentaho e devo realizzare dei Dial Chart basati su dei dati pescati da un database. L'idea è quella di far variare i cruscotti sia per quanto riguarda il dato indicato sia per il range, i cui valori sono sempre reperibili dal database. Questo vuol dire cambiare la "taratura" del cruscotto in base ai valori presi. Purtoppo ho delle difficoltà a configurare i parametri. Come si può realizzare una cosa del genere?
Grazie in anticipo

4ndr34
01-30-2009, 12:58 PM
ciao a tutti,
sto utilizzando da poco la suite Pentaho e devo realizzare dei Dial Chart basati su dei dati pescati da un database. L'idea è quella di far variare i cruscotti sia per quanto riguarda il dato indicato sia per il range, i cui valori sono sempre reperibili dal database. Questo vuol dire cambiare la "taratura" del cruscotto in base ai valori presi. Purtoppo ho delle difficoltà a configurare i parametri. Come si può realizzare una cosa del genere?
Grazie in anticipo
fai una query che ti ritorna un resultset con tuple del tipo (min,valore, max) ed iteri su di esso all'interno del loop crei il widget

Adrianvs
01-30-2009, 01:24 PM
fatto...
ho questo file .xaction che definisce il valore indicato dalla lancetta, che lo prendo dal database ed è ok. Poi richiama un file dialchart.xml che definisce la grafica del cruscotto (e quindi anche il range)..come faccio a dire a quest'ultimo come prendere le variabili estratte dal result-set?
thanks

4ndr34
02-02-2009, 05:01 AM
fatto...
ho questo file .xaction che definisce il valore indicato dalla lancetta, che lo prendo dal database ed è ok. Poi richiama un file dialchart.xml che definisce la grafica del cruscotto (e quindi anche il range)..come faccio a dire a quest'ultimo come prendere le variabili estratte dal result-set?
thanks
così

<action-definition>
...
<action-inputs>
....
<chart-data type="result-set" mapping="rs_name"/>

</action-inputs>
</action-definition>

Adrianvs
02-04-2009, 10:43 AM
Perfetto...il range si prende i valori dal database.
Come posso creare un cruscotto per ogni riga del result set? C'è un metodo universale per creare dei "loop" in base ai risultati delle query?

PS: c'è un manualeda qualche parte, anche in inglese, per pentaho 2.0?

grazie:D

4ndr34
02-04-2009, 12:16 PM
lo stai facendo con una jsp o con una xaction?
nel primo caso devi iterare con un costrutto java (for,while...)
nel secondo caso c'è "Loop" in "process action"

4ndr34
02-04-2009, 12:30 PM
per la guida potrebbe esserti utile questa reference :
http://wiki.pentaho.com/display/ServerDoc2x/III+-+Actions+and+Component+Reference

Adrianvs
02-04-2009, 12:47 PM
anzitutto grazie per le immediate risposte:D

Sto visualizzando il grafico con un xaction con javascript tramite la sintassi

chart_url = '<img src="' + BASEURL + "getImage?image=" + CHARTOUTPUT + '" />';Come si applica la funzione loop?
Grazie ancora

4ndr34
02-04-2009, 12:53 PM
stai quindi utilizzando design studio ?
in tal caso dovresti aggiungere una sorta di process action chiamata Loop ed inserire al suo interno la costruzione del tag img

Adrianvs
02-04-2009, 12:59 PM
si uso design studio....ora faccio delle prove thanks:D

Adrianvs
02-04-2009, 01:12 PM
aspè quindi devo iterare la costruzione del tag img per fare spuntare + cruscotti?

4ndr34
02-06-2009, 05:22 AM
diciamo che devi costruire l'html relativo, quindi, io farei, all'interno del loop
1)costruzione del chart
2)javascript per definire l'html

per il secondo punto poi utilizzare anche un message template, cmq rimanendo sul javascript il codice è orientativamente il seguente:

chart_url += <img src="' + BASEURL + "getImage?image=" + CHARTOUTPUT + '" />';attenzione al + prima dell'uguale (chart_url += )
non so che esperienza hai con javascript ma serve per la concatenzione.
potrebbe essere necessario inizializzare la variabile chart_url (che si dovrebbe chiamare + propriamente chart_urls in tal caso): mettilo negli input dell'action sequence con default spuntato


....and let me know ;)

Adrianvs
02-10-2009, 07:31 AM
allora...grazie a questo trucchetto funziona:D
La situazione è questa nel process action:

1)Connessione databasse+query
2)Javascript che mi crea un resultset con il valore
3)Loop su query_result

3a)Dial chart: ChartComponent dove definisco l'xml che si prende i nomi e i range del cruscotto dal precedente process action
3b)Output Chart con chart_url+= bla bla
I cruscotti li crea e i valori della lancetta sono esatti...perchè, da quello che ho capito, tali valori se li prende dall'oggetto resultset che nel processo 2) è stato popolato con un for tramite l'istruzione results.addRow(new Array(valore))...fin qua tutto ok, ma i range dei cruscotti non variano perchè non ho capito come farli "ciclare", cioè prendono solo l'ultimo valore che esce dal ciclo for del processo 2. Se definisco qualcosa del tipo results.setColumnHeaders( 'nome','target','valore' ); mi da un errore tipo "parsing exception" o qualcosa simile...quindi come impostare tali valori in modo che l'xml se li prende?
Non so se ho formulato in modo chiaro la domanda, cmq manca solo questo ed è perfetto...thanks:D

4ndr34
02-10-2009, 07:43 AM
diciamo che x il punto 2) non è necessario javascript se i valori che devi utilizzare li devi prendere direttamente dal db.
Puoi utilizzare un componente "relational" inserendo una query del tipo

select x as actual, value_a as min,value_b as max from tabelle_varie_con _eventuali_join
questo dovrebbe risolvere anche il discorso del range dinamico, se per range intendi il valore massimo ed il minimo del tachimetro.
se per range invece intendi gli intervalli "stile-semaforo" rosso-giallo-verde (o altri colori che vuoi utilizzare per evidenziare sotto-intervalli diversi) allora la cosa si complica un po

Adrianvs
02-10-2009, 07:51 AM
il valore massimo ad esempio è 100 quello minimo è 0....servirebbero solo i valori intermedi i cui valori li pesco dal db, o meglio ne prendo uno e l'altro lo calcolo in funzione di esso. Cioè per settare la lancetta uso results.addRow(new Array(Value)); e ho tanti cruscotti quanti le righe con il valore della lancetta corretto. Solo che gli altri valori (ad esempio il nome della misura che imposto nel titolo del dialchart) non so come settarli per la definizione nell'xml...faccio ancora qualche prova vediamo:confused:

Adrianvs
02-10-2009, 07:56 AM
cioè il dial chart funziona con un tipo di input definito chart-data....che ha come valori quelli impostati dall'xaction che contiene javascript:confused:
Se lo tolgo non funge

Adrianvs
02-10-2009, 12:27 PM
Dunque...ho "resettato" tutto. Ho creato un xaction che ha questi processi:

1) Connessione database + query--> output: query_result + colonne del resultSet
2) Loop su query_result

2a) Javascript che prende come input quello che esce da 1) e concatena la stringa Out+='<br/>'+nome+target+value; dove Out l'ho definita in Process input con default spuntato.

L'output grossolanamente mi da le rispettive righe uscite dalla query con i valori corretti...quindi l'estrazione dei dati direttamente con il loop funziona. Il punto è ora creare i cruscotti da questo punto: come configurare il tutto? ovvero come fare un Xml per Dial Chart ke si prende value come valore della lancetta, nome come nome della misura quindi come titolo del dialchart corrispondente e target come target intermedio (ad esempio il valore dopo il quale viene colorato di rosso, stile semaforo). Non ho capito questo punto...grazie:D:confused:

4ndr34
02-11-2009, 05:13 AM
potrei vedere l'xml?
xchè ho un dubbio.
puoi anche mandarmelo con un MP

Adrianvs
02-13-2009, 05:58 AM
ciao
purtroppo in questi giorni non ho a portata di mano il codice...la prossima settimana ti mando tutto.
Cmq in generale il problema è creare un cruscotto per ogni riga di una tabella mysql nella forma:

nome target valore
blablabla0 50 57
blablabla1 70 60
blablabla2 75 85
blablabla3 80 88
.........

Ogni cruscotto ha il titolo "nome", valore della lancetta "valore" e range basato su "target" (ad esempio nella visualizzazione a semaforo il valore prima della parte rossa).
La mia soluzione funzionava con le lancette ma il resto non ho capito come impostarlo correttamente sulla grafica del cruscotto.
Se hai soluzioni alternative scrivi pure. Grazie e a presto:D:D

Adrianvs
04-16-2009, 11:39 AM
ciao a tutti
questo problema l'ho abbandonato per dedicarmi ad altro però non ho ancora trovato una soluzione....
Nel ChartComponent ho usato il mapping su title (togliendo dalla configurazione xml i tag <title></title>) e su chart-data, quindi titolo e lancetta sono corretti. Per poter fare il range (valori intermedi stile semaforo), intuitivamente dovrebbe essere eseguito un mapping sui valori estratti dal database...ma dove?
se metto ad esempio nel primo range:


<intervals>
<interval>
<label>low</label>
<!-- this is the value that the range starts at -->
<minimum>0</minimum>
<!-- this is the value that the range stops at -->
<maximum>{low}</maximum>
<!-- color>#ff8080</color -->


il valore low estratto dal database non cicla, quindi in tutti i dial mi stampa lo stesso valore (ad esempio il primo).
:confused::confused::confused: