QlikView ed il File System (I Parte)

Mi è capitato, qualche tempo fa, di lavorare ad un progetto la cui principale fonte dati era rappresentata da una cartella del server su cui diversi strumenti di esportazione “vomitavano” file di ogni genere. Questo mi ha obbligato a scovare molte delle funzionalità di gestione del FileSystem offerte dallo script di ETL di QlikView, alcune delle quali possono essere delle ottime candidate come pretesto per scrivere un post sul blog!
Dunque veniamo a noi, iniziando molto rapidamente dalla gestione dei percorsi relativi necessari ad individuare la posizione di un file: ipotizziamo di essere all’interno della cartella “C:/Documenti QlikView/ProgettoXYZ/”. In essa sono contenuti:

  • un foglio “analisi.qvw”
  • una sottocartella “Dati/” contenente il file Excel “dati.xls” che contiene due colonne

Lo script per caricare i dati nel documento potrà essere indifferentemente:

Load @1, @2 From C:\Documenti QlikView\ProgettoXYZ\Dati\dati.xls;

Oppure

Load @1, @2 From Dati\dati.xls; 

Sfrutteremo il secondo metodo (fra quelli visti sopra), quello che si serve di percorsi relativi, per vedere alcuni esempi più interessanti, cominciando dalla possibilità che QlikView mette a disposizione quando bisogna caricare molti file che abbiano lo stesso tracciato (ad esempio delle estrazioni mensili): immaginiamo dunque di avere n file con nomi simili del tipo “dati1.xls”, “dati2.xls”… In questo caso è possibile scrivere semplicemente

tabellaDati: Load @1, @2 From Dati\dati*.xls;

QlikView caricherà in un’unica tabella di nome “tabellaDati” la concatenazione delle righe di tutti i file presenti nella cartella “Dati/” il cui nome inizia per “dati” e con estensione “.xls”. Naturalmente con questo stesso principio sarà possibile mettere in piedi qualunque caricamento sfruttando la stessa tecnica: se volessi caricare tutti i file con estenzione “.xls” dovrei semplicemente cambiare la seconda riga in From Dati\*.xls; Qualora volessi inserire nella tabella finale alcune informazioni che riguardino ognuno dei file che hanno contribuito all’alimentazione, posso sfruttare nella “Load” le funzioni standard di QlikView relative alla gestione dei file, ma senza parametro:

tabellaDati:  Load   fileBaseName() as nome_file_origine_senza_estenzione,   fileName() as nome_file_origine,   fileSize() as dim_file,   fileTime() as data_ultima_modifica,   @1 as colonna1,   @2 as colonna2 From Dati\*.xls;

Così facendo il motore di QlikView per ogni “Load” reale, inglobata nel processo di caricamento massivo innescato dalla “Dati\*.xls”, indicherà le informazioni relative al file corrente nelle prime 4 colonne della tabella. Per dovere di completezza concludo con un esempio in cui anche le cartelle che contengono i file sono più di una, così da utilizzare un altro paio di funzioni relative al FileSystem; immaginiamo dunque che sotto la suddetta cartella “Dati/” esistano n sottocartelle chiamate “Subfolder1/”, “Subfolder2/”, etc… contenenti un numero variabile di file. Lo script potrà allora essere simile a questo:

for i = 1 to n   let percorso = 'Dati\Subfolder' & '$(i)' & '\*.xls;     tabellaDati:   Load    fileBaseName() as nome_file_origine_senza_estenzione,    fileName() as nome_file_origine,    fileSize() as dim_file,    fileTime() as data_ultima_modifica,    fileDir() as directory_file,    filePath() as percorso_file,    @1 as colonna1,    @2 as colonna2  From $(percorso);  next 

Per essere precisi esiste un modo più efficiente di trattare file che si trovano su cartelle diverse, che sfrutta la possibilità dello script di QlikView di essere organizzato in subroutines, ma sarà oggetto del prossimo post riguardante il FileSystem.