Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
jordansoares
Contributor III
Contributor III

CONCAT na extração de dados

Boa tarde! Estou tendo dificuldade com uma situação...

Minhas tabelas de movimento de produtos é separadas por mês e ano (Ex.: movprodd0719, movprodd0619, movprodd0519, etc). Estou tentando criar uma carga de dados pra armazenar em um QVD os últimos 6 meses de movimentação, para isso vou precisar passar por 6 tabelas de vendas, levando em consideração a data de hoje para trás. Pensei em criar algumas variaves em que consigo extrair o mês e ano desses 6 meses.

Ex:
vMes1 = Month(Today());
vMes2 = Month(Today()-30);
vMes3 = Month(Today()-60);
vMes4 = Month(Today()-90);
vMes5 = Month(Today()-180);
vAno1 = Year(Today());
vAno2 = Year(Today()-30);
vAno3 = Year(Today()-60);
vAno4 = Year(Today()-90);
vAno5 = Year(Today()-180);

agora gostaria de utilizar essas minhas variáveis no meu select para extrair as informações do bando de dados

Ex:
LOAD

Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;

SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM concat(movprodd,'$(vMes1)','$(vAno1)');

a ideia era fazer isso com todos os 6 meses,  mas dessa forma não está dando certo.

Alguém saberia me informar qual é a forma correta de fazer isso?

1 Solution

Accepted Solutions
jordansoares
Contributor III
Contributor III
Author

Não deu certo dessa forma! Consegui resolver o problema do seguinte modo:

//Data 1 mês antes da Atual.
LET vMesAno1 = Date(Addmonths(Today(),-0),'MMYY');
//Data 2 meses antes da Atual.
LET vMesAno2 = Date(Addmonths(Today(),-1),'MMYY');

mov_produtos:

Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;

SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM "public"."movprodd$(vMesAno1)";

Concatenate

Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;

SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM "public"."movprodd$(vMesAno2)";

View solution in original post

3 Replies
fernando_tonial
Employee
Employee

Olá, Concat é para transformar uma lista de valores em um Array.

https://help.qlik.com/pt-BR/sense/November2018/Subsystems/Hub/Content/Sense_Hub/Scripting/StringAggr...

Para esse seu caso, basta colocar as variáveis diretamente no SQL.

LOAD
Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;
SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM '$(vMes1)$(vAno1)';

 

Don't worry, be Qlik.
Tonial.

Don't Worry, be Qlik.
jordansoares
Contributor III
Contributor III
Author

Não deu certo dessa forma! Consegui resolver o problema do seguinte modo:

//Data 1 mês antes da Atual.
LET vMesAno1 = Date(Addmonths(Today(),-0),'MMYY');
//Data 2 meses antes da Atual.
LET vMesAno2 = Date(Addmonths(Today(),-1),'MMYY');

mov_produtos:

Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;

SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM "public"."movprodd$(vMesAno1)";

Concatenate

Date(mprd_datamvto) as [data_mvto],
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor;

SELECT mprd_datamvto,
mprd_unid_codigo,
mprd_prod_codigo,
mprd_qtde,
mprd_valor
FROM "public"."movprodd$(vMesAno2)";

fernando_tonial
Employee
Employee

Ok.
Você fez a mesma coisa, apenas colocou o nome correto da tabela.

É melhor você fazer um laço de repetição para ler esses dados. Senão terá que fazer manutenção no código todos os meses.

Don't worry, be Qlik.
Tonial.

Don't Worry, be Qlik.