Tabela dinâmica simples para contar valores exclusivos

134

Parece uma tabela dinâmica simples para aprender. Gostaria de fazer uma contagem de valores exclusivos para um valor específico no qual estou agrupando.

Por exemplo, eu tenho isso:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

O que eu quero é uma tabela dinâmica que me mostre isso:

ABC   1
DEF   2

A tabela dinâmica simples que eu criei me fornece isso (uma contagem de quantas linhas):

ABC   3
DEF   4  

Mas quero o número de valores únicos.

O que realmente estou tentando fazer é descobrir quais valores na primeira coluna não têm o mesmo valor na segunda coluna para todas as linhas. Em outras palavras, "ABC" é "bom", "DEF" é "ruim"

Tenho certeza de que existe uma maneira mais fácil de fazer isso, mas pensei em tentar a tabela dinâmica ...

user1586422
fonte
8
Observe que, nas versões recentes do Excel, essa resposta é mais conveniente.
precisa saber é o seguinte

Respostas:

108

Insira uma terceira coluna e, em Cell, C2cole esta fórmula

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

e copie-o. Agora crie seu pivô com base na 1ª e 3ª coluna. Ver instantâneo

insira a descrição da imagem aqui

Siddharth Rout
fonte
+1 Acho que isso é um pouco mais fácil do que minha solução, porque não requer um valor especial para a primeira linha
lc.
2
Boa técnica. Eu não sabia sobre esse. Você pode fazer o mesmo com uma função de matriz =IF(SUM((A$2:A2=A2)*(B$2:B2=B2)) > 1, 0, 1)(pressione Ctrl-Shift-Enter ao inserir a fórmula para que ela adquira em {}torno dela).
ErikE
Resposta universal, não exigindo nenhum recurso específico. Apenas boas fórmulas simples.
Alberto De Caro
Alguma idéia de como estender isso para uma situação com três colunas?
tumultous_rooster
13
Observe que esta resposta NÃO fornecerá a solução correta se você filtrar algumas das linhas usando as opções de Tabela Dinâmica. Digamos que a primeira linha seja filtrada. A soma dos ABCs parecerá 0!
5135 jarlemag
250

ATUALIZAÇÃO: Agora você pode fazer isso automaticamente com o Excel 2013. Criei isso como uma nova resposta porque minha resposta anterior realmente resolve um problema um pouco diferente.

Se você possui essa versão, selecione seus dados para criar uma tabela dinâmica e, ao criar sua tabela, verifique se a opção 'Adicionar esses dados ao modelo de dados' está marcada (veja abaixo).

Marque a caixa ao lado de 'Adicionar esses dados ao modelo de dados'

Então, quando sua tabela dinâmica for aberta, crie suas linhas, colunas e valores normalmente. Em seguida, clique no campo que você deseja calcular a contagem distinta e edite as Configurações de valor do campo: Editar configurações de valor do campo

Por fim, role para baixo até a última opção e escolha 'Contagem distinta'. Escolha a opção 'Contagem Distinta'

Isso deve atualizar os valores da tabela dinâmica para mostrar os dados que você está procurando.

Meaghan Fitzgerald
fonte
5
@MichaelK seu muito melhor, se você tiver o Excel 2013
jrharshath
3
Isso também pode ser feito em tabelas dinâmicas existentes, para que não seja necessário recriar mais de 200 tabelas para obter acesso à funcionalidade de contagem distinta?
Louisa
12
Apenas um FYI: se você ainda não salvou seu arquivo como um arquivo do Excel (.xlsx) (por exemplo: você abriu um arquivo .csv), a opção "Adicionar esses dados ao modelo de dados" está desativada / acinzentada . A solução simples é salvar o arquivo como um arquivo do Excel.
PonyEars
9
Isso não é suportado no Mac? Esta opção não aparece para mim. Estou na versão 15.27.
jkupczak
4
Essa opção realmente não existe em um Mac, pois os Modelos de Dados em geral são um recurso apenas do Windows.
Tomty
10

