Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
diegomorelli
New Contributor III

União de tabelas de BD diferente

Pessoal, boa tarde.

Tenho aqui na empresa uma solicitação cuja qual eu ainda não tratei.

Preciso trabalhar com vendas de dois bancos de dados. Um desses bancos de dados é de um antigo ERP meu, e o outro BD é do meu ERP atual.

Vamos lá, tenho as seguintes tabelas:

BD antigo (Viasoft):

Tabela: PPESCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

BD atual (Globus)

Tabela CODCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

Estou tratando aqui apenas uma das tabelas que tenho, que seriam em torno de 21 tabelas com informações de notas fiscais, vendas, quantidades, valores...

Preciso de uma força para saber qual a melhor maneira de tratar esses dados e unifica-los.

Obrigado comunidade         

41 Replies
fabionakashigue
Contributor

Re: União de tabelas de BD diferente

Diego,

Minha primeira pergunta:

Já virou a chave do ERP Antigo 100%?

Se sim

Pra mim você poderia criar um qvd de histórico com essas informações, ajustando corretamente no padrão certo.

E sempre ler ele depois de forma otimizada.

Att.

mario_sergio_ti
Valued Contributor

Re: União de tabelas de BD diferente

Os atributos em comum entre os sistemas, poderá unificar/padronizar em tabelas como de clientes, fornecedor, veículo, motorista... Utilizando recursos como Distinct, Exists, Mapping, Concatenate, Join, ...

Tente colocar as medidas numa tabela principal (Fato);

Cuidado com dimensões com muitos registros distintos, você se depara-rá com tabelas de viagens realizadas por exemplo que contém muitos registros.

Conheço um pouco do sistema Globus e já trabalhei com Transnet, soft para empresa de logística ou de transporte urbano/rodoviário.

diegomorelli
New Contributor III

Re: União de tabelas de BD diferente

Mario, o Globus é um baita sistema no meu ver e é isso mesmo, é do ramo de transportes/materias/vendas.

O Globus é oracle e meu antigo ERP, o viasoft é firebird.

Minha preocupação é tratar essas datas que são em formatos diferentes, vendas para clientes que tinha no banco antigo e não tenho mais no novo e essas coisas.

Tenho um cadastro de clientes no sistema antigo e tenho um no sistema novo, onde no sistema novo só trouxe os clientes que eram ativos. Então vejamos: terei vendas para clientes antigos e para clientes novos, e também para clientes que estão no sistema antigo e novo.

Só preciso pegar o fio da meada, e ai eu consigo ir esmiuçando a coisa toda.

Obrigado.

diegomorelli
New Contributor III

Re: União de tabelas de BD diferente

Fábio, isso mesmo. O meu ERP antigo já foi 100% inativado. Agora estamos em produção totalmente no ERP novo.

mario_sergio_ti
Valued Contributor

Re: União de tabelas de BD diferente

Entendo, é uma boa empreitada o trabalho que pegou.

Bem vindo ao Oracle...

Referente as datas, quando for gerar os QVDs, poderá formata-las, tipo:

