10 Replies Latest reply: Nov 29, 2016 1:47 PM by Marciel Malta RSS

    Contar Valores

    Josemar oliveira

      Bom dia, pessoal!

       

      Sou muito novo no mundo do BI e se vocês pudessem me ajudar com algumas dúvidas que estão surgindo, eu ficaria muito agradecido.

       

      Eu usei dois arquivos para importar dados para o Qlik, depois criei dois objetos gráficos do tipo tabela. minha dúvida é a seguinte em uma das tabelas eu preciso contar quantos registros eu tenho na outra dada três condições. Eu usei o "count", usei também o "count" com "if", mas o resultado retornado é sempre a quantidades de itens resultantes do filtro da outra tabela.

       

      Vou ver se consigo exemplificar.

       

      Tabela 1                                          Tabela 2

      Item 1 | Item 2 | Item 3 | Item 4                  Item 1.1 | Item 2.1 | Item 3.1

      aaa     | 111     | 222      | ?                            aaa        | 111       | 000                       

      bbb     | 222     | 333      | ?                           bbb        | 222       | 000

      aaa     | 111     | 333      | ?                            aaa        | 111       | 000

      ddd     | 444     | 333     | ?

      aaa     | 222     | 444     | ?

       

      Nesse caso a coluna "Item 4" é calculada, e precisa retornar o valor da contagem feita na tabela 2, condicionada as colunas 1 e 2 da tabela 1. nesse caso a linha 1 receberia 2, a linha 5 retornaria 0 e etc.

       

      Obrigado!

        • Re: Contar Valores
          Yuri Nicolett

          Josemar, você ligou essas tabelas?

          Para compreender melhor, compartilhe um qvw de exemplo com o que precisa fazer

          • Re: Contar Valores
            Maicon Mello

            Nesse caso faria assim :

             

            Load Item 1 &  Item 2  as PK_Item, * from tabela1 ;

             

            Left join

            //obs: Cria o número 1 para cada linha que encontrar.

            Load Item 1.1 & Item 2.1  as PK_Item, 1 as identificador from tabela2;

             

            Na sua expressão você da o sum(Identificador) com as dimensões Item 1 , Item 2 .

            • Re: Contar Valores
              Tiago Fernando Cardoso

              Josemar, boa tarde.


              Sugestão:

              Como obter ajuda? Leia antes de postar

               

              Seu problema está bem simples, mas lá vai uma dica:

               

              Use apenas um campo para fazer ligação (relação) entre tabelas.

              Caso as tabelas tenham de ter dois campos iguais (com mesmo valor), ou você renomeia para que não crie chave sintética, ou você usa JOIN para unir as tabelas, podendo assim, usar o algum identificar único para tais dados agregados em uma tabela, exemplo:

               

              Tab1:

              LOAD

                  ID,

                  field1,

                  field2,

                  'Tabela_1'    AS Idenficador

              FROM [..]

               

              JOIN (Tab1)

              LOAD

                  ID,

                  field1.1,

                  field2.2,

                  'Tabela_2'    AS Idenficador

              FROM [..]

               

              Os campos ID e Identificador formaria uma chave sintética, e para resolver isso eu uni as tabelas.

               

              NOTA: Suas tabelas (print) têm chave sintética, e até onde eu sei, isso gera um cálculo errado de valores e deixa a aplicação menos rápida.

               

              Retomando: Dentro da aplicação você põe um campo de texto mesmo, com um COUNT simples para contar o número de registros de cada tabela, tendo como referência o Identificador que foi 'setado' para ela, na hora do JOIN.

               

              No exemplo eu usei SetAnalisys, não sei se você conhece, mas poupa um tempo meu amigo...

               

              Outra sugestão:

              Manual Set Analysis Completo em Português BR.

               

              Anexo também documento de exemplo.

               

              Espero que tenha sido útil,

               

              Att,

              Tiago Cardoso

              • Re: Contar Valores
                Josemar oliveira

                Bom tarde!

                Maicon e Tiago! obrigado pela atenção.

                 

                Demorei de responder, porque estava tentando fazer como vocês indicaram, mas não deu certo, maicon no seu caso o programa informava que não era possível encontrar os campos, mesmo fazendo alguns ajustes, até conseguir fazer a contagem, mas em alguns casos veio zerado e não conseguir resolver. Tiago do jeito que você indicou o programa travou tentando concatenar tudo mais de 300.000 registros na tabela, só um dia, então não deu para tentar, e outra coisa que fiquei em dúvida, se o conteúdo é diferente porque iria concatenar.

                 

                Fiz no excel como teria que ser.

                 

                aaa.jpg

                o que eu queria era isso aí, na coluna "E" conta-se quantas vezes o registro é encontrado na segunda tabela, obedecendo a dois critérios, o modelo e ano. Observe que o modelo gol tem duas variações na primeira tabela "Gol 2014" e "Gol 2015". o Gol 2014 não consta essa combinação na segunda tabela por isso retornou 0, já o Gol 2015 retornou 2.

                 

                Se alguém poder me ajudar, agradeço.

                • Re: Contar Valores
                  Tiago Fernando Cardoso

                  Boa Noite Josemar,

                   

                  Segue anexo um exemplo com os dados que você deu de exemplo.

                   

                  Conferi e bateu.

                   

                  Espero que lhe seja útil.

                   

                  Att,

                  Tiago Cardoso

                  • Re: Contar Valores
                    Marciel Malta

                    Boa tarde Josemar,

                     

                    Uma forma de reproduzir o arquivo Excel postado, realizando o calculo no script
                    a fim de ser mostrado em uma tabela simples.

                     

                    Table1:

                    load *

                    Inline [

                    modelo, ano ,id

                    Gol, 2014, 10

                    Gol, 2014, 20

                    Gol, 2014, 30

                    Gol, 2014, 50

                    Gol, 2015, 60

                    Gol, 2015, 70

                    Gol, 2015, 80

                    Gol, 2015, 90

                    Fox, 2014, 10

                    Fox, 2014, 20

                    Fox, 2014, 30

                    Fox, 2014, 40

                    Fox, 2015, 50

                    Fox, 2015, 60

                    Fox, 2015, 70

                    Fox, 2016, 80

                    Uno, 2015, 90

                    Uno, 2015, 10

                    Uno, 2016, 30

                    ];

                     

                    NoConcatenate

                     

                    Table2:

                    load *

                    Inline [

                    modelo2, ano2 ,id2

                    Gol, 2015, 10

                    Gol, 2015, 20

                    Gol, 2016, 30

                    Gol, 2016, 40

                    Fox, 2015, 10

                    Fox, 2015, 20

                    Fox, 2016, 30

                    Uno, 2016, 10

                    Uno, 2016, 20

                    ];

                     

                    NoConcatenate

                     

                    Final:

                    LOAD modelo

                      ,ano

                      ,id

                      ,modelo&ano as Chave

                    Resident Table1;

                     

                    Left Join (Final)

                     

                    LOAD count(id2) as Contagem

                      ,modelo2&ano2 as Chave

                    Resident Table2

                    Group by modelo2, ano2;

                     

                    DROP Table Table1;