Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
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.

38 Replies
Not applicable
Author

Boa noite, Alessandro,

Testei o script com for que você enviou, porém duas situações ocorreram:

1 ) No teste IF $(vBanco)=1 THEN  ele conecta no banco da matriz executa o script depois trava o computador.

     analisando identifiquei que a variável vBanco não é incrementada então adicionei um incremento antes do

     next  => vBanco = vBanco + 1; com isso ele se conecta em todas as base e executa o script depois trava

     nesta tela abaixo:

     TelaTrava.PNG

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Edlazaro,

segue um exemplo do laco sem conexão com banco para ver que não precisa incrementar na mão......O For faz isto.

O ideal seria deixar quem sabe 1 tabela e colocar trace para ver aonde para.

E se me permite uma sugestão,  troque todos os SELECT *

por

SELECT  CAMPO1,CAMPO2 From .....

Desta forma, a performance muda muito.  Para dar um exemplo, lendo 2 tabelas do SAP com * levava +20minutos. Com os campos que precisávamos, caiu o tempo para 2 minutos. Neste caso, as tabelas tinham +150campos.....Nao conheço as suas, mas como boa pratica, nunca usar o *......

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

  TRACE ================================;

  TRACE ====  $(vLoja)            ====;

  TRACE ================================;

  // ------------------------------

  Tabela:

  LOAD

    '$(vLoja)'            as Loja,

    CampoA,

    CampoB;

  LOAD * INLINE [

  CampoA,CampoB

  TesteA,TesteB

  ];

next

DISCONNECT;  

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

IMPORTANTE

Vi agora.  Na realidade nao tinha prestado muita atencao a imagem.   Tem chaves sinteticas nela.  Este é o motivo da demora.

Neste caso podes fazer assim

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

  If $(vBanco)= 1 THEN

      SET vTabela='Tabela:';

  ELSE

      SET vTabela='concatenate (Tabela)';

    ENDIF;

  TRACE ================================;

  TRACE ====   $(vLoja)             ====;

  TRACE ================================;

  $(vTabela)

  LOAD

     '$(vLoja)'            as Loja,

     CampoA,

     CampoB;

  LOAD * INLINE [

  CampoA,CampoB

  TesteA,TesteB

  ];

next

DISCONNECT;   

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

A parte que muda seria esta:

  If $(vBanco)= 1 THEN

      SET vTabela='Tabela:';

  ELSE

      SET vTabela='concatenate (Tabela)';

    ENDIF;

  TRACE ================================;

  TRACE ====   $(vLoja)             ====;

  TRACE ================================;

  $(vTabela)

  LOAD

     '$(vLoja)'            as Loja,

     CampoA,

     CampoB;

  LOAD * INLINE [

  CampoA,CampoB

  TesteA,TesteB

  ];

sendo que teria que dar uma trabalhada para atender as tabelas.  Neste caso fiz para uma......

furtado@farolbi.com.br
Not applicable
Author

Bom dia! Alessandro,

Seguir a sua recomendação no comando select, deixando somente os campos que preciso. Quanto ao travamento continua sempre para nas chave sintética, porém se executarmos somente em uma tabela não trava, não entendi

essa parte abaixo que você incluiu.

If $(vBanco)= 1 THEN

      SET vTabela='Tabela:';

  ELSE

      SET vTabela='concatenate (Tabela)';

    ENDIF;

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Para não travar com chaves sintéticas, depois da primeira leitura, usaríamos o concatenate para forçar o Qlik a colocar na mesma tabela os dados que estão sendo lidos.

Então basicamente seria,

vBanco = 1

Tabela:

LOAd

.....

vBanco=2

concatenate (Tabela)

LOAD

....

furtado@farolbi.com.br
Not applicable
Author

Alessandro,

Obrigado pela sua ajuda, mas infelizmente não funcionou a contento, com a utilização de chave sintética houve perda de performance/travamento ou eu não estou acertando implementar corretamente no script. Estarei pesquisando outras formas de implementar esse recurso. Caso alguém tenha mais alguma informação que possa ajudar fico grato.

Clever_Anjos
Employee
Employee

Como ficou sua modelagem final?

Anexe um print

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Edlazaro,

a ideia é não ter chave sintética.

Fiz um modelo que você pode rodar e deve funcionar.

Tem um bloco inicial que vai criar as tabelas com um campo chamado Lixo que depois sera removido.

Assim, os LOAD com concatenate funcionara e não vai criar chave sintética.

furtado@farolbi.com.br
Not applicable
Author

Alessandro,

Você poderia enviar o script em formato texto, estou usando a versão personal edition, não tenho com abrir qvw.

Obrigado!