Gerar Data de um Timestamp

  Date(Floor(Date#([CAMPO_TIMESTAMP],'YYYY-MM-DD hh:mm:ss')),'DD/MM/YYYY') As 'Data'

Gerar Tempo de um Timestamp

  Date(Frac(Date#([CAMPO_TIMESTAMP],'YYYY-MM-DD hh:mm:ss')),'hh:mm:ss') As 'Tempo'

A mascara da função Date#() tem que ser igual ao da fonte de origem;

Mantenha as horas separadas das datas por questão de performance.

Referente aos cadastros, utilize campos como CNPJ, CPF, NF em comum entre os sistemas para tratar as associações, Concatenate, Join, Mapping, chaves tipo:

Auternumber([CNPJ],'FORNECEDOR') As '%SK_FORNECEDOR'

Abraço

maiconmello
Contributor III

Re: União de tabelas de BD diferente

Diego, ja fiz algumas coisas nesse sentido.

O que eu fiz e faria no seu caso.

Faria a leitura do banco de dados histórico 1 vez e salva em QVD.

Popula esse QVD, e cria uma flag apenas para identificar que é histórico.

String conexao firebird;

Exemplo :

Load 'Viasoft' as Flag_Identifica_Sistema,Cod_cli , CNPJ_cli , todos os campos ;

Select * from tabela do banco historico;

//Quando ler o novo banco de um concatenate com o historico, deixando todos os campos com a mesma nomenclaturas.

concatenate

String conexao oracle;

Load 'Globus' as Flag_Identifica_Sistema,Cod_cli,CNPJ_cli, todos os campos ;

Select * from tabela banco novo;

Assim vai juntando as tabelas, formatando os campos datas por exemplo para que fique iguais nas duas tabelas entre outros campos mais necessários a tratar para deixar iguais entre uma tabela e outra.

Campos que cada sistema tem sua particularidade , não tem problema.

Lembrando que as conexões devem ser criadas no odbc  do windows, dentro da aba DSN de sistema.

Espero ter ajudado de alguma forma.

diegomorelli
New Contributor III

Re: União de tabelas de BD diferente

Pessoal, vamos lá. Vamos começar do básico e mais detalhado para que eu possa entender direitinho.

Nesse print tenho os dados do meu antigo BD (Viasoft) cujo já está 100% inativo, pois já estamos em produção no novo erp.

Vejam que aqui tenho as colunas NOME, FANTASIA, CGC, CPF. Total de linhas 1939.

(Figura1)

Viasoft.jpg

Aqui na sequência estou listando os dados do meu novo erp (Globus) onde tenho as colunas RSOCIALCLI, NFANTASIACLI, NRINSCRICAOCLI. Total de linhas 977.

(Figura2)

Globus.jpg

Vejamos, no antigo BD (figura1) temos o campo CGC e CNP separados, e no BD atual (Figura2) temos essas mesmas informações no campo NRINSCRICAOCLI.

Como deveria modelar essas dados da melhor maneira? No meu script de carga fiz o seguinte:

Load Nome, Fantasia, Cgc& '|' &Cpf as NRINSCRICAOCLI, para então na transformação eu concatenat com a tabela do BD novo (Globus), porém as informações ficaram erradas.

Resumindo, pela lógica voou utilizar esse campo de Cnpj e Cpf para unir as duas tabelas.

O que eu pensei, pegar o campo Cgc e Cpf e unir os dois e criar um novo campo colocando em uma tabela auxilia, em seguida pegar o campo Nrinscricaocli e criar uma outra tabela auxiliar.

Uso o Resident ou left join ou concateno?

Agradeço se alguém puder ajudar, tenho varias tabelas para tratar, porém se eu conseguir tratar a primeira da maneira correta as outras eu vou me virando.

Obrigado pessoal.

maiconmello
Contributor III

Re: União de tabelas de BD diferente

Vamos la :

string conexao odbc do banco Viasoft;

//Viasoft

Load NOME, FANTASIA, if(IsNull(cpf),cgc,cpf) as NRINSCRICAOCLI;

select * from Tabela;

concatenate

string conexao odbc do banco globus;

//globus

Load RSOCIALCLI as NOME,  NFANTASIACLI as FANTASIA, NRINSCRICAOCLI;

select * from tabela;

Algo nesse sentido !

fabionakashigue
Contributor

Re: União de tabelas de BD diferente

Maicon,

Ao invés dele fazer toda vez a conexão com o banco do ERP Antigo, eu aconselho criar um qvd historico.

Vou citar o exemplo:

Cria um qvw apenas para gerar o historico

//Viasoft

Historico:

Load NOME, FANTASIA, if(IsNull(cpf),cgc,cpf) as NRINSCRICAOCLI;

select * from Tabela;

Store Historico Into ... historico.qvd (qvd);

Aí na sua aplicação você apenas carrega este arquivo.

Load *

From ERP Novo

Concatenate

Load *

From historico;