Ручная маркировка и поиск данных - PullRequest
0 голосов
/ 07 октября 2019

Мне нужна система, которая позволяет фильтровать записи по разным текстовым тегам.

Скажем, мы храним информацию о некоторых продуктах. У нас есть красные яблоки, груши, арбузы, огурцы, перец и хлеб. Мы сохраняем их на листе с именем «Данные» в столбце А. Следующие столбцы заняты тегами, такими как «Красные яблоки» - «Красный», «Сладкий», «Фруктовый», «Без упаковки»;Перец красный, острый, вегетарианский, фасованный;Хлеб только что упакован.

Затем на другом листе у нас есть специальный диапазон, скажем, A1: A10, который может принимать любой тег данных, например, Spicy или Packed. Что мне нужно, так это когда кто-то входит в Spicy и Packed в этом диапазоне, он просматривает все элементы, которые являются Spicy и Packed, и отображает их, поэтому в этом случае он будет отображать Peppers в ячейке B1.

Напомним: данные! A: A - имена записей, Данные! B: Z - теги, Main! A1: A10 - теги, введенные пользователем, Main! B: B - записи с тегами, которые соответствуют введенным в A1: A10.

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

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Этого можно достичь, используя вспомогательный столбец для сбора всех тегов, а затем формулу =query().

1) Начните с создания столбца с несколькими тегами, используя либо =join() или =textjoin(), захватывая все потенциальные теги для каждого продукта.

Textjoin to multi-tag

2) Затем используйте this ответ, который поможет вам создать формулу =query().

Query for result

0 голосов
/ 07 октября 2019

если Data лист выглядит так:

0

и вам нужен «конструктивный» список,Вы можете сделать:

=SORT(FILTER(Data!A2:A, REGEXMATCH(TRANSPOSE(QUERY(TRANSPOSE(Data!B2:Z),,999^99)), 
 TEXTJOIN("|", 1, A1:A10))))

0


демонстрация электронной таблицы


0

, если вам нужен «разрушительный» список, сделайте:

=ARRAYFORMULA(SORT(QUERY({Data!A2:A, TRANSPOSE(QUERY(TRANSPOSE(Data!B2:Z),,999^99))}, 
 "select Col1 where "&TEXTJOIN(" and ", 1, IF(A1:A10<>"", 
 "Col2 contains '"&A1:A10&"'", ))&"", 0)))

0

0 голосов
/ 07 октября 2019

Существует довольно простое решение для этого.

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

=SUM(ARRAYFORMULA(COUNTIF(B1:1,'Main'!$A$1:$A$10)))

1

Далее, на вашем листе презентации зарезервируйте место, где вы можете вводить теги - по одному за раз. В моем случае это диапазон А1: А10. Затем просто вставьте эту формулу куда-нибудь еще

=IFERROR(FILTER(Data!$B:$B,Data!$A:$A=(10-COUNTBLANK($A$1:$A$10))),"")

В этом месте появятся все подходящие элементы. Я также добавил сортировку в формулу, почему бы и нет.

2 3

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

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