Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Power Pivot. Мера. Расчёт уникальных значений с учётом окна атрибуции, необходимо считать событие как первичное, если оно не происходило в течение X дней
 
Здравствуйте!
Прошу помочь с расчётом меры. Необходимо найти количество первичных обращений за период, с учётом окна атрибуции = 21 день.

Есть некое маркетинговое понятие "окно атрибуции" (указано на листе 2 книги excel).

Представим, что клиент позвонил 1 января, 12 января, 31 января и окно атрибуции = 31 день. Тогда, за январь у нас одно первичное обращение.
Представим, что клиент позвонил 1 января, 12 января, 31 января и окно атрибуции = 21 день. Тогда, за январь у нас два первичных обращения. Одно создано до 21 января включительно, второе 31 января. В следующий раз клиент позвонил в марте.

По отчёту за январь: 2 первичных обращения.
По отчёту за февраль: 0 первичных обращений.
По отчёту за март: 1 первичное обращение.

И если честно, мне не совсем понятно как подсчитать кол-во вторичных обращений.
Т.е. формула должна проверить, было ли диапазоне 21-го дня какое-то обращение клиента. Если было, то текущее обращение засчитывается как вторичное. Если не было, то считается первичным.
Изменено: ivanka - 5 дек 2019 23:06:50
 
Посмотрите Тут как вариант
 
Доброе время суток.
Вариант для подсчёта первичных обращений. Для вторичных аналогично
Код
=VAR baseTable =
    CALCULATETABLE (
        'Таблица1';
        ALLEXCEPT('Таблица1'; 'Таблица1'[Column3])
    )
VAR addIntNum =
    ADDCOLUMNS (
        baseTable;
        "intNum";
        VAR curClient = 'Таблица1'[Column3]
        VAR beginDate =
            TRUNC (
                MINX (
                    FILTER ( baseTable; 'Таблица1'[Column3] = curClient );
                    'Таблица1'[Column2]
                )
            )
        RETURN
            TRUNC ( ( TRUNC ( 'Таблица1'[Column2] ) - beginDate ) / 21 )
    )
VAR addStatus =
    ADDCOLUMNS (
        addIntNum;
        "intStatus";
        VAR curClient = 'Таблица1'[Column3]
        VAR curIntNum = [intNum]
        VAR beginDate =
            MINX (
                FILTER ( addIntNum; 'Таблица1'[Column3] = curClient && [intNum] = curIntNum );
                'Таблица1'[Column2]
            )
        RETURN
            IF ( beginDate = 'Таблица1'[Column2]; 0; 1 )
    )
VAR fromDate =
    MIN ( 'Таблица1'[Column2] )
VAR toDate =
    MAX ( 'Таблица1'[Column2] )
RETURN
    COUNTROWS (
        FILTER (
            addStatus;
            'Таблица1'[Column2] >= fromDate
                && 'Таблица1'[Column2] <= toDate
                && [intStatus] = 0
                && NOT(ISBLANK('Таблица1'[Column3]))
        )
    )

Updated
Поменял несколько. А то подход ниже ведёт к игнорированию измерения по Column3.
Код
VAR baseTable =
    CALCULATETABLE (
        'Таблица1';
        ALL ( 'Таблица1'[Год]; 'Таблица1'[Месяц] );
        NOT ( ISBLANK ( 'Таблица1'[Column3] ) )
    )

P. S. Тяжеловатенько, но как есть.  Как аукнулось, так и откликнулось :)
Изменено: Андрей VG - 6 дек 2019 10:29:07
 
ivanka, а если в январе три обращения? 1, 15 и 31 числа. Сколько тогда из них будет первичными? Одно? Нужно ли просматривать для обращения от 1 января были ли обращения в декабре за 21 день до этого или ограничиваемся только окном за один месяц?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
а если в январе три обращения?
Привет, Алексей.
В примере в январе два первичных от 2 и 23. Так что их два :)
 
Андрей VG, не нравится мне на таких примерах задачи решать. Сейчас гражданин формулу схватит, скажет ВАУ, а потом придет и начнется: "ой, есть один нюанс!" А потом вообще окажется что "...не Волгу, а запорожец, не в преферанс, а в очко, и не выиграл, а проиграл!"
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
"ой, есть один нюанс!"
Всё может быть. В аналитику и анализ кто только теперь не идёт - почему-то внезапно вдруг это направление стало, видимо, считаться гуманитарным - не требующим знаний математики и, следовательно, способности определять и формулировать. Философия.
Я бы лучше это в Power Query сделал. Группировка по Column3, затем от начальной даты истории посчитал бы номера интервалов, а затем ещё одной группировкой добавил бы с предварительной сортировкой столбец номера обращения в интервале. Тогда и первичные и вторичные и третичные без проблем считаются. Да и среднее число обращений на решение проблемы без проблем и танцев с бубном находится. Но это же думать и изучать надо! А зарплату хочется получать уже сейчас :)
 
