Come effettuare statistiche particolari

A volte può essere indispensabile creare, in presenza di elaborazioni particolari (per esempio, statistiche su dati precedentemente filtrati), una tabella temporanea, per poter così raccogliere i dati che vengono stampati nel report ed avere le basi per la formulazione di conteggi particolari.

Per far ciò si fa uso degli Scripts nelle bande che compongono il report.

Inizialmente si inseriscono nello Script "Prima di stampare" del report (quindi, senza selezionare alcuna banda, si preme il tasto destro del mouse e si sceglie Scripts) le seguenti istruzioni, che permettono di creare una nuova tabella vuota dal nome TMP_IDS (il primo comando cancella un'eventuale tabella con quel nome, il secondo la crea effettivamente).

 

ExecSQL('DROP TABLE TMP_IDS')

ExecSQL('CREATE TABLE TMP_IDS (ID integer not null)')

 

Di seguito, nello Script "Prima di stampare" della banda dettaglio o subdettaglio (dove vengono elencati i dati), si specifica il comando che permette di inserire i dati nella nuova tabella. Nell'esempio che segue vengono considerate le righe prestazioni visualizzate nella scheda prestazioni (QryRigheGrid).

 

ExecSQL('INSERT INTO TMP_IDS (ID) VALUES(' + QryRigheGrid.ID + ')')

 

I vari datasets, creati all'interno del report per l'elaborazione delle statistiche, devono essere modificati in tal senso che considerino i dati della nuova tabella.

Per esempio, una query, che riporta la somma della durata degli onorari, ecc., considera, tramite la riga evidenziata in grassetto nell'istruzione sottostante, solo le righe prestazioni presenti nella nuova tabella.

 

SELECT SUM(DURATA), U_ONORARI, RIFERIMENTO, NOME2

 FROM PRS_RIGA, OPERATORE

 WHERE PRS_RIGA.ID_OPERATORE=OPERATORE.ID

 AND PRS_RIGA.ID IN (SELECT ID FROM TMP_IDS)

 AND PRS_RIGA.ID_PRS_SCHEDA=:ID

 GROUP BY NOME2, U_ONORARI, RIFERIMENTO

 HAVING SUM(DURATA)>0

 ORDER BY NOME2, U_ONORARI

 

Infine nello Script "Prima di stampare" di una banda successiva a quella dove è stato specificato il comando che consente di "riempire" la tabella (vedi sopra), ma precedente alla banda che riporta i dati delle statistiche, devono essere inseriti i comandi per aprire i datasets basati sulla tabella temporanea (NomeDataset è il nome della query).

 

DATASETACTIVATE('NomeDataset', true)