#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])))