Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Galera, bom dia.
Estou com uma dúvida acredito que seja básica para os feras aqui da Comunidade.
Tenho 2 tabelas uma chamada " Atendimentos " e outra chamada " Clientes " , onde possuem o mesmo nome de coluna chamada 'Pessoa' que trás o nome dos clientes.
Acontece que preciso fazer uma contagem de quantos clientes eu possuo somente na tabela " Clientes " e não na tabela " Atendimentos" .
Quando uso :
Count(distinct Pessoa)
Ele logicamente faz a contagem das 2 tabelas pois possuem o mesmo campo " Pessoa".
Pensei em alterar o nome do campo de uma das tabelas porém vou perder o relacionamento.
Conforme for a resposta nesse tópico usarei pra outras situações onde preciso usar apenas contagens de tabelas específicas.
Forte Abraço amigos!
Carlos,
Voce tem algunas opçoes para isso, vou te dar duas.
A primeira é manter o nome original do campo Pessoa para nao perder o relacionamento, porem duplicanodo ela na tabela de clientes e renomeando, por exemplo no load para esse campo voce teria duas linhas:
Pessoa,
Pessoa as Cliente_Pessoa,
Daí voce conta o campo Cliente_Pessoa.
Outra alternativa seria voce ter um campo que indique a tabela de origem dos registros da tabela de clientes, acrescentndo no load a seguinte linha por exemplo:
'CL' as Tb_Cliente,
Nesse caso a expressão para contagem seria:
Count({<Tb_Cliente={'CL'}>}distinct Pessoa)
Espero ter ajudado.
Bom dia Carlos,
Em seu Load cria uma string assim :
Load campos, 'Cliente' as TipoPessoa from tabela;
Na outra cria
'Atendimento' as TipoPessoa
No seu count pode usar assim : count({<TipoPessoa = {'Cliente'}Pessoa}>} assim ele irá buscar somente cliente.
Carlos,
Voce tem algunas opçoes para isso, vou te dar duas.
A primeira é manter o nome original do campo Pessoa para nao perder o relacionamento, porem duplicanodo ela na tabela de clientes e renomeando, por exemplo no load para esse campo voce teria duas linhas:
Pessoa,
Pessoa as Cliente_Pessoa,
Daí voce conta o campo Cliente_Pessoa.
Outra alternativa seria voce ter um campo que indique a tabela de origem dos registros da tabela de clientes, acrescentndo no load a seguinte linha por exemplo:
'CL' as Tb_Cliente,
Nesse caso a expressão para contagem seria:
Count({<Tb_Cliente={'CL'}>}distinct Pessoa)
Espero ter ajudado.
Amigo;
Não é recomendado realizar um Count() em campos chaves entre tabelas, por conta das cardinalidades;
No seu caso, utilize o Count() sobre um campo com densidade 100% (representando um registro por pessoa) e que não tenha ligação com a outras tabelas;
O ideal (boa prática) é criar um campo inteiro e sequencial na tabela que deseja contar;
Ex.:
Clientes:
Load
RowNo() As 'SEQ_CLIENTE',
Pessoa,
...
;
Se o registro de pessoa repetir na tabela Cliente, terá que utilizar Distinct;
De preferência em contar números.
Abraço.
Obrigado Mauro, fiz conforme sua primeira dica e deu certo.
Consegue me tirar uma outra dúvida rápida por aqui por gentileza?
Tenho nessa mesma tabela de 'Clientes' a data de cadastro deles. Fiz uma linha do tempo mas gostaria que ela fosse acumulando a soma de um periodo para o outro.
Exemplo:
Atualmente ele me mostra assim:
2015 = 10 clientes
2016 = 5 clientes
2017 = 6 clientes
Porém gostaria que fosse:
2015 =10 clientes
2016 = 10 + 5 = 15 clientes
2017 = 10 + 5 + 6 = 21 clientes
TO usando um Count Distinct Pessoa.
porém teria que usar alguma função de soma após o count acredito eu.
Carlos,
Voce está utilizando o sense ou o Qlikview?
O Sense
Incluindo saldo/acumulado via Script ou via Expressão
Carlos,
Tente o seguinte:
RangeSum(Above(count(ID_PEDI),0,NoOfRows(TOTAL)))
Analise a tabela e o grafico do QVF que estou anexando.
Sugiro tambem que de uma lida no post sugerido pelo mário.