2017-01-06 2 views
0

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

Так, например, я хотел бы отфильтровывать A6: G41 по месяцам, которые я опрашивается как таковой:

=query(A6:G41," select * where A >= date '"&TEXT(O3,"yyyy-mm-dd")&"' and A <= date '"&TEXT(P3,"yyyy-mm-dd")&"' ") 

A6: G41 является таблица Я запрашивая, в то время как O3 и P3 являются начальными и конечными датами месяцев, предоставляя мне все транзакции за указанный месяц. Я хотел бы добавить дополнительные условия для фильтрации, такие как «питание, встречи, компьютерное оборудование», которое будет обозначаться в ячейках R1, R2 и R3, которые являются выпадающими списками.

Любые мысли?

Вот ссылка на образец лист я сделал для справки: https://docs.google.com/spreadsheets/d/1dKnUeEad5LyX73Eo6kF-RXFakrhGSty67iKmhPoUbEc/edit?usp=sharing

ответ

0

Если все ваш запрос не делает, фильтрацию (без агрегации, сравнение столбцов, поворот и т.д.), то лучше использовать filter вместо , Одно преимущество: существенно меньше проблем с типами данных (например, преобразование дат в текст, а затем обратно к датам, как в вашем примере). Вы создали до сих пор запрос эквивалентен

=filter(A6:G41, A6:A41 >= O3, A6:A41 <= P3) 

Я упал бы «41» здесь (так как список может расти) и продолжать добавлять условие:

=filter(A6:G, A6:A >= O3, A6:A <= P3, I6:I = R1) 

также требует столбца I к быть равным R1. Если требуется проигравший матч, используйте regexmatch с регулярным выражением:

=filter(A6:G, A6:A >= O3, A6:A <= P3, regexmatch(I6:I, "(?i)travel")) 

матчи «путешествия» в любой точке I, без учета регистра.

условия также могут быть соединены «ИЛИ» логики, путем размещения + между ними, как это:

=filter(A6:G, A6:A >= O3, A6:A <= P3, (I6:I = R1) + isblank(R1)) 

Здесь третье условие выполнено, если либо столбец I равен R1, или R1 вл етс пустым.

+0

Awesome. Это здорово, и это очень полезно! Единственная проблема, которую я вижу, заключается в том, что если я изменил R1 на что-то, и он не найден внутри фильтра, я получаю сообщение об ошибке. И тогда, если я изменю его, я пойму, что нет верного значения, чтобы вернуться обратно. Можете ли вы придумать решение для решения этой проблемы? – Tommy

+0

Если 'filter' завернут в' iferror() ', сообщение об ошибке будет подавлено. Чтобы иметь «нулевую» опцию, пусть пользователь оставляет R1 пустым и фильтрует его с помощью regexmatch: например, 'regexmatch (I6: I," (? I) "& R1)'. Если R1 пуст, это соответствует всем. – FTP

+0

Отлично! Последнее, похоже, что это работает, если выполнены все условия. Вот как это у меня сейчас: '= iferror (фильтр (A6: G, A6: A> = O3, A6: A <= P3, I6: I = R2, H6: H = R1, J6: J = R3)) 'Однако, если я хочу просто изменить его обратно, чтобы перечислить все транзакции за указанный месяц, и сохраняйте« R1 »,« R2 »,« R3 »пустым, я получаю сообщение об ошибке (или пустое, если я добавляю в 'iferror()'. – Tommy

Смежные вопросы