Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
SantiagoP
Contributor
Contributor

Comando delete // Carga incremental

Hola a todos,

Estoy trabajando con varias base de datos, donde cada una corresponde al histórico de un año en particular. Debido a que eventualmente hacemos modificaciones retroactivas hacia atras, necesito generar un comando de script que tome la información de la base de dato, elimine todos los registros que corresponden a dicho año y escriba los nuevos registros sobre el archivo QVD. La secuencia me la imagino de la siguiente manera:

Borrar registros Real 2015 de BD General >> Tomar base de datos Real 2015 >> Concatenar Real 2015 en BD General

Borrar registros Real 2016 de BD General >> Tomar base de datos Real 2016 >> Concatenar Real 2016 en BD General

.....

No estoy pudiendo encontrar la manera de borrar los registros cargados anteriormente para sobre-escribir con los nuevos. Si alguno me puede ayudar estaré muy agradecido.

Saludos, Santiago

3 Replies
joseph_morales
Creator III
Creator III

Hola @SantiagoP 

Podrias utilizar este codigo simple para extraer la información de las bases de datos y guardar el contenido de cada base en un qvd.  Este script te puede ayuar siempre que el nombre la base de datos sea algo como Sales_2018, Sales_2019, Sales_2020, Sales_2021, etc. 

De tener un caso de las bases tener nombre diferente podrias emplear un For each.. https://help.qlik.com/en-US/qlikview/April2020/Subsystems/Client/Content/QV_QlikView/Scripting/Scrip...

Si requieres hacer una extracción otra vez por reporceso de la data, solo cambias las variables por el rango de años que vas a extraer. Despues sobre escribira el qvd con la nueva data.

//Puedes reemplazarlo con años fijos como 2018 o 2019 o para que solo extraiga el año actual YEAR(TODAY())
LET vAÑO_INICIAL = YEAR(TODAY())-3; 
LET vAÑO_FINAL = YEAR(TODAY());

FOR X=$(vAÑO_INICIAL) to $(vAÑO_FINAL)

SalesOrderHeader:
SELECT *
FROM AdventureWorks.Sales.SalesOrderHeader_$(X);

STORE SalesOrderHeader INTO LIB://QVD_EXTRACCION/SalesOrderHeader_$(X).QVD;
DROP TABLE SalesOrderHeader;

NEXT;

Una ventaja es que terminas guardando los qvd en independientes

joseph_morales_0-1612827649843.png

Y para leer los QVD solo utilizarias Load *  From LIB://..../SalesOrderHeader_*.qvd;

 

 

 

 

 

Best Regards,
Joseph Morales
SantiagoP
Contributor
Contributor
Author

Muchas gracias por la ayuda Joseph. Resultó de utilidad y mucho más sencillo de lo que creía podría ser. 

Saludos, Santiago

ArnadoSandoval
Specialist II
Specialist II

Hola @SantiagoP 

Te presento una segunda alternativa para actualizar tu QVD, BD_General con las transacciones que fueron actualizadas/modificadas o borradas del archivo historico.

Para que esta logica funcione es necesario que los datos en el qvd y la base de datos historica tengan un campo clave primario que sea unico atravez de todos los archivos historicos; es decir un Primary Key, que sea unico para los datos del 2015 y que no este presente en otros años.

La segunda condicion es que exista un campo de "time stamp" en los archivos historicos que sean actualizados cada vez que se modifique la data retroactivamente.

Por ultimo, si registros en la data historica son "borrados" debe de existir un mecanismo para identificar sus Primary Keys.

El diagrama de este proceso es de esta forma

Actualizar_DB_General-01.png

El proyecto anexo (Z_LoadScript_01.qvf) tiene un prototipo de este Load Script, estoy utilizando un archivo Excel con transacciones de ventas (Sales) para 3 años; son 30 transacciones, en la segunda worksheet, que se llama nuevos datos, contiene 18 rows, las que estan en amarillo son nuevas transacciones, la que estan en verde son transacciones actualizadas (modifique las Ventas, columna M) y finalmente borre dos transacciones, la columna "Estatus" con una x me indica que esas dos transacciones fueron borradas; como este es un prototipo manual, no tengo una columna "time-stamp" que me permita identificar la fecha de estos cambios, un campo muy importante para implementar este modelo con tus datos.

Espero que ayude.

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.