web-dev-qa-db-fra.com

Tableau croisé dynamique simple pour compter des valeurs uniques

Cela semble être un simple tableau croisé dynamique pour apprendre. J'aimerais effectuer un décompte de valeurs uniques pour une valeur particulière sur laquelle je suis groupé.

Par exemple, j'ai ceci:

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

Ce que je veux, c'est un tableau croisé dynamique qui me montre ceci:

ABC   1
DEF   2

Le tableau croisé dynamique que je crée me donne simplement ceci (nombre de lignes):

ABC   3
DEF   4  

Mais je veux plutôt le nombre de valeurs uniques.

Ce que j'essaie vraiment de faire est de déterminer quelles valeurs de la première colonne n'ont pas la même valeur dans la deuxième colonne pour toutes les lignes. En d'autres termes, "ABC" est "bon", "DEF" est "mauvais"

Je suis sûr qu'il existe un moyen plus simple de le faire, mais j'ai décidé d'essayer le tableau croisé dynamique ...

133
user1586422

Insérer une 3ème colonne et dans la cellule C2 coller cette formule

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

et le copier. Créez maintenant votre pivot basé sur les 1ère et 3ème colonnes. Voir l'instantané

enter image description here

106
Siddharth Rout

MISE À JOUR: Vous pouvez le faire maintenant automatiquement avec Excel 2013. Je l'ai créé comme nouvelle réponse car ma réponse précédente résolvait en réalité un problème légèrement différent.

Si vous possédez cette version, sélectionnez vos données pour créer un tableau croisé dynamique. Lorsque vous créez votre tableau, assurez-vous que l'option "Ajouter ces données au modèle de données" est cochée (voir ci-dessous).

Tick the box next to 'Add this data to the Data Model'

Ensuite, lorsque votre tableau croisé dynamique s'ouvre, créez vos lignes, colonnes et valeurs normalement. Cliquez ensuite sur le champ dont vous souhaitez calculer le nombre distinct et modifiez les paramètres de valeur du champ: Edit field value settings

Enfin, faites défiler jusqu'à la dernière option et choisissez "Nombre distinct". Choose the option 'Distinct Count'

Cela devrait mettre à jour les valeurs de votre tableau croisé dynamique pour afficher les données que vous recherchez.

246
Meaghan Fitzgerald

J'aimerais ajouter une option supplémentaire au mélange qui ne nécessite pas de formule, mais qui peut s'avérer utile si vous devez comptabiliser des valeurs uniques au sein de l'ensemble sur deux colonnes différentes. En utilisant l'exemple original, je n'avais pas:

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

et je veux qu'il apparaisse comme:

ABC   1  
DEF   2

Mais quelque chose de plus semblable à:

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

et voulait qu'il apparaisse comme:

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

J'ai trouvé le meilleur moyen d'obtenir mes données dans ce format, puis de pouvoir les manipuler plus avant, c'était d'utiliser les éléments suivants:

enter image description here

Une fois que vous avez sélectionné 'Running total in', choisissez l'en-tête du jeu de données secondaire (dans ce cas, il s'agirait du titre de l'en-tête ou de la colonne du jeu de données comprenant 123, 456 et 567). Cela vous donnera une valeur maximale avec le nombre total d'éléments dans cet ensemble, dans votre ensemble de données primaire.

J'ai ensuite copié ces données, les ai collées sous forme de valeurs, puis les ai placées dans un autre tableau croisé dynamique pour les manipuler plus facilement.

Pour votre information, j'avais environ un quart de million de lignes de données, donc cela fonctionnait beaucoup mieux que certaines des approches de formule, en particulier celles qui essayent de comparer deux colonnes/ensembles de données parce que l'application ne cessait de planter.

10
Meaghan Fitzgerald

La possibilité d'effectuer un "décompte distinct" fait partie d'Excel 2013 mais n'est pas activée automatiquement.

Donc, si vous utilisez une copie Excel 2013, voici une manière brillante de résoudre ce problème sans avoir à passer par une fonction: http://datapigtechnologies.com/blog/index.php/distinct-count-in- tableaux-pivots-enfin-dans-Excel-2013 /

7
Greg

J'ai trouvé que l'approche la plus simple consiste à utiliser l'option Distinct Count sous Value Field Settings ( à gauche cliquez sur le champ dans le volet Values). L'option pour Distinct Count se trouve tout en bas de la liste.

