Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
Thiago_Adriano
Contributor II
Contributor II

Valor nulo entre tabelas

Srs. minha dúvida é bem simples de resolver no Excel, mas no Qlik não consigo uma solução, tenho esperança de resolver por aqui.

Estou tentando colocar dentro da tabela Fato o "COMPONENTE"  que não estiver listado naquele dia, trazendo-o com "QTD" = 0.

Que no exemplo abaixo, seria o COMPONENTE = 5845503 na DATA = 27/07/2020 pois ele é o único que falta. 

Fato:

LOAD * INLINE [
DATA,PRODUTO, COMPONENTE, QTD
27/07/2020,58455,5845501,50
27/07/2020,58455,5845502,60
28/07/2020,58455,5845501,100
28/07/2020,58455,5845502,100
28/07/2020,58455,5845503,55
];

Cadastro:

LOAD * INLINE [
PRODUTO,COMPONENTE
58455,5845501
58455,5845502
58455,5845503
];

1 Solution

Accepted Solutions
Thiago_Adriano
Contributor II
Contributor II
Author

@rafaelattux , a sua indicação me ajudou a contruir uma solução. Postarei aqui para caso mais alguém tenha o mesmo problema.

Fato:
LOAD *, DATA&COMPONENTE as CHAVE;
LOAD * INLINE [
DATA,PRODUTO, COMPONENTE, QTD
27/07/2020,58455,5845501,50
27/07/2020,58455,5845502,60
28/07/2020,58455,5845501,100
28/07/2020,58455,5845502,100
28/07/2020,58455,5845503,55
];


Cadastro:

LOAD * INLINE [
PRODUTO,COMPONENTE
58455,5845501
58455,5845502
58455,5845503
];


Resultado_0:
LOAD
PRODUTO,COMPONENTE,1 AS NADA
Resident Cadastro;
LEFT JOIN LOAD
DATA,
PRODUTO
Resident Fato;

Resultado_1:
LOAD
DATA&COMPONENTE as CHAVE,
PRODUTO,COMPONENTE,DATA
Resident Resultado_0;

LEFT JOIN LOAD
CHAVE,
QTD
Resident Fato;

DROP TABLE Fato,Cadastro,Resultado_0;

Resultado:
LOAD
CHAVE,
PRODUTO,
COMPONENTE,
DATA,
If(IsNull(QTD), 0 , QTD) AS QTD,
1 AS NADA
Resident Resultado_1
;


DROP TABLE Resultado_1;
EXIT SCRIPT;

 

View solution in original post

6 Replies
Thiago_Adriano
Contributor II
Contributor II
Author

Caso eu não tenha sido claro suficiente, gostaria de obter o seguinte resultado:

Resultado:
LOAD * INLINE [
DATA,PRODUTO, COMPONENTE, QTD
27/07/2020,58455,5845501,50
27/07/2020,58455,5845502,60
27/07/2020,58455,5845503,0           <<<--------------essa linha precisa incluir usando a tabela cadastro
28/07/2020,58455,5845501,100
28/07/2020,58455,5845502,100
28/07/2020,58455,5845503,55
];

rafaelattux
Luminary Alumni
Luminary Alumni

Olá Thiago.

Para chegar no resultado esperado, você pode fazer um CONCATENATE da sua tabela CADASTRO para dentro da tabela FATO utilizando a função : WHERE NOT EXISTS

edson_souza
Contributor III
Contributor III

Thiago, tenta ver se o qvw em anexo te auxilia.

Thiago_Adriano
Contributor II
Contributor II
Author

Entendi sua lógica, 

 

Thiago_Adriano
Contributor II
Contributor II
Author

@rafaelattux , a sua indicação me ajudou a contruir uma solução. Postarei aqui para caso mais alguém tenha o mesmo problema.

Fato:
LOAD *, DATA&COMPONENTE as CHAVE;
LOAD * INLINE [
DATA,PRODUTO, COMPONENTE, QTD
27/07/2020,58455,5845501,50
27/07/2020,58455,5845502,60
28/07/2020,58455,5845501,100
28/07/2020,58455,5845502,100
28/07/2020,58455,5845503,55
];


Cadastro:

LOAD * INLINE [
PRODUTO,COMPONENTE
58455,5845501
58455,5845502
58455,5845503
];


Resultado_0:
LOAD
PRODUTO,COMPONENTE,1 AS NADA
Resident Cadastro;
LEFT JOIN LOAD
DATA,
PRODUTO
Resident Fato;

Resultado_1:
LOAD
DATA&COMPONENTE as CHAVE,
PRODUTO,COMPONENTE,DATA
Resident Resultado_0;

LEFT JOIN LOAD
CHAVE,
QTD
Resident Fato;

DROP TABLE Fato,Cadastro,Resultado_0;

Resultado:
LOAD
CHAVE,
PRODUTO,
COMPONENTE,
DATA,
If(IsNull(QTD), 0 , QTD) AS QTD,
1 AS NADA
Resident Resultado_1
;


DROP TABLE Resultado_1;
EXIT SCRIPT;

 

rafaelattux
Luminary Alumni
Luminary Alumni

Boa  @Thiago_Adriano  , parabéns.

Se você quiser deixar o código mais "elegante" pode usar também o ApplyMap , com a chave concatenada.