Страницы: 1 2 След.
RSS
Посчитать сколько человек сделало покупку по 2 условиям
 
Добрый день.
В файле представлены продажи клиентам (их номера и условный способ покупки).
Необходимо посчитать сколько человек сделало покупку по 2 условиям:
1. Клиент совершил покупку более двух раз. (больше или равно 2)
2. Клиент совершил покупку двумя разными способами.  

Соответственно, желательно, что бы это была одна формула.

Немного запутался, помогите, пожалуйста.

Заранее спасибо!
 
=SUM((MMULT(COUNTIFS(D4:D13;D4:D13;E4:E13;{1\2\3\4\5});{1;1;1;1;1})>1)/COUNTIF(D4:D13;D4:D13))
=SUM(IFERROR((MMULT(SIGN(COUNTIFS(D4:D13;D4:D13;E4:E13;{1\2\3\4\5}));{1;1;1;1;1})>1)/COUNTIF(D4:D13;D4:D13);))
Разумеется массивная
Изменено: БМВ - 16.03.2019 19:02:34
По вопросам из тем форума, личку не читаю.
 
БМВ , спасибо большое!  
 
БМВ, формула работает. Но не могли бы вы рассказать логику написания? До конца не могу понять.

Изменил в первой строке способ покупки на 2, что бы этот клиент больше не считался (проверить формулу), но формула всё равно выдает 4 человека. В чем может быть проблема?  
Изменено: Processor - 16.03.2019 18:16:10
 
Если надо подсчитывать тех, кто отвечает хотя бы одному из двух условий, то можно всё свести к подсчету ID, которые встречаются более одного раза.
Тогда можно из количества различных ID вычесть только те, что встречаются один раз (формула массива):

=СУММ(1/СЧЁТЕСЛИ(D4:D13;D4:D13))-СУММ(--(СЧЁТЕСЛИ(D4:D13;D4:D13)=1))

Поправьте, если не так понял.  
 
Цитата
Processor написал:
БМВ , формула работает
а вот я в этом уже не уверен. в ней ошибка. Вариант Sceptic, мне кажется тоже.
По вопросам из тем форума, личку не читаю.
 
Processor, уточните условие 2. Что делать, если клиент совершил покупку тремя разными способами?
 
Отобрать третью покупку )
 
Цитата
Sceptic написал:
Что делать, если клиент совершил покупку тремя разными способами?
Считать. т.е. исключаем только один способ.  
 
Путаница в условиях присутствует. Если их надо соблюдать одновременно, то к чему вообще первое? Ведь не может быть у человека с двумя способами покупки менее двух покупок. Надо как-то переформулировать
 
Sceptic,имеется ввиду, что покупка была совершена как минимум одним альтернативным способом.
Т.е. мог сделать 3 покупки, две с номером "1" и одна "2". , тогда считаем, а если сделал 4 покупки и все с номером "1", не считаем.
И счет должен быть именно людей, а не покупок.
Надеюсь понятно уточнил.
 
выше подправил
=SUM(IFERROR((MMULT(SIGN(COUNTIFS(D4:D13;D4:D13;E4:E13;{1\2\3\4\5}));{1;1;1;1;1})>1)/COUNTIF(D4:D13;D4:D13);))

COUNTIFS(D4:D13;D4:D13;E4:E13;{1\2\3\4\5}) -
считаем все сочетания клиентов и вариантов покупок (1-5) в итоге матрица
нам не важно сколько раз встретился способ заказа  у одного клиента по этому SIGN , ил и можно было заменить на --(… >0)  преобразует все в 0 или 1
MMULT( ;;{1;1;1;1;1}) суммирует по строкам и на выходе массив значений , например если были у клиент способ 1 и 3 то 1\0\1\0\0 будет 2.
Так как нам нужно имеющие 2 и более то сравниваем с 1 и делим на количество заказов клиента (COUNTIF(D4:D13;D4:D13)) , не зависмо от способа в результате будет массив дробей
IFERROR нужен только если диапазон больше чем заполненный диапазон, при котором  COUNTIF(D4:D13;D4:D13) = 0 .
Суммируем.


