Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Senhores, Boa tarde!
Estou com a seguinte situação, tenho 4 banco de dados, uma matriz e três filiais, implementei na interface quatro botões onde escolho qual quero realizar a analise e faço a carga dos dados. Agora preciso realizar uma analise comparativa onde mostre as vendas, e outras informações de todas de uma forma consolidada, o que vocês recomendam para poder implementar essa recurso.
Desde já agradeço a quem possa me orientar.
Abraço.
Edlazaro,
Bom dia!
Modifiquei seu Script para que ele gere um QVD para cada tabela depois junte tudo. Usei uma rotina que irá manter o uso de memória RAM mais baixo possível.
Os QVDs finais estão programados para serem salvos numa subpasta chamada "QVDs" mas você pode alterar esse comando e deixar tudo junto se quiser.
Obviamente não tive como testar aqui. Quando o Script terminar o QVW deve estar sem dados e os QVDs prontos para um nova carga no seu painel de análise. Segue o Script:
//------------------------------------ Inicio do script ---------------------------------------------------------------------------
//------------------------------------ CARGA ---------------------------------------------------------------------------
SET vBanco = 1;
DO WHILE vBanco <= 4
IF $(vBanco)=1 THEN
SET vLoja=Matriz;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Matriz;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
ELSE
IF $(vBanco)=2 THEN
SET vLoja=Feira;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Feira;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
ELSE
IF $(vBanco)=3 THEN
SET vLoja=VCA;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=VCA;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
ELSE
IF $(vBanco)=4 THEN
SET vLoja=Aracaju;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Aracaju;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
ENDIF
ENDIF
ENDIF
ENDIF
// ------------------------------
[Vendedores]:
LOAD
fun_cd as [Código Vendedor],
fun_nm as [Nome Vendedor];
SQL
SELECT fun_cd,
fun_nm
FROM "TAB_FUN";
STORE Vendedores into Vendedores_$(vLoja).qvd (qvd);
DROP Table Vendedores;
[Clientes]:
LOAD
cg_cd as [Código Cliente],
cg_nm as [Nome do Cliente],
segm_cdbalcao as [Código Segmento1],
segm_cdoficina as [Código Segmento2];
SQL
SELECT cg_cd,
cg_nm,
segm_cdbalcao,
segm_cdoficina
FROM "ger_cg";
STORE Clientes into Clientes_$(vLoja).qvd (qvd);
DROP Table Clientes;
[Departamento]:
LOAD
dep_cd as [Códido do Departamento],
dep_nm as [Nome do Departamento];
SQL
SELECT dep_cd,
dep_nm
FROM tab_dep;
STORE Departamento into Departamento_$(vLoja).qvd (qvd);
DROP Table Departamento;
[Marca]:
LOAD
tpd_cd as [Código da Marca],
tpd_ds as [Nome da Marca];
SQL
SELECT tpd_cd,
tpd_ds
FROM tab_tpd;
STORE Marca into Marca_$(vLoja).qvd (qvd);
DROP Table Marca;
[Segmento]:
LOAD
segm_cd as [Código Segmento],
segm_ds as [Nome do Segmento];
SQL
SELECT segm_cd,
segm_ds
FROM tab_segm;
STORE Segmento into Segmento_$(vLoja).qvd (qvd);
DROP Table Segmento;
[Loja]:
LOAD
emp_cd as [Código da Loja],
emp_dsres as [Nome da Loja];
SQL
SELECT emp_cd,
emp_dsres
FROM ger_emp;
STORE Loja into Loja_$(vLoja).qvd (qvd);
DROP Table Loja;
[Produtos]:
LOAD
pd_cd as [Código Produto],
pd_ds as [Descrição Produto],
tpd_cd as [Código da Marca],
pd_vlaquis as [Custo Reposição];
SQL
SELECT pd_cd,
pd_ds,
tpd_cd,
pd_vlaquis
FROM "ger_pd";
STORE Produtos into Produtos_$(vLoja).qvd (qvd);
DROP Table Produtos;
[Itens]:
LOAD
nf_nr as [Numero da NF],
pd_cd as [Código Produto];
SQL
SELECT nf_nr,
pd_cd
FROM ger_nfsi;
STORE Itens into Itens_$(vLoja).qvd (qvd);
DROP Table Itens;
[TipoVenda]:
LOAD
me_cd as [Tipo da Venda],
me_ds as [Descrição];
SQL
SELECT me_cd,
me_ds
FROM tab_me;
STORE TipoVenda into TipoVenda_$(vLoja).qvd (qvd);
DROP Table TipoVenda;
[Vendas]:
LOAD
cg_cd as [Código Cliente],
dep_cd as [Códido do Departamento],
nf_nr as [Numero da NF],
nf_dtemis as [Data de Emissão],
nf_vlliquido as [Valor da Venda],
nf_vldesc as [Valor Desconto],
me_cd as [Tipo da Venda],
fun_vend as [Código Vendedor];
SQL
SELECT cg_cd,
dep_cd,
nf_nr,
nf_dtemis,
nf_vlliquido,
nf_vldesc,
me_cd,
fun_vend
FROM "ger_nfs"
WHERE nf_dtemis > '2013/12/31';
//AND me_cd = 'VE01' OR me_cd = 'VE04';
STORE Vendas into Vendas_$(vLoja).qvd (qvd);
DROP Table Vendas;
LET vBanco = vBanco + 1;
LOOP;
//------------------------------------ JUNÇÃO DOS QVDS ---------------------------------------------------------------------------
[Vendedores]:
LOAD * FROM Vendedores_*.qvd (qvd) Where Not Exists ([Código Vendedor]);
STORE Vendedores into .\QVDs\Vendedores.qvd (qvd);
DROP Table Vendedores;
[Clientes]:
LOAD * FROM Clientes_*.qvd (qvd) Where Not Exists ([Código Cliente]);
STORE Clientes into .\QVDs\Clientes.qvd (qvd);
DROP Table Clientes;
[Departamento]:
LOAD * FROM Departamento_*.qvd (qvd) Where Not Exists ([Códido do Departamento]);
STORE Departamento into .\QVDs\Departamento.qvd (qvd);
DROP Table Departamento;
[Marca]:
LOAD * FROM Marca_*.qvd (qvd) Where Not Exists ([Código da Marca]);
STORE Marca into .\QVDs\Marca.qvd (qvd);
DROP Table Marca;
[Segmento]:
LOAD * FROM Segmento_*.qvd (qvd) Where Not Exists ([Código Segmento]);
STORE Segmento into .\QVDs\Segmento.qvd (qvd);
DROP Table Segmento;
[Loja]:
LOAD * FROM Loja_*.qvd (qvd) Where Not Exists ([Código da Loja]);
STORE Loja into .\QVDs\Loja.qvd (qvd);
DROP Table Loja;
[Produtos]:
LOAD * FROM Produtos_*.qvd (qvd) Where Not Exists ([Código Produto]);
STORE Produtos into .\QVDs\Produtos.qvd (qvd);
DROP Table Produtos;
[Itens]:
LOAD * FROM Itens_*.qvd (qvd);
STORE Itens into .\QVDs\Itens.qvd (qvd);
DROP Table Itens;
[TipoVenda]:
LOAD * FROM TipoVenda_*.qvd (qvd) Where Not Exists ([Tipo da Venda]);
STORE TipoVenda into .\QVDs\TipoVenda.qvd (qvd);
DROP Table TipoVenda;
[Vendas]:
LOAD * FROM Vendas_*.qvd (qvd);
STORE Vendas into .\QVDs\Vendas.qvd (qvd);
DROP Table Vendas;
// .................................FIM DO SCRIPT ............................................
Espero que ele possa lhe ser útil.
Felicidades...
Edlazaro ,
Não entendi muito bem a parte dos botões. Quando você seleciona 1 é feito o reload do app?
Neste caso o mais correto seria você realizar a carga de todos os bancos de dados, concatenando as informações dos 4 e criando uma fato unica. A empresa (Filial ou Matriz) ficaria como um filtro na aplicação..
Caso possa, disponibilize um QVW com seu modelo de dados ou mesmo um Print screen dele..
Bom dia,
Precisa analisar, pelo que entendi , as bases são iguais.
Carrega sempre tudo, e jogue campos de dimensão como empresa entre outros campos que consegue separar os valores por empresa.
Isso facilita para geração de carga, pelo fato que sempre será uma carga só. Pode fazer um for validando e conectando em cada banco, ou pode criar 4 modelos , gerando os QVD e depois juntando os mesmos.
Mais recomendado seria criar um for no script, onde conecta cada banco de dados e gera a carga.
Espero ter ajudado.
Maicon Mello
Klaus,
Só novato na utilização da ferramenta Qlikview e estou usando a versão personal edition. Quanto aos botões foi uma forma que encontrei para poder carregar os dados de cada empresa, ao clicar no botão matriz ele se conectar ao banco matriz e faz a carga mas só mostrar dados da matriz, e assim com os demais. Só depois que percebi que vou precisar saber informações de uma forma consolidada.
Anexo meu script de carga.
Att,
Edlazaro
Edlazaro ,
Pelo que analisei as estruturas dos bancos de dados são idênticas, então fica mais fácil pra você entender.
O que terá de ser feito a principio:
- efetuar a carga das 4 empresas, CONCATENANDO as tabelas de mesmo nome. Como são estruturas iguais, elas vão concatenar automaticamente.
Anexei 2 arquivos de Script, efetue o mesmo passo para as outras 2 empresa.
- A tabela 'Loja' não está ligada com vendedor, nem com as vendas, nem com nada.. Você precisaria colocar o código da empresa 'emp_cd' também em alguma das outras tabelas.
Caso alguma coisa fique confusa, pesquise sobre "Modelagem Dimensional" ou "Modelagem de dados para Qlikview".. Essa é a base inicial para construção de qualquer projeto.
Traga todas as informações dos 4 bancos de uma vez, com uma coluna indicando a MAtriz/Filial.
Dai deixe que seu usuário selecione qual/quais filiais quer analizar
Clever,
Você poderia colocar um exemplo de como implementar a coluna indicando matriz/filial não conseguir entender.
Edlazaro,
O ideal é realmente unificar as bases. Concordo plenamente com o que colocaram Clever e Klaus.
So acrescentaria que voce tome alguns cuidados com relação alguns dados, pois, mesmo a estrutura das bases sendo idênticas algumas questões devem ser avaliadas para que voce tenha uma consolidação ideal dos dados.
Principalmente com relação aos cadastros.
Por exemplo, se voce tem um cadastro de produtos, onde o produto X na matriz tem o codigo 100 e em uma das filiais o codigo é 200, e as descrições não estão 100% iguais, isso pode te gerar problemas para consolidar os dados desse produto para as duas empresas.
Isso pode ocorrer para outros cadastros como clientes, fornecedores, etc....
Nesses casos voce precisaria dar um tratamento nessas informação para que o qlik entenda a relação entre essas informações de uma base para outra.
Casos os cadastros sejam unificados e as informações 100% indenticas voce nao terá nenhum problema.
Edlazaro,
segue um modelo de exemplo com um laço dos 4 bancos
Perceba que não tem concatenate pois o Qlik identifica que são campos iguais da tabela e faz um autoconcatenate.....
Obviamente não deu para testar.......
Se tiver o personal, segue o script....
For vBanco= 1 to 4
IF $(vBanco)=1 THEN
SET vLoja=Matriz;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Matriz;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
Endif
IF $(vBanco)=2 THEN
SET vLoja=Feira;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Feira;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
Endif
IF $(vBanco)=3 THEN
SET vLoja=VCA;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=VCA;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
Endif
IF $(vBanco)=4 THEN
SET vLoja=Aracaju;
OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Aracaju;Data Source=x.x.x.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=NOTEDLAZARO;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is STNVLaJOBDdeGZVNBbcIXSJOSBMCTYAIASTA);
ENDIF
// ------------------------------
[Vendedores]:
LOAD
'$(vLoja)' as Loja,
fun_cd as [Código Vendedor],
fun_nm as [Nome Vendedor];
SELECT * FROM "TAB_FUN";
[Clientes]:
LOAD
'$(vLoja)' as Loja,
cg_cd as [Código Cliente],
cg_nm as [Nome do Cliente],
segm_cdbalcao as [Código Segmento1],
segm_cdoficina as [Código Segmento2];
SELECT * FROM "ger_cg";
[Departamento]:
LOAD
'$(vLoja)' as Loja,
dep_cd as [Códido do Departamento],
dep_nm as [Nome do Departamento];
SELECT * FROM tab_dep;
[Marca]:
LOAD
'$(vLoja)' as Loja,
tpd_cd as [Código da Marca],
tpd_ds as [Nome da Marca];
SELECT * FROM tab_tpd;
[Segmento]:
LOAD
'$(vLoja)' as Loja,
segm_cd as [Código Segmento],
segm_ds as [Nome do Segmento];
SELECT * FROM tab_segm;
[Loja]:
LOAD
'$(vLoja)' as Loja,
emp_cd as [Código da Loja],
emp_dsres as [Nome da Loja];
SELECT * FROM ger_emp;
[Produtos]:
LOAD
'$(vLoja)' as Loja,
pd_cd as [Código Produto],
pd_ds as [Descrição Produto],
tpd_cd as [Código da Marca],
pd_vlaquis as [Custo Reposição];
SELECT * FROM "ger_pd";
[Itens]:
LOAD
'$(vLoja)' as Loja,
nf_nr as [Numero da NF],
pd_cd as [Código Produto];
SELECT * FROM ger_nfsi;
[TipoVenda]:
LOAD
'$(vLoja)' as Loja,
me_cd as [Tipo da Venda],
me_ds as [Descrição];
SELECT * FROM tab_me;
[Vendas]:
LOAD
'$(vLoja)' as Loja,
cg_cd as [Código Cliente],
dep_cd as [Códido do Departamento],
nf_nr as [Numero da NF],
nf_dtemis as [Data de Emissão],
nf_vlliquido as [Valor da Venda],
nf_vldesc as [Valor Desconto],
me_cd as [Tipo da Venda],
fun_vend as [Código Vendedor];
SELECT * FROM "ger_nfs"
WHERE nf_dtemis > '2013/12/31';
//AND me_cd = 'VE01' OR me_cd = 'VE04';
next
DISCONNECT;