Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
elopez2014
Contributor
Contributor

Crear diferentes ficheros qvd por valor del campo pais

Buenas noches,

¿Alguien podría decirme como puedo generar automáticamente diferentes ficheros qvd's (1 por país) teniendo en cuenta el campo país de una tabla ya carga anteriormente?

Muchas gracias

1 Solution

Accepted Solutions
JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Eduardo:

Disculpa me faltaron un par de cosillas:

Añade dentro del bucle

     vPais39 =  chr(39) & vPais & chr(39)


y modfica la SELECT


  SQL SELECT *

  FROM PROPUESTAS.dbo."ESTADISTICA_PERSO_ITEM" with (nolock)

  Where LAND1 = $(vPais39);


Saludos

Joaquín

View solution in original post

8 Replies
JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Eduardo:

Necesitas tres partes

1) Un load de tu tabla países, ésta no te la describo porque ya la tienes

2) Una rutina con dos partes, load de hechos + store

3) Un bucle por cada país

Saludos

Joaquín

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Aquí tienes el bucle, asumo que tu campo País pertenece a la tabla Países

vNumeroFilasPaises = NoOfRows('Paises');

FOR i = 1 to $(vNumeroFilasPaises )


     vPais =  Peek('Pais', $(i)-1, 'Paises');

     call CargaPaises;

     i = i +1;

Next;

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Aquí tienes la rutina a ejecutar por el bucle.

SUB CargaPaises;

LET vPath = ... aquí construyes tu path como te parezca apropiado

LET vQVDName = vPath & 'TuNombredeArchivo_' & vPais & '.qvd';

TusHechos:

LOAD *

SELECT *

Where PaisHechos = $(vPais)

STORE TusHechos into (vQVDName) (qvd);

DROP TABLE TusHechos;

ENDSUB;

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

He escrito en varios mensajes porque si el código está troceado será más fácil responder a tus dudas .

Por cierto, esto es muy importante: la rutina (SUB-ENDSUB) debe estar en el script antes que el CALL.

Espero que esto te sirva de ayuda

Joaquín

elopez2014
Contributor
Contributor
Author

Buenos días,

Gracias por la respuesta. He probado lo que me han enviado pero me salta el mensaje de error:

"SQL##f - SqlState: S0022, ErrorCode: 207, ErrorMsg: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Invalid column name 'CL'.

SQL SELECT *

  FROM PROPUESTAS.dbo."ESTADISTICA_PERSO_ITEM" with (nolock)

  Where LAND1 = CL"

El código que tengo escrito es:

TABLA_PAISES:

LOAD

  LAND1 as COD_PAIS;

SQL SELECT DISTINCT LAND1

FROM PROPUESTAS.dbo."PROPUESTA_CABECERA" with (nolock)

WHERE LAND1 IN ('CL','CO');

SUB CargaPaises;

  LET vPath = 'D:\';

  LET vQVDName = vPath & 'TuNombredeArchivo_' & vPais & '.qvd';

Tabla_detalle:

  LOAD *;

  SQL SELECT *

  FROM PROPUESTAS.dbo."ESTADISTICA_PERSO_ITEM" with (nolock)

  Where LAND1 = $(vPais);

STORE Tabla_detalle into $(vQVDName);

DROP TABLE Tabla_detalle;

ENDSUB;

vNumeroFilasPaises = NoOfRows('TABLA_PAISES');

FOR i = 1 to $(vNumeroFilasPaises)

     vPais =  Peek('COD_PAIS', $(i)-1, 'TABLA_PAISES');

     call CargaPaises;

     i = i +1;

Next;

Si necesitas algo mas no dudes en pedírmelo.

Gracias por tu ayuda

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Eduardo:

Disculpa me faltaron un par de cosillas:

Añade dentro del bucle

     vPais39 =  chr(39) & vPais & chr(39)


y modfica la SELECT


  SQL SELECT *

  FROM PROPUESTAS.dbo."ESTADISTICA_PERSO_ITEM" with (nolock)

  Where LAND1 = $(vPais39);


Saludos

Joaquín

elopez2014
Contributor
Contributor
Author

Ahora funcionó perfectamente.

Muchas gracias

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

De nada.

Si consideras que alguna respuesta te ha sido útil, márcala como tal

Hasta la próxima