Простая сводная таблица для подсчета уникальных значений

134

Это похоже на простую сводную таблицу для изучения. Я хотел бы сделать подсчет уникальных значений для определенного значения, по которому я группирую.

Например, у меня есть это:

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

То, что я хочу, это сводная таблица, которая показывает мне это:

ABC   1
DEF   2

Простая сводная таблица, которую я создаю, просто дает мне это (количество строк):

ABC   3
DEF   4  

Но я хочу вместо этого количество уникальных значений.

То, что я действительно пытаюсь сделать, это выяснить, какие значения в первом столбце не имеют одинаковое значение во втором столбце для всех строк. Другими словами, «ABC» это «хорошо», «DEF» это «плохо»

Я уверен, что есть более простой способ сделать это, но я решил попробовать сводную таблицу ...

user1586422
источник
8
Обратите внимание, что для последних версий Excel этот ответ наиболее удобен.
Деннис Джаэруддин

Ответы:

108

Вставьте 3-й столбец и в ячейку C2вставьте эту формулу

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

и скопируйте его вниз. Теперь создайте свой пивот на основе 1-го и 3-го столбцов. Посмотреть снимок

введите описание изображения здесь

Сиддхарт Рут
источник
+1 Я думаю, что это немного проще, чем мое решение, потому что оно не требует специального значения для первой строки
lc.
2
Хорошая техника. Я не знал об этом. Вы можете сделать то же самое с функцией массива =IF(SUM((A$2:A2=A2)*(B$2:B2=B2)) > 1, 0, 1)(нажмите Ctrl-Shift-Enter при вводе формулы, чтобы она приобрела форму {}вокруг нее).
ErikE
Универсальный ответ, не требующий какой-либо конкретной функции. Просто хорошие простые формулы.
Альберто де Каро
Любая идея о том, как распространить это на ситуацию с тремя столбцами?
tumultous_rooster
13
Обратите внимание, что этот ответ НЕ даст правильного решения, если вы отфильтруете некоторые строки, используя параметры сводной таблицы. Допустим, первый ряд отфильтрован. Сумма ABC будет равна 0!
Ярлемаг
250

ОБНОВЛЕНИЕ: теперь вы можете сделать это автоматически с помощью Excel 2013. Я создал его как новый ответ, потому что мой предыдущий ответ фактически решает немного другую проблему.

Если у вас есть эта версия, выберите свои данные для создания сводной таблицы, и при создании таблицы убедитесь, что установлен флажок «Добавить эти данные в модель данных» (см. Ниже).

Установите флажок «Добавить эти данные в модель данных»

Затем, когда откроется ваша сводная таблица, обычно создайте строки, столбцы и значения. Затем щелкните поле, для которого вы хотите рассчитать различное количество, и измените настройки значения поля: Изменить настройки значения поля

Наконец, прокрутите вниз до самого последнего варианта и выберите «Отличное количество». Выберите опцию «Отличное количество»

Это должно обновить значения вашей сводной таблицы, чтобы отобразить данные, которые вы ищете.

Миган Фицджеральд
источник
5
@MichaelK гораздо лучше, если у вас Excel 2013
jrharshath
3
Можно ли это также сделать с существующими сводными таблицами, поэтому нам не нужно заново создавать 200+ таблиц, чтобы получить доступ к различным функциям подсчета?
Луиза
12
Просто к сведению: если вы еще не сохранили свой файл в виде файла Excel (.xlsx) (например, вы открыли файл .csv), опция «Добавить эти данные в модель данных» отключена / выделена серым цветом , Простое решение - сохранить файл как файл Excel.
PonyEars
9
Это не поддерживается на Mac? Эта опция не отображается для меня. Я на версии 15.27.
17
4
Эта опция на самом деле не существует на Mac, так как модели данных в целом предназначены только для Windows.
Томти
10

Я хотел бы добавить дополнительную опцию в микс, который не требует формулы, но может быть полезен, если вам нужно посчитать уникальные значения в наборе по двум различным столбцам. Используя оригинальный пример, у меня не было:

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

и хотите, чтобы это выглядело как:

ABC   1  
DEF   2

Но что-то вроде

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

и хотел, чтобы это выглядело как:

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

Я нашел лучший способ перевести мои данные в этот формат и затем иметь возможность манипулировать ими дальше - использовать следующее:

введите описание изображения здесь

После того, как вы выберете «Промежуточный итог в», выберите заголовок для вторичного набора данных (в этом случае это будет заголовок или заголовок столбца набора данных, который включает 123, 456 и 567). Это даст вам максимальное значение с общим количеством элементов в этом наборе в вашем основном наборе данных.

Затем я скопировал эти данные, вставил их в значения, а затем поместил в другую сводную таблицу, чтобы упростить манипулирование ими.

К вашему сведению, у меня было около четверти миллиона строк данных, так что это работало намного лучше, чем некоторые подходы на основе формул, особенно те, которые пытаются сравнивать по двум столбцам / наборам данных, потому что это продолжало сбой приложения.

Миган Фицджеральд
источник
У меня была совершенно другая проблема, но этот ответ просто указал мне верное направление. Спасибо.
Jtolle
этот ответ соответствует моим потребностям, так как у меня есть 500 000 строк, которые мне нужны для применения формулы, и моему компьютеру не хватает памяти, если я пытаюсь это сделать. Спасибо!
culdyclark
6

Я обнаружил, что самый простой подход - использовать Distinct Countопцию в разделе Value Field Settings( щелкните левой кнопкой мыши на поле на Valuesпанели). Опция для Distinct Countнаходится в самом низу списка.

Расположение где нажать

