miércoles, 20 de marzo de 2019

► Exportar todas las tablas del modelo

En ocasiones tenemos la necesidad de exportar todas las tablas del modelo. Por supuesto este proceso se puede hacer tabla a tabla con su consiguiente sentencia STORE justo después de cargar la tabla en memoria.
La forma más eficaz y elegante de hacerlo es con un bucle. De esta forma no importa que en un futuro añadamos más tablas en el modelo. No tendremos que acordarnos de escribir su correspondiente STORE ya que el bucle lo hará automáticamente.

Para ello nos valdremos de las funciones NoOfTables() y TableName() y de cómo nombra realmente Qlik las tablas internamente, que es mediante un índice. A la primera tabla la asigna el índice 0.
La función NoOfTables() devuelve el Nº de tablas que componen el modelo.
La función TableName(<índice>) devuelve el nombre de la tabla correspondiente al índice.


LET numTablas = NoOfTables();


FOR i = 0 to $(numTablas)-1
       LET Tabla= TRIM(TableName($(i)));
          
       STORE [$(Tabla)] INTO [$(Tabla)].csv (txt);
      
      //drop table [$(Tabla)]; //Si queremos borrar la tabla del modelo   
NEXT i

En el ejemplo la exportación se hace a ficheros .csv (realmente son ficheros de texto) pero también se podrían exportar a .qvd (qvd).

En la siguiente variante añadimos una traza, un path de exportación, discriminamos todas las tablas temporales y a todos los los .qvds generados les forzamos que los nombres comiencen por 'ERP_'.

SET QVD_Path_Extraccion = 'lib://Qlik_Deployment_Framework (user_xxx)/2.QVD/1-Capa_Extraccion/';

LET numTablas = NoOfTables();

FOR i = 0 to $(numTablas)-1
      LET Tabla= TRIM(TableName($(i)));
      
      IF index('$(Tabla)','TMP')=0 THEN
          TRACE 'Guardando   ----> $(Tabla)';
          STORE [$(Tabla)] INTO '$(QVD_Path_Extraccion)ERP_$(Tabla).qvd' (qvd);
      END IF  
      
      //drop table [$(Tabla)]; //Si queremos borrar la tabla del modelo   
NEXT i



No hay comentarios:

Publicar un comentario