Получить количество и список cutomers (ID), у которых не было продаж за последние 2 месяца

#powerbi #dax #powerquery

#powerbi #dax #powerquery

Вопрос:

Итак, у меня есть 2 таблицы, как показано ниже

Таблица ПРОДАЖ:

  ---- ------------ 
| ID | SALE_DATE  |
 ---- ------------ 
|  1 | 09-21-2021 |
|  2 | 09-21-2021 |
|  3 | 09-21-2021 |
|  2 | 09-21-2021 |
|  3 | 09-21-2021 |
|  1 | 09-21-2021 |
|  5 | 07-22-2021 |
|  6 | 09-21-2021 |
|  9 | 09-21-2021 |
|  7 | 08-21-2021 |
|  8 | 05-21-2021 |
 ---- ------------ 
  

Таблица КЛИЕНТОВ

  ---- 
| ID |
 ---- 
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
 ---- 
  

Я хочу создать 2 показателя:

1-е — это количество клиентов, у которых не было продаж за последние 2 месяца, поэтому в данном случае это будет 2 (8 и 10)

и вторая мера даст список всех этих идентификаторов клиентов (8 и 10)

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

 show_hide = 

VAR current_name = MIN(SALES[ID])


VAR chk_not_in = 
IF(
    COUNTROWS(
        FILTER(
            ALL(SALES),
             SALES[ID]= current_name amp;amp; SALES[SALE_DATE])>  DATE(YEAR(NOW()),MONTH(NOW())-2, DAY(NOW()))
        )
    )= 0,
    0,
    1
)

VAR chk_in = 
IF(
    COUNTROWS(
        FILTER(
            ALL(CUSTOMER),
            CUSTOMER[ID] = current_name
        )
    ) = 0,
    0,
    1
)


RETURN IF(chk_in = 1 amp;amp; chk_not_in = 1, 1, 0)
  

Таким образом, каждый идентификатор с show_hide «0» будет тем, у которого нет продаж за последние 2 месяца
Мне было интересно, есть ли простой способ сделать это, а также, я не уверен, как получить количество всех этих идентификаторов

Ответ №1:

Во-первых, я предполагаю, что ваши тестовые данные должны были быть 2020 вместо 2021, а идентификатор в таблице ПРОДАЖ — это идентификатор КЛИЕНТА.

Я бы рассмотрел это как меру и вычисляемый столбец.

Мера будет вычислять клиентов, которые не продавали за последние два месяца. Из ваших данных, я думаю, вам не хватает (4), кто ничего не продал, в результате чего общее количество клиентов достигло трех (4, 8, 10).

 CustomersWithNoSalesIn2Months = 

// Work out what date was 2 months ago
VAR twoMonthsAgo = DATE(YEAR(NOW()),MONTH(NOW())-2, DAY(NOW()))

// Count the total distinct customers in the customer table
VAR totalCustomers = CALCULATE(DISTINCTCOUNT(Customer[ID]))

// Count how many distinct customers did have sales in the past 2 months
VAR customersWithSalesInTheLast2Months = CALCULATE(DISTINCTCOUNT(Sales[ID]), Sales[SALE_DATE] > twoMonthsAgo)

// Subtract the customers who did have sales from the total to get the number of customers that did not have sales
RETURN totalCustomers - customersWithSalesInTheLast2Months
  

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

 SalesMadeInTheLast2Months = 
VAR MostRecentSale = CALCULATE(MAX(Sales[SALE_DATE]), FILTER(Sales, Customer[ID] = Sales[ID]))
VAR TwoMonthsAgo = DATE(YEAR(NOW()),MONTH(NOW())-2, DAY(NOW()))
RETURN CALCULATE(COUNTROWS(Sales), FILTER(Sales, Sales[SALE_DATE] > TwoMonthsAgo), FILTER(Sales, Sales[ID] = Customer[ID]))
  

Теперь вы можете фильтровать продажи в таблице Customers BLANK или использовать подсчеты в любом другом расчете, который вам нужен. Например, клиенты 1,2 и 3 совершили наибольшее количество продаж за последние 2 месяца.

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

Комментарии:

1. это работает отлично, но в моих данных есть ограничение, в таблице SALES есть несколько идентификаторов, которых нет в таблице CUSTOMER, поэтому, пока я обрабатываю этот шаг, VAR customersWithSalesInTheLast2Months = CALCULATE(DISTINCTCOUNT(Sales[ID]), Sales[SALE_DATE] > TWOMONTH sago) Он также записывает эти идентификаторы, в то время как я просто хочу работать с теми идентификаторами, у которых были Sales[SALE_DATE]> twoMonthsAgo и которые также присутствуют в таблице CUSTOMER Я хочу игнорировать несоответствующий идентификатор, например, если в SALES есть идентификатор 12, я бы хотел игнорировать его какего нет в таблице КЛИЕНТОВ

2. Если вы создадите вычисляемый столбец, то ваша мера может быть намного проще — CustomersWithNoSalesInLast2Months = CALCULATE(COUNTROWS(Customer), FILTER(Customer, ISBLANK(Customer[SalesMadeInTheLast2Months])))