Страницы: 1
RSS
Power BI/Query Поиск значения по двум критериям, один из которых ближайшая дата, В один запрос подтянуть из другого значение по ближайшей дате
 

Коллеги, привет! Помогите, пожалуйста, с поиском значения по двум критериям, один это код клиента, второй- дата его визита.  

Имеется два запроса: purchases: данные о покупках клиентами по датам, visits -данные о посещениях этими клиентами с датами.

Задача: в  purchases подтянуть по дате ближайшего раннего визита от даты покупки (день в день не надо). Изначально пытаюсь сделать в Power BI на DAX, но возможно надо на M.

Что сделано: пыталась найти похожие запросе в рамках данного формума, гуглила на ютубе уроки с функцией FILTER  итд, думала про LOOKUPVALUE ( по аналогии через ВПР, когда можно найти ближайшее подходящее значение), но поиск не дал необходимого результата, хотя и пополнил мою базу знаний)

Буду очень признательна, если направите/ поможете! Прилагаю файл , где желтым выведено как должно быть.

 
так?

Код
=var maxdate=
CALCULATE(MAX(Visits[end_dt]);FILTER(Visits;Visits[uid]=Purchases[uid]&&Visits[end_dt]<Purchases[buy_dt]))
var res = LOOKUPVALUE(Visits[source_id];Visits[uid];Purchases[uid];Visits[end_dt];maxdate)
return res
 
Цитата
написал:
 
mechanix 85
спасибо!!! очень близко к нужному, и разобралась в синтаксисе, но в моем примере для форума нет случаев, когда несколько source_id приходится на uid клиента и maxdate по нему (как в реальной выборке оказалось: несколько source_id  на одного клиента с ближайшей датой визита).
сейчас думаю о доработке формулы, пока ошибка "Ожидалось единственное значение, однако передана таблица или несколько значений.".
вариант добавить MIN  перед LOOKUPVALUE не помог.
Изменено: GAV - 30.10.2024 13:40:44
 
Нашла на форуме подсказку : https://www.planetaexcel.ru/forum/?PAGE_NAME=message&FID=1&TID=126555
использовала вариант
TOPN (    1,
   SELECTCOLUMNS (
       FILTER (
 
меняйте мин на макс, в зависимости от задачи
Код
var res = CALCULATE(Min(Visits[source_id]);FILTER('Visits'; Visits[uid]=Purchases[uid]&&Visits[end_dt]=maxdate))
 
Цитата
написал:
CALCULATE(Min(Visits[source_id]);FILTER('Visits'; Visits[uid]=Purchases[uid]&&Visits[end_dt]=maxdate))
сделала Вашим вариантом- итоги сошлись! рада) Ваш более изящный) спасибо еще раз, что подключились.
Страницы: 1
Наверх