Gostaria de lançar uma opção adicional na mistura que não requer uma fórmula, mas pode ser útil se você precisar contar valores exclusivos dentro do conjunto em duas colunas diferentes. Usando o exemplo original, eu não tinha:

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

e deseja que apareça como:

ABC   1  
DEF   2

Mas algo mais como:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

e queria que ele aparecesse como:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

Encontrei a melhor maneira de colocar meus dados nesse formato e, depois, poder manipulá-los ainda mais, usando o seguinte:

insira a descrição da imagem aqui

Depois de selecionar 'Total total em execução', escolha o cabeçalho do conjunto de dados secundário (nesse caso, seria o título do cabeçalho ou da coluna do conjunto de dados que inclui 123, 456 e 567). Isso fornecerá um valor máximo com a contagem total de itens desse conjunto, dentro do seu conjunto de dados principal.

Copiei esses dados, colei-os como valores e os coloquei em outra tabela dinâmica para manipulá-los mais facilmente.

Para sua informação, eu tinha cerca de um quarto de milhão de linhas de dados, portanto isso funcionou muito melhor do que algumas das abordagens de fórmula, especialmente aquelas que tentam comparar entre duas colunas / conjuntos de dados porque continuavam travando o aplicativo.

Meaghan Fitzgerald
fonte
Eu tive um problema completamente diferente, mas essa resposta me indicou a direção certa. Obrigado.
Jtolle
esta resposta se adapta às minhas necessidades, pois tenho 500.000 linhas necessárias para aplicar a fórmula e meu computador fica sem memória se estou tentando. obrigado!
precisa saber é o seguinte
6

Eu achei a abordagem mais fácil é usar a Distinct Countopção em Value Field Settings( clique esquerdo no campo no Valuespainel). A opção para Distinct Countestá no final da lista.

Local de onde clicar

Aqui estão o antes (TOP; normal Count) e o depois (INFERIOR; Distinct Count)

CONTAGEM

CONTAGEM DISTINTA

Peter
fonte
3
No Office 2016: Para poder usar esse recurso, a tabela dinâmica deve ser criada com a opção "Adicionar esses dados ao modelo de dados".
Leo
3

Não é necessário que a tabela seja classificada para que a fórmula a seguir retorne 1 para cada valor exclusivo presente.

assumindo que o intervalo da tabela para os dados apresentados na pergunta seja A1: B7, digite a seguinte fórmula na célula C1:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

Copie essa fórmula para todas as linhas e a última linha conterá:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

Isso resulta em um 1 sendo retornado na primeira vez que um registro é encontrado e 0 em todos os momentos seguintes.

Basta somar a coluna na sua tabela dinâmica

Jeff Baumet
fonte
2
Caso você tenha um grande conjunto de dados, use =IF(COUNTIF($B$1:$B1,B1),1,0)- dessa forma, o countif será executado apenas uma vez!
Peter Albert
2

Minha abordagem para esse problema foi um pouco diferente do que vejo aqui, então vou compartilhar.

  1. (Faça uma cópia dos seus dados primeiro)
  2. Concatenar as colunas
  3. Remova duplicatas na coluna concatenada
  4. Último - gira no conjunto resultante

Nota: Gostaria de incluir imagens para tornar isso ainda mais fácil de entender, mas não posso, porque este é meu primeiro post;)

Jacob Noone Wade
fonte
1

A resposta de Siddharth é fantástica.

No entanto , essa técnica pode ter problemas ao trabalhar com um grande conjunto de dados (meu computador congelou em 50.000 linhas). Alguns métodos menos intensivos em processador:

Verificação única de exclusividade

  1. Classifique pelas duas colunas (A, B neste exemplo)
  2. Use uma fórmula que analise menos dados

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

Várias verificações de exclusividade

Se você precisar verificar a exclusividade em colunas diferentes, não poderá confiar em dois tipos.

