Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
];
@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;
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
];
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
Thiago, tenta ver se o qvw em anexo te auxilia.
Entendi sua lógica, @rafaelattux , mas no meu caso não serve pois não prática a planilha tem várias datas, não apanas duas como no meu exemplo. Desculpe não ter sido mais claro.
@edson_souza , infelizmente não consigo abrir o seu arquivo por conta de limitação do servidor.
@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;
Boa @Thiago_Adriano , parabéns.
Se você quiser deixar o código mais "elegante" pode usar também o ApplyMap , com a chave concatenada.