Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
robertolpz
Contributor II
Contributor II

Como se actualiza o elimina un registro de una tabla QVD cuando cambia en la tabla origen (Oracle)

Buenos días, quisiera preguntar, mediante un script en Qlik Sense ¿ como se actualiza o elimina un registro de una tabla QVD cuando cambia en la tabla origen (Oracle) ?

Tengo una tabla origen de la cual extraigo datos que luego almaceno en una tabla  QVD. En el origen tengo una columna que puede cambiar su valor. O bien puede ser eliminado un registro. 

¿Cual sería el método para realizar dicho control?

Saludos

Labels (3)
3 Replies
jaibau1993
Partner - Creator III
Partner - Creator III

Hola Roberto!

Normalmente los datos están en una base de datos. En tu caso, Oracle. Como bien dices, es usual conectarse a la base de datos, leer las tablas que nos interesen y guardarlas en ficheros QVD para poder trabajar offline. Una vez acabado el desarrollo se programan recargas de datos para que la información esté actualizada. Por ejemplo, todas las noches se leen de nuevo los datos, se vuelcan en QVD, se transforman los datos y, con todo, se alimenta la aplicación que consume el Cliente.

No sé si he entendido lo que preguntas en concreto pero lo que puedes hacer para actualizar tu QVD es recargar los datos, volver a volcar la información de la base de datos en tu QVD de modo que si un registro ha sido eliminado en tu QVD no aparecerá tras la recarga.

Dime si no respondo a tu pregunta e intentamos darle una solución!

Saludos,

Jaime.

robertolpz
Contributor II
Contributor II
Author

Hola Jaime, buenos días. 

No me exprese correctamente, que es lo que necesito realizar.  Las actualizaciones se realizan mediante tareas, y se ejecutan segun el tamaño de datos de forma completa o incremental todas las noches. 

Hasta el momento el control incremental se realiza levantando de la tabla de BD en la sentencia SELECT los registros nuevos obtenidos por la fecha de alta o fecha de ultima modificación. Y luego se concatenan con la tabla QVD validando el indice creado en la misma.  Ejemplo: where not exists (ID)

Concretamente lo que necesito hacer es validar otro campo en el registro de la tabla QVD que puede haber cambiado. Y si cambio, actualizar ese campo o eliminarlo de la tabla QVD.

Saludos

Roberto

 

 

jaibau1993
Partner - Creator III
Partner - Creator III

Hola de nuevo Roberto. Creo que ahora sí te he entendido. Haces tu recarga incremental jugando con la fecha y el ID pero además ahora quieres comprobar si en la columna "Col1" (por ejemplo) el dato ha cambiado o ha desaparecido y, en función de eso modificar o eliminar el registro de tu QVD, ¿cierto?

No conozco en profundidad el problema pero se me ocurre lo siguiente: 

        1. Identificar la clave que determine cada una de las filas de tu tabla. Digamos que se llama Clave_Fila

        2. Crear una tabla (llamémosla MAP_COL1) de mapping con dos columnas: la clave de cada fila de la tabla y el valor actual de la columna "Col1"

La idea es que al cargar tu QVD mapees con la función ApplyMap el valor actual de "Col1" de modo que el dato siempre esté actualizado:

        3. Al cargar tu QVD mapea los datos de "Col1" con MAP_COL1:

ApplyMap('MAP_COL1', Clave_Fila, 'Dato no encontrado')

Si encuentra el valor de Clave_Fila en MAP_COL1, lo actualiza. Si no lo encuentra (es decir, si esa fila no se encuentra entre las que hay ahora mismo en la base de datos) entonces le asigna el valor 'Dato no encontrado'

        4. Elimina los registros que no deben ser cargados con una cláusula where. Al cargar tu QVD querrás quitar algunos elementos. La condición depende de lo que necesites, podría ser algo como

Where ApplyMap('MAP_COL1', Clave_Fila, 'Dato no encontrado') <> 'Dato no encontrado'

o algo similar.

Espero que mi idea aporte algo de claridad a tu problema!

Saludos,

Jaime.