По вопросам из тем форума, личку не читаю.
 
БМВ,Спасибо за ответ! Формулу понял!
Есть еще одна сложность.
Дело в том, что для корректной выборки есть еще 2 условия. В теме не описывал их, потому что условия достаточно легкие и написал я их следующей формулой:
Код
=СЧЁТЕСЛИМН($F:$F;">0";$C:$C;"online") 
т.е. необходимо что бы по одному столбцу было >0, по соседнему столбцу только online.
Теперь не знаю как применить эти условия к формуле, которая у вас получилась выше.  
 
Processor, видимо дополнить это COUNTIFS(D4:D13;D4:D13;E4:E13;{1\2\3\4\5})  доп условием $F4:$F13;">0";$C4:$C13;"online", но не видя примера сказать трудно.
По вопросам из тем форума, личку не читаю.
 
Подгрузил пример файла.
Соответственно, обязательно участие менеджера (в столбце его условный номер, поэтому ставил условие >0)
И как минимум один раз клиент увидел рекламу в онлайне

По этой формуле считает только если все разы видел рекламу в онлайне. А достаточно одного раза... Как исправить формулу, чтобы проверял, что достаточно одного раза просмотр онлайна?
Код
=СУММ(ЕСЛИОШИБКА((МУМНОЖ(ЗНАК(СЧЁТЕСЛИМН(D4:D13;D4:D13;E4:E13;{1;2;3;4;5};F4:F13;"online";G4:G13;">0"));{1:1:1:1:1})>1)/СЧЁТЕСЛИ(D4:D13;D4:D13);))

Изменено: Processor - 17.03.2019 14:37:55
 
vikttur, для последнего вопроса создать отдельную тему? или ждать пока тут ответ найдется?
 
Переосмысли первую формулу
=SUM(IFERROR(SIGN(COUNTIFS(D4:D13;D4:D13)*COUNTIFS(D4:D13;D4:D13;E4:E13;"<>"&E4:E13))/COUNTIF(D4:D13;D4:D13);))
Над добавлением условий надо подумать.

Сколько должно получится в примере?
Изменено: БМВ - 17.03.2019 17:37:50
По вопросам из тем форума, личку не читаю.
 
БМВ, должно получится 1. ниже на картинке подсветил условия. Проходит только клиент 548 (синий).


Но важно что бы считалось, если хотя бы один онлайн был. Даже если остальные покупки были промо.  
Изменено: Processor - 17.03.2019 17:55:34
 
=SUM(IFERROR((COUNTIFS(D4:D13;D4:D13;G4:G13;">0")*COUNTIFS(D4:D13;D4:D13;E4:E13;"<>"&E4:E13)=COUNTIF(D4:D13;D4:D13))*(COUNTIFS(D4:D13;D4:D13;F4:F13;"online")>0)/COUNTIF(D4:D13;D4:D13);))
ошибка, исправлено ниже
Изменено: БМВ - 18.03.2019 13:21:59
По вопросам из тем форума, личку не читаю.
 
БМВ, протестировал формулу и заметил, что если клиенты сделали больше чем 2 покупки, то формула их не считает.


Получилось, что формула посчитала "синего" клиента и "желтого". А красного исключила. В чём может быть ошибка?
Изменено: Processor - 18.03.2019 12:18:14
 
Упс, не уследил
=SUM(IFERROR((COUNTIFS(D4:D13;D4:D13;G4:G13;">0")*(COUNTIFS(D4:D13;D4:D13;E4:E13;"<>"&E4:E13)>0)=COUNTIF(D4:D13;D4:D13))*(COUNTIFS(D4:D13;D4:D13;F4:F13;"online")>0)/COUNTIF(D4:D13;D4:D13);))
Изменено: БМВ - 18.03.2019 13:20:19
По вопросам из тем форума, личку не читаю.
 
Вариант на PQ. Если у вас большая таблица, так будет значительно быстрее.

PQ - это дальнейшее развитие формул в Excel.

