Страницы: 1
RSS
Когорты клиентов по их обороту DAX
 
Около недели бьюсь над задачей. Данные как в sample.
Нужно создать когорту на основе оборота по клиенту исходя из выбранных фильтров и видимых полей сводной таблицы.

Мои идеи:

1) Оборот = SUM(Turnover)
2) Оборот на клиента = SUMX(VALUES(ID клиента);CALCULATE([Оборот))
3) Когорта = SWITCH(TRUE();
                   [Turnover on client]<2000;"0-2000";
                   AND([Оборот на клиента]>= 2000;[Оборот на клиента]<4000);"2000-4000";
                   AND([Оборот на клиента]>= 4000;[Оборот на клиента]<6000);"4000-6000";
                   AND([Оборот на клиента]>= 6000;[Оборот на клиента]<8000);"6000-8000";
                   [Оборот на клиента]>= 8000;"8000+")

Получаю половинчатый результат. Часть строк группируется корректно, часть нет.
Оборот на клиента считается корректно в зависимости от выбранных фильтров и видимых полей сводной таблицы, но поле Когорта считает не на основе агрегированных данных а на отдельных строках или как пойдет. В прямом смысле. Часть может посчитать корректно, часть нет.

Не должно быть такого:
Клиент 1,  Сервис 1,  когорта "0-2000" = $1900
Клиент 1,  Сервис 1,  когорта "6000-8000" = $6200
Клиент 1,  Сервис 2,  когорта "8000+" = $9200

Должно выйти:
Клиент 1,  Сервис 1,  когорта "8000+" = $8100
Клиент 1,  Сервис 2,  когорта "8000+" = $9200
 
Доброе время суток.
Вариант (Power Pivot 2010)
 
Спасибо. Это немного не то, что я хотел. Мне надо получить поле и, например, посчитать количество клиентов, оборот и количество транзакций входящих в эту когорту.
Тоесть рассчитать оборот по клиенту и в зависимости от этого поместить его в когорту, причем он может попадать в различные когорты в зависимости от выбранных данных, но не может быть в разных когортах по одним и тем же фильтрам.
 
Цитата
Ustinovdl написал:
Это немного не то, что я хотел
Для этого, нужно чётко описать критерии, что влияет, что не влияет, куда попадает клиент, если, например, у него есть суммы в нескольких сервисах и т. д.
Ну, или ждать специалиста, который вас поймёт с полпинка и захочет поделится методикой расчётов. (Не думаю, что на нашем форуме такие ходят, такие зубры, как правило, от 2000р в час берут).
 
А каким образом вы хотите передавать контекст фильтра сводной таблицы к расчетному полю?
Изменено: PooHkrd - 22.03.2018 17:40:15
Вот горшок пустой, он предмет простой...
 
Влияют выбранные фильтры и видимые поля сводной таблицы.

Дано:
Клиент 1 Сервис 1 1900
Клиент 1 Сервис 1 6200
Клиент 1 Сервис 2 9200

Получить:
Сервис 1 Когорта "8000+" Клиентов 1 Сумма 8100
Сервис 2 Когорта "8000+" Клиентов 1 Сумма 9200
Или в случае если пользователь убрал поле "Сервис" из сводной:
Когорта "8000+" Клиентов 1Сумма 17300

Полей и значений у меня порядка 60. Для примера и подхода не принципиально.
Самая главная загвоздка - создание поля когорты на основе рассчитанного значения. Рассчетное значение корректно, но поле построенное на нем, почему-то берет значение изначальной суммы.

Если по клиенту в рамках одного Сервиса у меня будет 5 строк оплат, с суммами: 1) до 2000 2) от 2000 до 4000 3) от 4000 до 6000 4) от 6000 до 8000 5) 8000+, то
и клиент и его PNL у меня попадет в каждую когорту, вместо одной нужной, и при этом поле "Оборот на клиента" будет показывать правильное число, а именно сумму всех вышеперечисленных оплат.
Изменено: Ustinovdl - 22.03.2018 17:50:29
 
Цитата
PooHkrd написал:
А каким образом вы хотите передавать контекст фильтра сводной таблицы к расчетному полю?
По умолчанию он всегда применяется если не указать в рассчетном поле обратное.
Единственное - поле ID клиента надо передать в рассчетное поле принудительно. Я это делаю так - VALUES(ID клиента)
И рассчетное поле отображает корректное значение.
Изменено: Ustinovdl - 22.03.2018 17:54:46
 
Цитата
Андрей VG написал:
такие зубры, как правило, от 2000р в час берут).
Если будет изящное рабочее решение, то 2000р. не деньги. На форумах по Excel, PowerPivot и Power BI Desctop пока никто не может даже рядом что-то предложить.
 
Цитата
Ustinovdl написал:
По умолчанию он всегда применяется если не указать в расчетном поле обратное.
Вы под этим термином подразумеваете меру (Measure)? Я то подумал, что вам нужно сделать расчетный столбец в таблице, не в сводной.
Вот с этой статьей, ознакамливались? Вдруг поможет?
Изменено: PooHkrd - 22.03.2018 18:08:33
Вот горшок пустой, он предмет простой...
 
Цитата
Ustinovdl написал:
пока никто не может даже рядом что-то предложить.
Да, ну? Там как раз по частям есть всё необходимое. Попросите модераторов перенести вашу тему в раздел Работа, глядишь, Максим Зеленский и возьмётся.
 
Цитата
PooHkrd написал:
Вы под этим термином подразумеваете меру (Measure)? Я то подумал, что вам нужно сделать расчетный столбец в таблице.
Оборот на клиента - measure
Когорта - column
Количество клиентов - column (distinct count)

Еще одна попытка:
Создана вспомогательная таблица PARAMETERS1
COHORTMINMAX
0-2000-9999999991999,99
2000-400020003999,99
4000-600040005999,99
6000-800060007999,99
8000+8000999999999


Turnover cohort =
VAR Turnover_on_client = SUMX(VALUES('Main data'[Payer id]);CALCULATE([Turnover]))
RETURN
   CALCULATE (
       FIRSTNONBLANK ( PARAMETERS1[COHORT]; 1 );
       FILTER (
           PARAMETERS1;
           Turnover_on_client >= PARAMETERS1[MIN]
               && Turnover_on_client < PARAMETERS1[MAX]
       )
   )


и снова неудачно.
Изменено: Ustinovdl - 22.03.2018 18:16:18
 
Цитата
Андрей VG написал:
Да, ну?  Там как раз по частям есть всё необходимое. Попросите модераторов перенести вашу тему в раздел Работа, глядишь, Максим Зеленский и возьмётся.
Именно DAX'ом и делаю в Power BI Desktop. На профильных форумах темы созданы.
По частям делал. Части работают, все вместе нет.
 
Цитата
Андрей VG написал:
Андрей VG
Спасибо. Написал Максиму Зеленскому.
 
Максим Зеленский помог за вознаграждение. Настоятельно рекомендую обращаться именно к нему. По делу. Быстро. Спасибо!
Страницы: 1
Наверх