PDA

View Full Version : Scostamento medio annuo



DemaGogo
07-18-2010, 02:08 PM
Ciao a tutti,

sono alle prime armi con Pentaho e vorrei, per scopi personali, realizzare un report che francamente ho difficoltà a creare (ammesso che sia possibile). Ecco cosa vorrei fare (sto semplificando molto):

Immaginiamo di avere una tabella in cui per ogni voce ho il totale di quella voce per ogni anno passato. Esempio:

Anno - Voce - Totale
----------------------------
2008 Abbigliamento 100
2008 Alimentari 200
2008 Varie 300
...
2009 Abbigliamento 110
2009 Alimentari 210
2009 Varie 400
...
2010 Abbigliamento 121
2010 Alimentari 210
2010 Varie 300

(la lista è lunga qualsivoglia anni e per molte altre voci).
Quello che vorrei poter calcolare è il VALORE MEDIO DI INCREMENTO DELLE VOCI al passare degli anni. Esempio: Abbigliamento è passato da 100 a 110 (ovvero +10%) nel 2009 e poi 121 nel 2010 (che è ancora un aumento del 10%) e quindi l'incremento medio è il 10%. Analogamente "Varie" è passato da 300 a 400 (ovvero +33%) e poi a 300 (ovvero -25%): incremento medio +4%. A me servirebbe sapere il valore medio di incremento per tutte le voci.

E' possibile farlo in query o devo creare delle tabelle intermedie?

Grazie anticipate a tutti.

Maurizio

SCP
07-19-2010, 04:02 AM
Quello che vorrei poter calcolare è il VALORE MEDIO DI INCREMENTO DELLE VOCI al passare degli anni. Esempio: Abbigliamento è passato da 100 a 110 (ovvero +10%) nel 2009 e poi 121 nel 2010 (che è ancora un aumento del 10%) e quindi l'incremento medio è il 10%. Analogamente "Varie" è passato da 300 a 400 (ovvero +33%) e poi a 300 (ovvero -25%): incremento medio +4%. A me servirebbe sapere il valore medio di incremento per tutte le voci.
Come prima cosa, sei sicuro che questo calcolo sia corretto?
Se parti da 300 e arrivi a 300 l'incremento medio sarà 0 no?
Estremizzando: se l'anno 1 hai 10, l'anno 2 hai 0 (-100%) e l'anno 3 hai 1 (+ infinito %), l'incremento medio quant'è, infinito??

Nella tua implementazione credo che dovresti fare in modo da avere, in ogni record, una colonna per l'anno X e una per l'anno X+1, calcoli la variazione tra queste e poi fai una media.
Credo però che sarebbe più corretto fare il confronto tra l'ultimo valore e il primo, e dividerlo per il n° di anni.

"Tabelle intermedie" se servono puoi anche "crearle" come subquery SQL.

DemaGogo
07-19-2010, 04:28 AM
Ciao SCP,

grazie per la risposta. La tua osservazione è corretta ma, come dicevo, quello che ho postato è un esempio esemplificatore piuttosto striminzito. Del resto l'applicativo che voglio realizzare non è finalizzato a nulla, se non a testare le potenzialità dello strumento (sono un consulente BI e il mio obiettivo è confrontare Pentaho rispetto ai tool che già conosco - a titolo d'esempio, in SAP BW quello che ho descritto lo si potrebbe fare direttamente in query senza modificare il datamodel).

Tornando all'esempio: se ho ben capito mi suggerisci di creare una struttura in cui sono presenti sia gli importi all'anno X che quello all'anno X-1; alternativamente mi suggerisci delle subquery. Se volessi perseguire la seconda strada, potrei farlo in nel Report Designer? Se non ho capito male, non potrei farlo, perchè le due query non possono "dialogare" tra loro, giusto? Quindi se non sbaglio, la soluzione migliore è la tabella intermedia (quindi dovrei smanettare con le trasformazioni in PDI).

Grazie ancora,

Maurizio

SCP
07-19-2010, 04:41 AM
se ho ben capito mi suggerisci di creare una struttura in cui sono presenti sia gli importi all'anno X che quello all'anno X-1; alternativamente mi suggerisci delle subquery
Non sono alternative, io penserei di fare una cosa tipo:


SELECT avg(variazione) as var_media
FROM (
SELECT anno, valore as corrente, ( SELECT valore FROM tabella t2 WHERE t2.anno = t1.anno-1 ) as precedente, 100*(corrente/precedente-1) as variazione
FROM tabella t1
WHERE anno > ( SELECT min(anno) FROM tabella )
)Occhio alle divisioni per 0...

Non è particolarmente bella ma se non hai tabelle enormi non dovrebbe essere un problema...

Edit: questo per avere la media. Se oltre alla media ti interessano anche i dati che mostravi sopra, ottenuti con una query diversa, devi definire un subreport. Ogni subreport può definire una query diversa.

PS: se scrivi nei forum in inglese hai sicuramente più risposte ;)