Код
let
    // Загружаем данные из умной таблицы Table1
    Src = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    // Объединяем таблицу по ID клиента:
    //   - В столбце Tmp: число уникальных комбинаций клиент-способ покупки для данного клиента.
    Grp = Table.Group(Src, {"ID клента"}, {{"Tmp", each Table.RowCount(Table.Distinct(_))}}),
    // Выбираем все строки, где число уникальных комбинаций больше одного (очевидно что число покупок тоже будет больше одного).
    // После выбираем столбец "Id Клиента"
    Out = Table.SelectColumns(Table.SelectRows(Grp, each [Tmp] > 1), {"ID клента"})
in
    // Возвращаем эту таблицу как результат
    Out
Изменено: Alexey_Spb - 18.03.2019 14:45:03
 
Alexey_Spb,
у вас только 2 условия, а выше больше условий
 
Цитата
Processor написал:
у вас только 2 условия, а выше больше условий
Я делал по этому посту..

Код
Необходимо посчитать сколько человек сделало покупку по 2 условиям:

1. Клиент совершил покупку более двух раз. (больше или равно 2)
2. Клиент совершил покупку двумя разными способами.  
Приведите цитату как надо.
Изменено: Alexey_Spb - 18.03.2019 14:45:41
 
Цитата
Processor написал:
Соответственно, обязательно участие менеджера (в столбце его условный номер, поэтому ставил условие >0) И как минимум один раз клиент увидел рекламу в онлайне
Условия
1. Клиент должен совершить покупку более чем 2 раза.
2.Хотя бы раз должен увидеть рекламу в онлайне
3. Совершить платеж двумя разными способами
4. Обязательно участие менеджера
Изменено: Processor - 18.03.2019 14:50:33
 
Код
let
    Src = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Grp = Table.Group
           (
            Src, 
            {"ID клента"}, 
            {
             {
              "Tmp", 
              each
               let
                  // Перед выбором уникальных комбинаций фильтруем наборы по каждому клиенту
                  Tt = Table.SelectRows(_, each [Реклама] = "online" and [Участие менеджера] <> null and [Участие менеджера] > 0)
                in
                 // И считаем уникальные значения тлько по способу покупки (избавляемся от участия менеджеров в уникальных комбинациях)
                 Table.RowCount(Table.Distinct(Tt, "Способ покупки"))
             }
            }
           ),
    Out = Table.SelectColumns(Table.SelectRows(Grp, each [Tmp] > 1), {"ID клента"})
in 
    Out

P.S. Алгоритм неверный.. надо переделать.

Прошу уточнить насчет участия менеджера - его как учитывать?
Изменено: Alexey_Spb - 18.03.2019 15:13:15
 
Alexey_Spb, если есть цифра то учитывать, если 0 - то нет.  
 
Цитата
Processor написал:
Alexey_Spb , если есть цифра то учитывать, если 0 - то нет.  
Учитывать как рекламу в онлайне, то есть если один раз клиент ее увидел (в произвольной записи), значит все записи по данному клиенту валидны.

Или же анализ проводить только по тем записям, где имеется участие менеджера, а где нет - игнорировать.
 
Processor, возможно Вам покажется интересной эта статья
Суммирование по множеству условий функцией БДСУММ (DSUM)

Правильно ли я понимаю, что использование дополнительных/вспомогательных столбцов является неспортивным решением и поэтому неприемлемо?  
 
Цитата
IKor написал:
Правильно ли я понимаю, что использование дополнительных/вспомогательных столбцов является неспортивным решением и поэтому неприемлемо?  
В данном случае, можно использовать дополнительные столбцы :)

Цитата
Alexey_Spb написал:
Учитывать как рекламу в онлайне, то есть если один раз клиент ее увидел (в произвольной записи), значит все записи по данному клиенту валидны.Или же анализ проводить только по тем записям, где имеется участие менеджера, а где нет - игнорировать.
Не очень понял формулировку. Логика такая, если клиент хотя бы раз из всех покупок увидел рекламу онлайн, он попадает в выборку.
Покупки без менеджера в выборку не идут.  
Страницы: 1 2 След.
Наверх