Фильтрация строк Google Sheet по группам (разделенные пустыми строками). Фильтрация объединенных записей
Я получаю данные в формате выше. Таким образом, записи агрегируются из разных источников. Одна запись фактически представлена одной строкой текста в столбцах B-H . Данные разделены по записям от Менеджера 1 до Менеджера 2 и так далее. Но столбцы I-L имеют несколько строк и относятся к одиночным записям в группе.
Установил цвета чтобы было видно каждую индивидуальную запись:
SourceSheet (образец данных) доступен: SourceSheet
Мне нужно фильтровать эти данные по столбцам B-H . Когда я фильтрую, как обычно, фильтруется только одна строка. Как выполнить фильтрацию по сгруппированным записям, разделенным пустыми строками?
Например, если я фильтрую на основе Менеджера 1, я получаю результат:
Можно ли реализовать это с помощью стандартного фильтра Google Sheet или Googe Apps Script?
Ответы (3 шт):
В доп. столбец:
=СЧЕТЕСЛИ(B$4:B4;">0")
Или для текстовых записей:
=СЧЕТЕСЛИ(C$4:C4;"?*")
Можно применить СЧЕТ()
, СЧЕТЗ()
Фильтрация по этому столбцу
Организация Вашей таблицы исключает возможность использовать встроенный фильтр по озвученным критериям. Моё предложение - "велосипед": преобразовывать массив, чтобы в строках был хоть один уникальный ключ для возможности фильтровать нужные диапазоны. Попробуйте на новом листе в ячейку A1 такую формулу (авось поможет). Это даст возможность устанавливать нужный фильтр по манагеру:
=IFNA(HSTACK('Filtering 2'!B3:C;{"Manager";ARRAY_CONSTRAIN( ARRAYFORMULA(VLOOKUP(ROW('Filtering 2'!D4:D);IF(LEN('Filtering 2'!D4:D);HSTACK(ROW('Filtering 2'!D4:D);'Filtering 2'!D4:D););2));COUNTA('Filtering 2'!I4:I);1)};'Filtering 2'!E3:L);)
Как правильно заметил @Alexander Kouleshov, для фильтрации нужен ключ.
Столбец с ключом должен быть полностью заполнен. Вот Вам варинант, где можно выбрать сразу несколько столбцов, которые будут заполнены, и соответственно которые можно будет использовать в качестве ключа для фильтрации.
Формула:=let(key;"Manager|Clinic"; BYCOL(Filtering!B3:L;LAMBDA(_col; if(REGEXMATCH( CHOOSEROWS(_col;1);key);SCAN(;_col;LAMBDA(acc;x;IF(x<>"";x;acc)));_col))))