Вот до (TOP; нормальный Count) и после (BOTTOM; Distinct Count)

COUNT

ОТЛИЧНЫЙ СЧЕТ

Питер
источник
3
Начиная с Office 2016: Чтобы использовать эту функцию, необходимо создать сводную таблицу с установленным флажком «Добавить эти данные в модель данных».
Лев
3

Нет необходимости сортировать таблицу по следующей формуле, чтобы она возвращала 1 для каждого уникального значения.

предполагая, что диапазон данных для данных, представленных в вопросе, равен A1: B7 введите в ячейку C1 следующую формулу:

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

Скопируйте эту формулу во все строки, и последняя строка будет содержать:

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

Это приводит к тому, что 1 возвращается в первый раз при обнаружении записи, а 0 - для всех последующих раз.

Просто сложите столбец в вашей сводной таблице

Джефф Баумет
источник
2
Если у вас большой набор данных, используйте =IF(COUNTIF($B$1:$B1,B1),1,0)- таким образом, countif запускается только один раз!
Питер Альберт
2

Мой подход к этой проблеме немного отличается от того, что я вижу здесь, поэтому я поделюсь.

  1. (Сначала сделайте копию ваших данных)
  2. Объединить столбцы
  3. Удалить дубликаты в объединенном столбце
  4. Последнее - поворот на результирующий набор

Примечание: я хотел бы включить изображения, чтобы сделать это еще проще для понимания, но не могу, потому что это мой первый пост;)

Джейкоб Нун Уэйд
источник
1

Ответ Сиддхарта потрясающий.

Однако при работе с большим набором данных этот метод может вызвать проблемы (мой компьютер завис на 50000 строк). Несколько менее ресурсоемких методов:

Единственная проверка уникальности

  1. Сортировка по двум столбцам (A, B в этом примере)
  2. Используйте формулу, которая смотрит на меньше данных

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

Многократные проверки уникальности

Если вам нужно проверить уникальность в разных столбцах, вы не можете полагаться на два вида.

Вместо,

  1. Сортировать один столбец (A)
  2. Добавьте формулу, охватывающую максимальное количество записей для каждой группировки. Если ABC может иметь 50 строк, формула будет

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    
workglide
источник
2
Другой, возможно, менее ресурсоемкий способ - добавить столбец C и C2 =A2&B2. Затем добавить столбец D и в D2 поставить =IF(MATCH(C2, C$2:C2, 0) = ROW(C1), 1, 0). Заполните оба вниз. Хотя поиск по-прежнему выполняется с начала всего диапазона, он останавливается, когда находит первый, и вместо умножения значений из 50 000 строк вместе, он просто должен найти значение - поэтому он должен работать намного лучше.
ErikE
@ErikE Sharp - я также думаю, что ваша техника останавливается на первой находке. Но если у вас много уникальных значений в C (например, только 50 ABC), вы продолжите проверять огромные объемы данных. Интересная особенность: ваша формула работает лучше всего, когда данные не отсортированы.
рабочее скольжение
1

Excel 2013 может делать подсчет отличных в сводках. Если нет доступа к 2013 году, а объем данных меньше, я делаю две копии необработанных данных, а в копии b выбираю оба столбца и удаляю дубликаты. Затем сделайте опору и сосчитайте ваш столбец b.

Zachary
источник
1

Вы можете использовать COUNTIFS для нескольких критериев,

= 1 / COUNTIFS (A: A, A2, B: B, B2) и затем перетащите вниз. Вы можете указать столько критериев, сколько захотите, но на это уходит много времени.

user5100077
источник
1

Шаг 1. Добавьте столбец

Шаг 2. Используйте формулу = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)в 1-й записи

Шаг 3. Перетащите его на все записи

Шаг 4. Фильтр «1» в столбце с формулой

Абхишек Верма
источник
0

Вы можете сделать дополнительный столбец для сохранения уникальности, то просуммировать , что в сводной таблице.

Я имею в виду, клетка C1должна быть всегда 1. Ячейка C2должна содержать формулу =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1). Скопируйте эту формулу, чтобы ячейка C3содержала =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)и так далее.

Если у вас есть ячейка заголовка, вам нужно переместить все это вниз по строке, и ваша C3формула должна быть такой =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).

ЖХ.
источник
0

Если у вас есть данные отсортированы .. Я предлагаю использовать следующую формулу

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

Это быстрее, поскольку он использует меньше ячеек для расчета.

SumitB
источник
0

Я обычно сортирую данные по полю, которое мне нужно, чтобы выполнить четкий подсчет, а затем использовать IF (A2 = A1,0,1); затем вы получаете 1 в верхнем ряду каждой группы идентификаторов. Простой и не занимает много времени для расчета на больших наборах данных.

Генеральные наушники
источник
0

Вы можете использовать для вспомогательной колонки также VLOOKUP. Я проверял и выглядит немного быстрее, чем COUNTIF.

Если вы используете заголовок и данные начинаются в ячейке A2, то в любой ячейке строки используйте эту формулу и скопируйте во все остальные ячейки в том же столбце:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
Marossik
источник
-3

Я нашел более простой способ сделать это. Ссылаясь на пример Сиддарта Раута, если я хочу посчитать уникальные значения в столбце A:

  • добавьте новый столбец C и заполните C2 формулой "= 1 / COUNTIF ($ A: $ A, A2)"
  • перетащите формулу вниз до остальной части столбца
  • поверните столбец A в качестве метки строки и Sum {column C) в значениях, чтобы получить количество уникальных значений в столбце A
Мунир
источник
Логически это не может работать для OP, потому что он не смотрит на столбец B. Как вы будете адаптировать это для работы с несколькими столбцами?
ErikE