Skip to main content
Announcements
SYSTEM MAINTENANCE: Thurs., Sept. 19, 1 AM ET, Platform will be unavailable for approx. 60 minutes.
cancel
Showing results for 
Search instead for 
Did you mean: 
gsegreda
Contributor III
Contributor III

Cómo crear un control para evitar duplicar cargar datos

Hola Comunidad.

No se como colocar en el script de QlikSense un control para evitar que se dupliquen los datos al incorporar la nueva data, recibo un archivo cada mes y quiero actualizar una base de datos QVD.

Dentro de los nuevos datos no vienen fechas específicas, solo el número de mes y el año. Todos los datos que vienen en el archivo deben ser agregados al QVD.

Los campos de tiempo que tengo son estos:

Agradezco su siempre útil colaboración.

Gracias.

6 Replies
jolivares
Specialist
Specialist

Hola.... Asumiendo que ya tienes un QVD con datos anteriores y vas a agregar datos nuevos el proceso es como sigue:

Leer el QVD / Leer los datos nuevos / salvar la data en el nuevo QVD.

Mi_QVD

Load * From Mi_QVD;

Concatenate (Mi_QVD)

Load * From Datos_Nuevos

Store Mi_QVD...

No se si esto cumple con lo que quieres.  Cualquier otro detalle dejame saber.

gsegreda
Contributor III
Contributor III
Author

Estimado Juan.

Gracias por tu pronta respuesta.

Como lo mencionas ya sigo los mismos pasos, pero no se como agregar un control que impida duplicar los datos que ya están en el QVD.

Ya sucedió que el se duplicó un mes porque no se cambió por el archivo con los nuevos datos.

De nuevo agradezco tu ayuda.

hector_munoz
Specialist
Specialist

Hola Gustavo,

Si cada fichero contiene la información de un año+mes, o de varios pero completos lo que puedes hacer es lo siguiente:

// Se pueden cargar en un bucle (si los ficheros están en diferentes carpetas) o con máscara en

// el FROM como en este ejemplo

TABLA_FINAL:

LOAD    *

FROM    FICHERO_????_??.csv;

// Tabla con los meses cargados en el paso anterior

MESES_INCREMENTAL:

LOAD DISTINCT    Año_Mes    AS [MESES_INCREMENTAL Año_Mes]

RESIDENT         TABLA_FINAL;


// Se carga en TABLA_FINAL toda la información del QVD de histórico de aquellos meses que no

// estuviesen en los últimos ficheros cargados (incremental)

CONCATENATE    (TABLA_FINAL)

LOAD           *

FROM           QVD_HISTORICO.qvd (qvd)

WHERE          Not(Exists('MESES_INCREMENTAL Año_Mes', Año_Mes));


, de esta forma solo cargas del fichero histórico (QVD) aquellos meses que nos se encuentren en los ficheros cargados y que contienen la información nueva o actualizada.


Espero que te sirva...


Saludos,

H

gsegreda
Contributor III
Contributor III
Author

Hola Héctor.

Gracias por la ayuda.

Algo no estoy realizando bien poque no me cargan todos los datos.

Si me puedes ayudar indicando que estoy haciendo incorrecto te lo agradeceré. Incluyo el script tal como lo tengo en este momento.

Gracias!!!

Esta es la secuencia de las secciones son como están en el script.

tmpSKU:

LOAD

      MakeDate(Año,Mes) as Fecha,

      UPC,

      Sku

