Invio della selezione di record al server del database

La componente più importante per rendere più veloce l'elaborazione dei report è limitare la quantità di dati restituiti dal database. Lo strumento principale per tale scopo è rappresentato dalle formule di selezione dei record.

I driver forniti da Crystal Reports per origini di dati SQL consentono l'invio di selezioni di record al server del database. Se si specifica una formula di selezione dei record in un report basato su un'origine di dati SQL, Crystal Reports analizza la formula, genera una query SQL basata sulla formula e invia la query SQL al server del database. La selezione dei record è quindi eseguita in due fasi:

  • la prima fase della selezione dei record ha luogo quando il server del database elabora la query SQL e restituisce a Crystal Reports una serie di record.
  • nella seconda fase, Crystal Reports valuta a livello locale la formula di selezione dei record relativa alla serie di record restituiti dal server del database.

I server di database sono generalmente più veloci delle stazioni di lavoro ed è quindi utile specificare formule per la selezione dei record che il server è in grado di elaborare nel corso della prima fase. In questo modo, la selezione dei record da eseguire sul computer locale nella seconda fase è ridotta al minimo. È possibile inviare al server i seguenti tipi di formule di selezione record:

  • selezioni con campi indicizzati e non (i campi indicizzati consentono risposte più rapide).
  • query SQL con clausole AND e OR.
  • campi di espressioni SQL che eseguono i calcoli delle formule per la selezione dei record (per informazioni sui tipi di espressioni SQL supportati dal server SQL, consultare la documentazione fornita con il server).

Invio di selezione di record, un esempio

Questo esempio illustra i vantaggi della scrittura di formule di selezione dei record che possono essere inviate al server del database.

Nella tabella Ordini del database di esempio Xtreme sono presenti 2.001 record; 169 di questi hanno date dell'ordine precedenti al 1997. Ipotizzando che l'utente desideri creare un report con questi record. È possibile utilizzare questa formula di selezione dei record:

Year ({Ordini.Data ordine}) < 1997

La query SQL generata invia i 2.001 record a Seagate Crystal Reports, in seguito la formula di selezione dei record ne riduce il numero a 169. Per visualizzare questa operazione, richiamare la finestra di dialogo Mostra query SQL dal menu del database e notare che la query SQL non presenta clausole WHERE. Questo si verifica perché Crystal Reports non è in grado di inviare la funzione Year ( ) nella clausola WHERE.

D'altro canto, questa formula di selezione dei record genera lo stesso report:

{Ordini.Data ordine} < #Jan 1, 1997#

Questa seconda formula, tuttavia, può essere eseguita sul server del database, in modo che venga inviata. La query SQL generata invierà soltanto 169 record a Crystal Reports. Quindi, quando la formula di selezione dei record viene valutata non sarà necessario eliminare nessun altro record. Scegliere Mostra query SQL dal menu Database e notare che la query SQL presenta una clausola WHERE.

Come mostrato da questo esempio, la velocità di elaborazione del report migliora quando si potenzia la formula di selezione del record. In questo caso entrambe le formule generano lo stesso report, ma la seconda sfrutta la potenza e le ottimizzazioni che il server del database può utilizzare quando gestisce i propri dati.

Suggerimenti per la selezione dei record

Quando si impostano le richieste di selezione dei record, è opportuno considerare i seguenti elementi relativi alle prestazioni:

Generale

  • Per inviare una selezione dei record, occorre selezionare "Usa indici o server per velocità" nella finestra di dialogo Opzioni report (fare clic con il pulsante destro del mouse su Report, quindi selezionare Opzioni report).

  • Nelle formule di selezione dei record evitare conversioni di tipi di dati su campi che non sono campi di parametro.

    Ad esempio, evitare l'utilizzo di ToText ( ) per convertire un campo numerico in un campo di database stringa.

  • È possibile inviare alcune formule di selezione dei record che utilizzano espressioni fisse.

Database SQL

  • È possibile inviare selezioni dei record su campi indicizzati e non indicizzati.

  • Il server SQL risponde più velocemente se si utilizzano campi indicizzati.

  • È possibile inviare clausole AND e OR.

  • È possibile inviare formule di selezione di record che contengono alcuni tipi di formule incorporate.

  • Si devono incorporare i campi Espressione SQL per inviare i calcoli delle formule necessari per la selezione dei record.

    Ad esempio, una selezione di record di {@ExtendedPrice > 1000} dove @ExtendedPrice = (Orders * Quantity) non può essere inviata. Tuttavia, se @ExtendedPrice viene sostituito con un campo Espressione SQL, allora verrà inviata.

  • Nel menu Database fare clic su Mostra query SQL per visualizzare l'SQL che verrà inviato al server del database.

Vedere anche

Selezione di base dei record | Espressioni SQL