Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
FelipeMudrk
Contributor II
Contributor II

Relacionar campos de bases diferentes

Boa tarde, estou enfrentando um problema na minha carga de dados, estou usando ODBC connector para banco de dados Progress, e preciso relacionar um campo da DB1 (mov2unit) com a DB2(ems2cad), porém quando eu abro uma conexão nova, a antiga se fecha, perdendo assim a referência das tabelas anteriores, tem alguma forma de conectar em duas bases ao mesmo tempo sem fechar a conexão anterior? 

Ex:

SQL

SELECT *

FROM mov2unit.PUB."ped-venda" pv LEFT JOIN ems2cad.PUB."ped-item" pi
ON pv."nr-pedido" = pi."nr-pedcli"

 

Eu tentei gerar um arquivo QVD porém não da pra fazer um join de QVD com ODBC.

3 Replies
marco_almeida
Creator II
Creator II

Olá @FelipeMudrk  blz?

Você pode fazer as duas consultas separadamente. O Qlik faz relacionamentos por meio de associação de nomes iguais, ou seja, caso você tenha a tabela A com um campo "chave" e a tabela B com um campo "chave" há um relacionamento entre essas duas tabelas.

No Qlik, também, quando você carrega uma tabela, seja de arquivo, seja de um banco de dados, ela permanece na memória até que seja dropada. Por fim, a plataforma permite fazer JOINs entre tabelas na memória.

Sabendo de tudo isso o que pode ser feito é:

 

 

LIB CONNECT TO 'BD-A';

    TABELA:
    SELECT
        *
    FROM mov2unit.PUB."ped-venda";

DISCONNECT;

LIB CONNECT TO 'BD-B';

    LEFT JOIN(TABELA)
    SELECT
        *
        , nr-pedcli as nr-pedido
    FROM ems2cad.PUB."ped-item";

DISCONNECT;

 

 

O efeito será o mesmo quando as tabelas existem no mesmo banco de dados.

Mas tome cuidado com os nomes dos campos. Se existirem mais campos com o mesmo nome entre as tabelas, todos serão usados para fazer o chaveamento.

Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ
Pedro_Ribeiro
Contributor III
Contributor III

Olá @FelipeMudrk .

Não há problema algum em utilizar a conexão ODBC para extração de dados do seu Datasul, mas sugiro que você faça a extração bruta dos dados da tabela (conectada via ODBC) e armazene em um QVD. Coloque uma rotina para isso nas suas Tasks. Depois, utilize este QVD como fonte de dados para construção do seu APP e renomeie o campo que deseje fazer o relacionamento. Além do ganho de performance do servidor, não terá problemas com a quantidade conexões ODBC com o banco do seu Datasul.

Logo, vc teria um APP sem a camada de visualização apenas para gerar o QVD da tabela, e outro APP que consome os dois QVDs e aí não terá problema para fazer o join que precisa, desde que os campos estejam com o mesmo nome. Lembrando que basta renomear os campos, caso os nomes estejam armazenados de maneira diferente na tabela do banco.

FelipeMudrk
Contributor II
Contributor II
Author

Opa obrigado,

Então, minha ideia é salvar em QVDs mesmo, porém eu preciso fazer um WHERE na minha busca para filtrar pela data, pois temos muitos anos de registros, só que a data fica na tabela do pedido, da base 1, e a tabela do item do pedido fica na base 2 e essa não tem data pra filtro por isso precisava fazer o join antes de salvar em QVD, senão vai me trazer todos os registros e vai levar dias pra isso.