FROM [lib://QVD/Snacks.qvd]

(qvd);

mapSKU:

Mapping LOAD

      UPC,

      Sku

Resident tmpSKU

Order by Fecha Desc;

DROP Table tmpSKU;

Snacks:

LOAD

    ApplyMap('mapSKU', UPC, Null()) as [Artículo],

    DATE(MakeDate(Año,Mes),'MMM-YYYY')as MesAño,

    makedate(Año,Mes) as Fecha,

    Año,

    Mes,

    Año_Mes,

    Sku,

    UPC,

    Categoría,

    Unidades_Estandar

FROM [lib://QVD/Snacks.qvd]

(qvd)

WHERE Not(Exists('Mesnuevo MesAño', MesAño));

(Este es uno de los archivos de donde se cargan los nuevos datos.)

Snacks:

Concatenate (Snacks)

LOAD

    ApplyMap('mapSKU', UPC, Null()) as [Artículo],

    DATE(MakeDate(Año,Mes),'MMM-YYYY')as MesAño,

    makedate(Año,Mes) as Fecha,

    Año,

    Mes,

    Año_Mes,

    SKU as Sku,

    UPC,

    Categoría,

    Unidades_Estandar

FROM [lib://Chocolates/Chocolates.xlsx]

(ooxml, embedded labels, table is New);

NuevosDatos:

Concatenate (Snacks)

LOAD

    ApplyMap('mapSKU', UPC, Null()) as [Artículo],

    DATE(MakeDate(Año,Mes),'MMM-YYYY')as [MesAño],

    makedate(Año,Mes) as Fecha,

    Año,

    Mes,

    Año_Mes,

    SKU as Sku,

    UPC,

    Categoría,

    Unidades_Estandar

FROM [lib://Nuevos Datos/SnacksNuevo.xlsx]

(ooxml, embedded labels, table is New);

Store Snacks into [lib://QVD/Snacks.qvd]

(qvd);

hector_munoz
Specialist
Specialist

Hola Gustavo,

Varias cosas que veo:

  • Yo primero crearía las tablas de mapeo, igual que has hecho tú.
  • A continuación cargaría la información nueva de los ficheros Chocolates.xlsx y SnacksNuevo.xlsx en la tabla 'Snacks'.
  • Aunque sea "inofensivo", yo quitaría la sentencia "NuevosDatos:" antes de hacer el CONCATENATE sobre la tabla 'Snacks' ya que puede inducir a error. Realmente al cargar los mismos campos (en número y nombre) que tiene ya otra tabla anterior, Qlik automáticamente los concatena en la primera por lo que no haría falta ni ponerle nombre a la tabla ni usar el CONCATENATE. Es precisamente cuando no quieres que Qlik concatene en una tabla previa con la misma estructura que la que vas a crear cuando tienes que usar el NOCONCATENATE. Este punto es solo de culturilla general, pero ya puestos... 😉
  • Luego crearía una tabla con los valores distintos del campo [Mes Año] (creado con la fórmula Date(MakeDate(Año,Mes),'MMM-YYYY')) de la tabla 'Snacks' y lo llamaría p.e. [DISTINTOS Mes Año]
  • Finalmente, cargaría la información del QVD histórico con un WHERE así:

          WHERE Not(Exists('DISTINTOS Mes Año', MesAño))

  • Luego borraría las tablas que nos sirviesen, etc.

Espero que te sirva...

Saludos,
H

gsegreda
Contributor III
Contributor III
Author

Hola Héctor.

Me ha sido de gran ayuda que me diste semanas atrás.

Pero me puse a limpiar y reacomodar el script que ahora no logro que me funciones de nuevo.

De repente no mantiene los datos históricos y solo presenta los nuevos. Esto hace que me borre los datos históricos de QVD y la app solo presenta los datos de la fuente donde está lo nuevo.

Espero me puedas ayudar con esto para entender que estoy haciendo mal.

Sin duda al foro también  le será de mucha utilizadad.

Seguidamente te indico los pasos del Script.

Muchas gracias por tu valiosa ayuda.

//Script para datos Nuevos

Arroz_QVD:

LOAD

    ApplyMap('mapSKUNew', UPC, Null()) as [Artículo],

    DATE(MakeDate(Año,Mes.),'MMM-YYYY')as [MesAño],

    makedate(Año,[Mes.]) as Fecha,

    [Año],

    [Mes.],

    [Año_Mes],

    [SKU],

    [UPC],

    APPLYMAP( 'Desc_PosMapping', [Desc_Pos]) AS Desc_Pos,

   [Ventas_Unidades],

   [Ventas_Valor],

FROM [lib://Nuevos Datos/Nuevos_Datos.xlsx]

(ooxml, embedded labels, table is Datos);

 

//Script para cargar QVD Histórico

LOAD DISTINCT

DATE(MakeDate(Año,Mes.),'MMM-YYYY') as [DISTINTOS Mes Año]

FROM [lib://QVD/Arroz.qvd]

(qvd);

 

LOAD

    ApplyMap('mapSKU', UPC, Null()) as [Artículo],

    DATE(MakeDate(Año,Mes.),'MMM-YYYY')as [MesAño],

    makedate(Año,[Mes.]) as Fecha,

    [Año],

   [Mes.],

    [Año_Mes],

    [SKU],

    [UPC],

    APPLYMAP( 'Desc_PosMapping', [Desc_Pos]) AS Desc_Pos,

   [Ventas_Unidades],

   [Ventas_Valor],

FROM [lib://QVD/Arroz.qvd]

(qvd)

WHERE Not(Exists('DISTINTOS Mes Año', MesAño));

 

//Script para agregar los nuevos datos al QVD Histórico

Store Arroz_QVD into [lib://QVD/Arroz.qvd]

(qvd);

 

clipboard_image_1.png

clipboard_image_0.png