Фильтрация с помощью флажков по нескольким критериям

Я пытаюсь создать информационную панель, для которой одна из вкладок будет направлена ​​на фильтрацию списка людей на основе нескольких критериев. Для части «передней обложки» я подумал, что представление критериев с помощью флажков было бы полезным, но у меня не было никаких идей о том, как я могу сделать это из вкладки необработанных данных с различными формулами. Пример того, как я предполагаю, это будет выглядеть здесь (пример обложки и необработанные данные):

https://docs.google.com/spreadsheets/d/1RzQ5vJYwpqDClqcPe_U7meRdtFBYL_Gn6b8_yKIP1RU/edit#gid=0

Основная проблема, с которой я столкнулся, заключается в том, что он охватывает несколько критериев, и я изо всех сил пытаюсь придумать формулу для возврата данных с этим. Итак, в примере листа я мог бы отметить «яблоки» и «грибы», и он вернет имена людей из вкладки сырых данных, которые удовлетворяют этим критериям.

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

Если бы у кого-то было решение этой проблемы или аналогичный способ, которым, по их мнению, можно было бы достичь той же цели, любая помощь была бы очень признательна!

Спасибо, Сэм


person Sam Breddy    schedule 01.08.2018    source источник


Ответы (1)


Я обновил вашу таблицу, добавив формулу в Data!F2

=IFERROR(FILTER(A2:D9, 

IF(Front!$C2 = TRUE, SEARCH(Front!$B2, $B$2:$B$9), LEN($A$2:$A$9)), 

IF(Front!$C3 = TRUE, SEARCH(Front!$B3, $B$2:$B$9), LEN($A$2:$A$9)),

IF(Front!$C4 = TRUE, SEARCH(Front!$B4, $B$2:$B$9), LEN($A$2:$A$9)),

IF(Front!$C6 = TRUE, SEARCH(Front!$B6, $C$2:$C$9), LEN($A$2:$A$9)),

IF(Front!$C7 = TRUE, SEARCH(Front!$B7, $C$2:$C$9), LEN($A$2:$A$9)),

IF(Front!$C8 = TRUE, SEARCH(Front!$B8, $C$2:$C$9), LEN($A$2:$A$9)),

IF(Front!$C10 = TRUE, SEARCH(Front!$B10, $D$2:$D$9), LEN($A$2:$A$9)),

IF(Front!$C11 = TRUE, SEARCH(Front!$B11, $D$2:$D$9), LEN($A$2:$A$9))), "No Values Returned in filter. Please try again.")

Это должно сделать то, что вы ищете.

Обновлять

Меня попросили показать, как работает эта функция.

Чтобы начать с IFERROR, это обернуто вокруг основной функции, поэтому, если FILTER ничего не возвращает, пользователь не встречает сообщение об ошибке.

Основная часть функции построена на FILTER, который действует как прокси для QUERY, что изначально и пробовал @Sam Breddy.

Работая с флажками, которые оцениваются как TRUE или FALSE в зависимости от того, отмечены они или нет, мы можем приступить к созданию нашей функции динамической фильтрации.

Первый параметр фильтра ... IF(Front!$C2 = TRUE, SEARCH(Front!$B2, $B$2:$B$9), LEN($A$2:$A$9) ... определяет, есть ли какие-либо Apples в $B$2:$B$9, только если флажок в Front!$C2 установлен на TRUE.

Уловка здесь заключается в том, чтобы иметь допустимое значение, когда флажок установлен на FALSE. Если для параметра FALSE задано значение «ничего / пусто», появится сообщение об ошибке:

FILTER has mismatched range sizes. Expected row count: 8. column count: 1. Actual row count: 1, column count: 1.

Чтобы противостоять этому, я просто возвращаю длину первого столбца обратно в функцию с LEN($A$2:$A$9), что не повлияет на фильтр.

Интересная часть - это SEARCH, который возвращает:

The position at which a string is first found within text and ignores capitalization of letters. Returns #VALUE! if the string is not found.

Поиск находит строку, которую вы ищете ... в данном случае Apple, а затем передает местоположение этой строки обратно в FILTER, позволяя отображать только те строки, где она оценивается как TRUE.

Например. SEARCH(Front!$B2, $B$2:$B$9) вернет 1

Используя SEARCH метод для каждого последующего параметра нашей FILTER функции, они действуют как OR, позволяя функции оценивать APPLES или ORANGES.

Честно говоря, я попытался решить эту проблему и в итоге оказался на высоте. Я не думаю, что это сработает для элементов в одном столбце с одинаковой первой буквой

Например. Если вы ищете Apples и Andy's в одном столбце ...

Я также уверен, что могут возникнуть некоторые проблемы с выполнением такого рода динамической фильтрации по двум столбцам с одинаковыми значениями, но это решение должно соответствовать вашим потребностям.

Ваше здоровье,

person Chef1075    schedule 02.08.2018
comment
Это невероятно, большое спасибо! Если вы в состоянии дать представление о том, как это работает, мы будем очень признательны :) - person Sam Breddy; 03.08.2018
comment
Конечно. Я отредактирую свой ответ, теперь он работает. Также убедитесь, что ответ правильный. Удачи тебе с твоим проектом! - person Chef1075; 03.08.2018