Андрей VG, я бы тоже в PQ считал, главное точно понять по какому алгоритму считать.
Вот горшок пустой, он предмет простой...
 
Андрей VG, PooHkrd, господа, я не работаю аналитиком данных, т.к. уровень начальный. Я учусь в свободное время. Я беру некоторые задачи для себя (без дедлайна) и ковыряюсь (за них мне не платят). В интернете не всегда можно найти пример решений, но всегда можно обратиться на этот замечательный форум со знатоками. Стараюсь для себя разбирать логику ваших решений. Иногда разобрать логику готового решения - это уже несколько часов. А если не иметь рабочего примера перед глазами, то подбирать необходимую комбинацию можно днями не вставая.

С учителем, гораздо проще. И я вас за это благодарю!  
Изменено: ivanka - 23 дек 2019 10:22:06
 
Т.е. определения базовых понятий в вашей задаче вы не знаете? Это то с чего надо начинать, и пока не поймешь все нюансы от и до - дальше не продолжать, иначе рискуете сделать фиговую аналитику и предоставить руководству некорректные данные.
Вот горшок пустой, он предмет простой...
 
PooHkrd, о каких базовых понятиях идёт речь в контексте данной задачи? Просто перечислите пожалуйста.  
 
Цитата
PooHkrd написал:
а если в январе три обращения? 1, 15 и 31 числа.
согласно правила примера и окна атрибуции = 21 день:
1 число - первичное обращение, т.к. до него обращений нет.
15 число - вторичное обращение, т.к. в диапазоне 21-го дня уже есть обращение. 15 - 1 = 14 дней < 21 день.
31 число - вторичное обращение, т.к. в диапазоне 21-го дня уже есть обращение. 31 - 15 = 16 дней < 21 день.

Цитата
PooHkrd написал:
Нужно ли просматривать для обращения от 1 января были ли обращения в декабре за 21 день до этого или ограничиваемся только окном за один месяц?
По условиям задачи информации о данных за 2018 год нет. Значит в случае с январём, ограничиваемся окном в один месяц, а если быть точнее, то:
если нет данных за 21 день, то обращение первичное.

Цитата
Андрей VG написал:
В примере в январе два первичных от 2 и 23. Так что их два
Задача понята верно!

Цитата
PooHkrd написал:
Сейчас гражданин формулу схватит, скажет ВАУ, а потом придет и начнется: "ой, есть один нюанс!"
Вымышленный исход событий, такого может не произойти вообще. А если и может, то это будет новая, интересная задача.

Цитата
Андрей VG написал:
Вариант для подсчёта первичных обращений. Для вторичных аналогично
Благодарю! Не ожидал, что решение мерой будет таким массивным. На счёт решения при помощи PQ согласен. Просто я уже увеличил кол-во столбцов начальной таблицы в 2 раза, и хотелось избежать дополнительных столбцов.
 
Цитата
PooHkrd написал:
я бы тоже в PQ считал, главное точно понять по какому алгоритму считать.
Алгоритм выбирает аналитик, разве нет? Или заказчик должен сам придумать алгоритм? Я изложил к чему необходимо прийти, а как это сделать... в этом я полностью полагаюсь на знатоков.  
 
ivanka, с точки зрения заказчик - аналитик общение происходит в ветке "Работа", не здесь. Здесь люди помогают, замечу, бесплатно.
Мои вопросы не на пустом месте - они подтверждаются почти трехлетним опытом общения с гражданами на данном форуме и более длительном опыте IRL. Просто если условия задачи все время меняются из-за того что ТС сам с трудом понимает чего хочет, то помогать очень быстро пропадает желание. Если решать задачу нужно в рамках данных вашего примера, то в общем, Андрей предложил отличное решение, мне тут добавить нечего.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
с точки зрения заказчик - аналитик общение происходит в ветке "Работа", не здесь. Здесь люди помогают, замечу, бесплатно.
согласен.

Благодарю!  
Страницы: 1
Читают тему (гостей: 2)
Наверх