Prima un po’ di “letteratura”, per rinfrescare la memoria: quando si accede con Qlik ad una fonte dati attraverso ODBC, tutto ciò che si trova tra la parola “SELECT” (o, per chi preferisce, “SQL SELECT“) e il “;” viene eseguito usando il “dialetto” SQL del Driver ODBC cui ci si è collegati.
Un esempio facile da comprendere è la conversione di un campo data in stringa (dd/mm/yyyy), che cambia da un RMDB e l’altro.
Ad esempio, se la fonte dati fosse Sybase, si potrebbe scrivere
DateOrdini:
Load
order_date,
order_date_string;
SELECT
order_date,
CONVERT(CHAR(20), order_date, 103) as order_date_string
FROM sales_order;
Ma se la fonte dati fosse Oracle, si dovrebbe scrivere:
DateOrdini:
Load
order_date,
order_date_string;
SELECT
order_datetime,
TO_CHAR(order_date, ‘DD/MM/YYYY’) as order_date_string
FROM sales_order;
Tutto questo semplicemente perché Qlik, in maniera trasparente, passa la stringa SQL direttamente al Driver, che la interpreta e ne ritorna i risultati.
Ci sono però delle eccezioni: ad esempio Oracle mette a disposizione degli strumenti di ottimizzazione delle query chiamati HINTS la cui sintassi è fuorviante, perché è la stessa che si usa in molti linguaggi di programmazione (Qlik compreso) per la definizione di un commento. Di seguito un esempio:
SELECT /*+ PARALLEL(2) */
Campo1, Campo2, Campo3
FROM Tabella;
In questo caso Qlik interpreta tutto ciò che si trova dentro /* … */ come un commento e non lo passa al Driver ODBC.
Fortunatamente esiste un sistema semplice per evitare questa anomalia: si tratta di un flag di sistema che regola il comportamento di Qlik difronte alle righe di commento e si chiama “StripComments”.
Dunque per permettere al Driver ODBC di Oracle di leggere correttamente i nostri HINTS sarà sufficiente scrivere la query in questo modo:
Set StripComments=0;
SELECT /*+ PARALLEL(2) */
Campo1, Campo2, Campo3
FROM Tabella;
Set StripComments=1;
Naturalmente l’ultima riga è necessaria per ripristinare il normale comportamento di Qlik rispetto ai commenti.
Alla prossima!