Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
Not applicable

Analise consolidada

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.

Imagem1.PNG

Desde já agradeço a quem possa me orientar.

Abraço.

Tags (1)
1 Solution

Accepted Solutions
wellington1978
New Contributor III

Re: Analise consolidada

    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...

38 Replies
klaus_gibin
New Contributor II

Re: Analise consolidada

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..

maiconmello
Contributor III

Re: Analise consolidada

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

Not applicable

Re: Analise consolidada

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

klaus_gibin
New Contributor II

Re: Analise consolidada

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.

Employee
Employee

Re: Analise consolidada

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

Not applicable

Re: Analise consolidada

Clever,

Você poderia colocar um exemplo de como implementar a coluna indicando matriz/filial não conseguir entender.

mauroponte
Contributor II

Re: Analise consolidada

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.

MVP
MVP

Re: Analise consolidada

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.......

MVP
MVP

Re: Analise consolidada

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;