Location of where to click

Voici l'avant (TOP; normal Count normal) et après (BOTTOM; Distinct Count)

COUNT

DISTINCT COUNT

6
Peter

Voir Debra Dalgleish's Count Unique Items

enter image description here

4
brettdj

Il n'est pas nécessaire que la table soit triée pour la formule suivante pour renvoyer un 1 pour chaque valeur unique présente.

en supposant que la plage du tableau pour les données présentées dans la question est A1: B7 entrez la formule suivante dans la cellule C1:

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

Copiez cette formule dans toutes les lignes et la dernière ligne contiendra:

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

Cela se traduit par un 1 renvoyé la première fois qu'un enregistrement est trouvé et par la suite à 0 pour toujours.

Il suffit de résumer la colonne dans votre tableau croisé dynamique

3
Jeff Baumet

Mon approche de ce problème était un peu différente de celle que je vois ici, alors je vais la partager.

  1. (Faites d'abord une copie de vos données)
  2. Concaténer les colonnes
  3. Supprimer les doublons sur la colonne concaténée
  4. Last - pivot sur le jeu résultant

Note: Je voudrais inclure des images pour rendre cela encore plus facile à comprendre, mais je ne peux pas parce que c'est mon premier post;)

2
Jacob Noone Wade

La réponse de Siddharth est fantastique.

Cependant , cette technique peut poser problème lorsque vous travaillez avec un grand ensemble de données (mon ordinateur a gelé sur 50 000 lignes). Quelques méthodes moins gourmandes en ressources processeur:

Vérification d'unicité unique

  1. Trier par les deux colonnes (A, B dans cet exemple)
  2. Utilisez une formule qui examine moins de données

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

Contrôles d'unicité multiples

Si vous devez vérifier l'unicité dans différentes colonnes, vous ne pouvez pas compter sur deux types.

Au lieu,

  1. Trier la colonne unique (A)
  2. Ajoutez une formule couvrant le nombre maximum d’enregistrements pour chaque groupe. Si ABC peut avoir 50 lignes, la formule sera

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    
1
workglide

Excel 2013 peut faire un décompte distinct en pivots. S'il n'y a pas d'accès à 2013 et que la quantité de données est réduite, je fais deux copies des données brutes, et dans la copie b, sélectionnez les deux colonnes et supprimez les doublons. Ensuite, faites le pivot et comptez votre colonne b.

1
Zachary

Vous pouvez utiliser COUNTIFS pour plusieurs critères,

= 1/PAYTIFS (A: A, A2, B: B, B2) et faites glisser ensuite. Vous pouvez définir autant de critères que vous le souhaitez, mais le processus prend généralement beaucoup de temps.

1
user5100077

Étape 1. Ajouter une colonne

Étape 2. Utilisez la formule = IF(COUNTIF(C2:$C$2410,C2)>1,0,1) dans le premier enregistrement

Étape 3. Faites-le glisser vers tous les enregistrements.

Étape 4. Filtrez '1' dans la colonne avec la formule

1
Abhishek Verma

Vous pouvez également utiliser pour la colonne auxiliaire VLOOKUP. J'ai testé et semble un peu plus rapide que COUNTIF.

Si vous utilisez un en-tête et que les données commencent dans la cellule A2, alors, dans n'importe quelle cellule de la ligne, utilisez cette formule et copiez-la dans toutes les autres cellules de la même colonne:

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

J'ai l'habitude de trier les données par le champ dont j'ai besoin pour faire le nombre distinct de puis utiliser IF (A2 = A1,0,1); vous obtenez alors un 1 dans la rangée supérieure de chaque groupe d'identifiants. Simple et ne prend pas de temps à calculer sur de grands ensembles de données.

0
General Earmuffs

Si vous avez les données triées .. je suggère d'utiliser la formule suivante

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

Ceci est plus rapide car il utilise moins de cellules à calculer.

0
SumitB

Vous pouvez créer une colonne supplémentaire pour stocker l'unicité, puis ajouter la somme que dans votre tableau croisé dynamique.

Ce que je veux dire, c'est que la cellule C1 devrait toujours être 1. La cellule C2 devrait contenir la formule =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1). Copiez cette formule pour que la cellule C3 contienne =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1) et ainsi de suite.

Si vous avez une cellule d'en-tête, vous voudrez tout déplacer d'une rangée vers le bas et votre formule C3 devra être =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).

0
lc.