Em vez de,

  1. Classificar coluna única (A)
  2. Adicione fórmula cobrindo o número máximo de registros para cada agrupamento. Se o ABC tiver 50 linhas, a fórmula será

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    
workglide
fonte
2
Outra maneira possivelmente menos intensiva do processador é adicionar uma coluna C e em C2 =A2&B2. Em seguida, adicione uma coluna D e em D2 coloque =IF(MATCH(C2, C$2:C2, 0) = ROW(C1), 1, 0). Preencha os dois para baixo. Enquanto isso ainda pesquisa desde o início de todo o intervalo, ele para quando encontra o primeiro e, em vez de multiplicar os valores de 50.000 linhas, ele apenas precisa localizar o valor - para que ele tenha um desempenho muito melhor.
ErikE
@ ErikE Sharp - Eu também acho que sua técnica para na primeira descoberta. Mas se você tiver muitos valores exclusivos em C (exemplo: apenas 50 ABCs), continuará verificando grandes quantidades de dados. Recurso interessante: sua fórmula funciona melhor quando os dados não são classificados.
workglide
1

O Excel 2013 pode fazer Contagem distinta em pivôs. Se não houver acesso a 2013 e for uma quantidade menor de dados, eu faço duas cópias dos dados brutos e, na cópia b, seleciono as duas colunas e removo duplicatas. Em seguida, faça o pivô e conte sua coluna b.

Zachary
fonte
1

Você pode usar COUNTIFS para vários critérios,

= 1 / COUNTIFS (A: A, A2, B: B, B2) e arraste para baixo. Você pode colocar quantos critérios quiser lá, mas isso leva muito tempo para ser processado.

user5100077
fonte
1

Etapa 1. Adicione uma coluna

Etapa 2. Use a fórmula = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)no 1º registro

Etapa 3. Arraste-o para todos os registros

Etapa 4. Filtre '1' na coluna com a fórmula

Abhishek Verma
fonte
0

Você pode criar uma coluna adicional para armazenar a exclusividade e resumir isso na sua tabela dinâmica.

O que eu quero dizer é que a célula C1deve sempre ser1 . A célula C2deve conter a fórmula =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1). Copie esta fórmula para baixo para que a célula C3contenha =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)e assim por diante.

Se você tem uma célula de cabeçalho, convém movê-las todas para uma linha e sua C3fórmula deve ser =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).

lc.
fonte
0

Se você tiver os dados classificados .. sugiro usar a seguinte fórmula

=IF(OR(A2<>A3,B2<>B3),1,0)

Isso é mais rápido, pois utiliza menos células para calcular.

SumitB
fonte
0

Normalmente, ordeno os dados pelo campo em que preciso fazer a contagem distinta e depois uso IF (A2 = A1,0,1); você recebe um 1 na linha superior de cada grupo de códigos. Simples e não leva tempo para calcular em grandes conjuntos de dados.

Earmuffs gerais
fonte
0

Você também pode usar a coluna auxiliar VLOOKUP. Eu testei e parece um pouco mais rápido que COUNTIF.

Se você estiver usando o cabeçalho e os dados estiverem iniciando na célula A2, em qualquer célula da linha, use esta fórmula e copie em todas as outras células da mesma coluna:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
Marossik
fonte
-3

Eu encontrei uma maneira mais fácil de fazer isso. Referindo-se ao exemplo de Siddarth Rout, se eu quiser contar valores únicos na coluna A:

  • adicione uma nova coluna C e preencha C2 com a fórmula "= 1 / COUNTIF ($ A: $ A, A2)"
  • arraste a fórmula para o resto da coluna
  • gire com a coluna A como rótulo da linha e Soma {coluna C) nos valores para obter o número de valores exclusivos na coluna A
Mounir
fonte
Logicamente, isso não pode funcionar para o OP, porque não olha para a coluna B. Como você adaptará isso para trabalhar com várias colunas?
10113 ErikE