Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
ALERT: QlikView server communication interruptions following Microsoft Windows Domain Controller security updates
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Como cargar tablas de una base de datos con nombres parecidos

Buenas tardes

Quisiera cargar todas las tablas de una base de datos que empiecen por VENTAS, es de un programa antiguo que guarda las ventas en tablas por meses, ej:

VENTAS_01

VENTAS_02

....

....

VENTAS_12

VENTAS_13

VENTAS_XX

Por lo que me gustaría crear un script que cargara todas las tablas que empezaran por VENTAS* (no se cuantas tablas)

Con archivos si que se hacerlo, pero no con tablas de una base de datos.

Labels (1)
4 Replies
Not applicable
Author

Solo tienes que asegurarte que en la ruta de la extracción o lectura e las tablas lleve el prefijo que tienen todas las tablas, despues pones un asterisco. ejemplo:

FROM
[..\..\..\Extracción\
Ventas_201*.xlxs]
(
txt, codepage is 1252, embedded labels, delimiter is ';', msq);

Aqui va a cargar todas ls tablas de la carpeta Extracción que empiecen con Ventas_201.

Es eso lo que necesitas?

Anonymous
Not applicable
Author

Hola

El problema es que no son ficheros dentro de un directorio, son tablas de una base de datos, y para eso no he encontrado ejemplos.

Para cargar ficheros, se utiliza el For each.... y va cargando todos, pero en tablas no lo he conseguido.

Muchas gracias

Miguel_Angel_Baeyens

Pues depende de tu motor de base de datos. Con SQL Server, por ejemplo, el código podría ser como el siguiente, para obtener todos los nombres de tablas que empiecen por la cadena "VENTAS",

SELECT * FROM sys.tables WHERE name LIKE 'VENTAS%'

De esta forma, puedes cargar todos los nombres de tabla en una variable, cada valor separado por comas y entre comillas simples de forma que lo puedas usar en un bucle FOR EACH

// Chr(39) = '

// Chr(44) = ,

// La función Concat() nos devolverá una cadena tipo "'VENTAS1','VENTAS2','VENTAS3',..."

Tablas:

LOAD Chr(39) & Concat(DISTINCT name, Chr(39) & Chr(44) & Chr(39)) & Chr(39) AS NombresTablas;

SQL SELECT * FROM sys.tables WHERE name LIKE 'VENTAS%';

// Almacenamos los nombres de tablas separados por comas en un variable

LET vNombresTablas = FieldValue('NombresTablas', 1);

// no necesitamos más la tabla (los datos están en la variable), así que la borramos

DROP TABLE Tablas;

// Cargamos cada tabla

FOR EACH vTabla in $(vNombresTablas)

     Ventas:

     LOAD *;

     SQL SELECT * FROM '$(vTabla)';

NEXT

Lo escribo de memoria, así que es posible que me haya dejado algún paréntesis o comilla sin cerrar.

Si tu caso no es SQL Server, el funcionamiento será idéntico en todo excepto en la forma de obtener el nombre de las tablas creadas por el usuario. Todos los sistemas gestores de bases de datos tienen algún tipo de diccionario de datos o "metatablas" donde almacenan esta información.

Un saludo,

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

Anonymous
Not applicable
Author

Muchas gracias Miguel

Voy a ver si lo puedo hacer como indicas.

Un Saludo