Есть ли способ отфильтровать и вернуть результаты для уникальности одного столбца с условиями другого? - PullRequest
1 голос
/ 02 июня 2019

Вопрос

Для приведенных ниже данных есть ли способ вернуть результаты - для каждого заказа в столбце B - либо:

  1. Если наиболеенедавний статус [col D] для заказа (например, для заказа 10021) закрыт, затем верните эту строку.
  2. Если нет, верните каждую строку, начиная с самого последнего закрытого статуса для этого заказа (например, для заказа10020, строки 4 и 5).

data

Предыдущие попытки и попытки решения

РанееЯ только возвращал один результат, самый последний статус для каждого заказа со следующим:

=SORTN(SORT(A2:D,1,FALSE),9^9,2,2,FALSE)

Однако я хотел бы, чтобы заказы имели более одного текущего статуса.

IЯ перепробовал несколько вещей и смог достичь того, что я ищу, к сожалению, только при наличии одного заказа, со следующим:

(ссылка на лист ниже объясняет, как я к этому пришел)

=IFERROR(FILTER(A2:D5,A2:A5>INDEX(SORT(FILTER(A2:D5,D2:D5="CLOSED"),1,0),1,1)),FILTER(A2:D5,A2:A5>=INDEX(SORT(FILTER(A2:D5,D2:D5="CLOSED"),1,0),1,1)))

Другая альтернатива, которую я могу придумать, - это скрипт с циклом.

Резюме

Сложно было узнать, как озаглавить этот вопрос, но он пришел к нему, поскольку по сути мы пытаемся отфильтровать уникальные столбцы B с условиями против столбцов A и D.

Вот ссылка на образец электронной таблицы Google, которую вы можете отредактировать, показывая все попытки.

Все ваши помощь и комментарии с благодарностью!

Ответы [ 2 ]

1 голос
/ 03 июня 2019

может быть так:

=ARRAYFORMULA(UNIQUE(SORT({VLOOKUP(UNIQUE(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
 SORT({B2:B, TO_TEXT(A2:D)}, 2, 0), {2, 3, 4, 5}, 0); 
 FILTER(A2:D, D2:D="RETURN")},1,1)))

enter image description here

0 голосов
/ 06 июня 2019

Решение

Вся благодарность Мэтту Кингу, который нашел полный ответ.

=ARRAYFORMULA(QUERY({A:D,(COUNTIFS(C:C,C:C,A:A,">="&A:A)=1)*(D:D="CLOSED")
 +NOT(REGEXMATCH(TRIM(TRANSPOSE(QUERY(IF((TRANSPOSE(A:A)<=A:A)*(TRANSPOSE(C:C)=C:C),D:D,)
 ,,9^99))),"CLOSED"))},"select Col1,Col2,Col3,Col4 where Col5=1"))

По существу,

  • Сначала присваивается счетчик каждой строке для любого заданного порядка
  • Транспонировать и комбинировать состояния
  • Если естьтам статус ЗАКРЫТО, не используйте его
  • Затем отфильтруйте по языку запросов

В результате -

enter image description here

См. Решение здесь .

Мод

Я добавил пункт, чтобы полностью исключить статус ПРИМЕЧАНИЕ из текущих записей -

=ARRAYFORMULA(QUERY({A:D,(COUNTIFS(B:B,B:B,A:A,">="&A:A)=1)*(D:D="CLOSED")+ 
 (ARRAYFORMULA(IF((ARRAYFORMULA(NOT(REGEXMATCH(TRIM(TRANSPOSE(QUERY
 (IF((TRANSPOSE(A:A)<=A:A)*(TRANSPOSE(B:B)=B:B),D:D,),,9^99))),"CLOSED"))))    
 =TRUE,IF((ARRAYFORMULA(NOT(TRANSPOSE(ARRAYFORMULA(TRANSPOSE(D:D)))="NOTE")))  
 =FALSE,FALSE,TRUE),FALSE)))},"select Col1,Col2,Col3,Col4 where Col5=1"))

Реализация

Это был образец, протестированный с 2500 строками данных, и выполнение заняло более 80 секунд.Таким образом, хотя это и отвечает на вопрос, это не обязательно является жизнеспособным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...