Условное форматирование или фильтрация строки с несколькими условиями сразу?

Автор Mric, 11 января 2021, 21:00

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Цитата: kompilainenn от 13 января 2021, 23:46багрепорт пишите
Цитата: eeigor от 12 января 2021, 14:39А в Excel не всё однообразно (значит, безобразно)...
3) функция СЧЁТЕСЛИ() – <работает> по принципу "точно соответствует". Используется в паре с функцией ЕСЛИ().
Сам себя цитирую :)
Видимо, разработчик обеспечил соответствие поведения функции COUNTIF (другие не проверялись) поведению той же формулы в Excel. Всё так, с той лишь разницей, что в Excel нет вышеупомянутого флажка и в Справке написано иначе (с учётом флажка).
Написать багрепорт будет непросто: задействованы Параметры, Справка, Руководство по Calc 6.2, Excel... и всё надо давать по-английски не в вольном переводе, а как в оригинале, а у меня русская версия Calc и Справки, и т.д., соответственно. Потом, вероятно, проверке надо подвергнуть весь перечень функций:
database functions, and VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS, and SEARCH.

UPD:
Проверка функции базы данных DCOUNT выявила ту же проблему: работает, как COUNTIF, но ведь DCOUNT - функция базы данных, требует диапазона условий на листе, и в отличие от стандартного и расширенного фильтров, которые тоже работают с диапазоном условий на листе, НАПРОЧЬ ИГНОРИРУЕТ ВЫШЕУПОМЯНУТЫЙ ФЛАЖОК (пример прилагается; точнее, не работает с "simple comparisons", и надо добавить хоть пару скобок, о чём писал выше в ответе #25). Расширенный фильтр в примере потребует от вас заполнить все поля заново, чтобы обновить фильтр. DCOUNT обновляется автоматически. Данные рассогласованы. Этакую "непоследовательность" и ошибки данных следует отнести к грубым ошибкам.
Помог бы кто-нибудь с багрепортом... ибо в Calc'е "отвалился целый кусок" ???

Цитата: Bigor от 13 января 2021, 11:15Поставил флажок обратно. Так надежнее
Выходит, что так надёжнее...

UPD2:
Файл примера обновлён.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

kompilainenn

>а у меня русская версия Calc и Справки,

ну так поставьте английские версии. А багу сначала нужно правильно сформулировать по-русски. Я, например, не понимаю, в чем проблема. В справке? В работе функций? В работе функций в условном форматировании?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

Цитата: kompilainenn от 14 января 2021, 10:58Я, например, не понимаю, в чем проблема.
В прилагаемом примере данные рассогласованы:
расширенный фильтр вернул результат, а функция базы данных DCOUNT вернула 0. И то, и другое обрабатывают один и тот же диапазон условий.
Но DCOUNT не работает с "simple comparisons" и требует каких-л. "опознавательных признаков" регулярного выражения, например пары скобок.

UPD:
А согласно Справки должна самостоятельно обрамлять условие символами ".*" слева и справа от него. Именно так написано. И именно в этом смысл флажка. И, наконец, именно так работают фильтры.

UPD2:
Проблема в опции, которую @Bigor назвал ненадёжной, а я попытался выяснить, в чём причина.

Параметры – LibreOffice Calc – Вычисления
Общие вычисления
 Условия поиска = и <> должны распространяться на всю ячейку

UPD3:
Это, по сути, уже оффтоп. Мы решаем проблему, с которой столкнулись в ходе решения задачи автора темы, а обсуждение которой уже "размазано" по ветке:
Цитата: eeigor от 12 января 2021, 14:39Тогда должно работать и без ".*", но у меня что-то не вышло. А почему?
=IF(AND(COUNTIF($A4;"abc");COUNTIF($A4;"123"));1;0)
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

Уважаемые форумчане, я поясню суть проблемы на примере фрагмента своих данных (скриншот прилагается).
Желтым выделен диапазон условий с именем "Условия".
Ниже строка итогов. Ещё ниже следует диапазон базы данных с именем "БД".

В строке итогов используется функция SUBTOTAL.
Пример:
=SUBTOTAL(103;БД_ФИО)  'диапазон БД_ФИО д.б. создан, и это неудобно, ведь это поле диапазона базы данных (!)

Удобнее так:
=DCOUNTA(БД;"ФИО";Условия)
Или вот так, если работаем по всем столбцам:
=DCOUNT(БД;0;Условия)

Очень наглядно и удобно. Как в Excel.
Но использование функций базы данных приводит к вышеописанным ошибкам при снятом вышеупомянутом флажке (на скриншоте в поле 0 вместо 81).
А функция SUBTOTAL не понимает структурных ссылок базы данных. Точнее, понимает, но заменяет их абсолютными ссылками после повторного открытия файла. Я имею в виду следующее:
=SUBTOTAL(103;БД[ФИО])  'структурная ссылка вместо ссылки на диапазон БД_ФИО, который нужно создавать
После открытия файла ссылка будет заменена:
=SUBTOTAL(103;$Данные.$F$10:$F$1982)

ВЫВОД: совместная работа фильтра и функций базы данных не согласована, необходимо установить злосчастный флажок, а условия отбора дополнять своими ручками соответствующими символами регулярных выражений, то есть распространять на всю строку. Или создавать диапазоны столбцов вместо работы с полями диапазона базы данных. Ну, это маразм...
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

НА ЗАМЕТКУ

Да, это важные, и скрытые от пользователя, параметры. А как с этим бороться, сказано здесь (почитайте раздел "There are two ways to combat this:").

Крайне пользительно:
COUNTIF(A3;".*") returns 1 if regular expressions are turned on.
COUNTIF(A3;"<>e") returns 1 if whole cell matching is turned on.

Однако, разбирая этот материал, вы столкнётесь всё с той же описанной выше проблемой.
У вас не будет работать выражение №2, пока вы не заключите его, к примеру, в круглые скобки:
=COUNTIF(A3;"<>(e)")

И судя по всему, этого раньше не было...
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

sokol92

Для справки. В Excel использование "D-функций" не рекомендуется разработчиком, функции SUMIFS, COUNTIFS значительно удобнее.
Владимир.

eeigor

sokol92, спасибо. Но в моём частном случае D-функции позволяют работать с именами полей. Я только что закончил "сражение" с расширенным фильтром в Calc, и полностью автоматизировал процесс. И хотя без заплатки не обошлось, но в целом получилось удобно. Поэтому для меня наличие диапазона условий на листе – норма: фильтруется быстро, и критерии на глазах. В этом случае удобны D-функции, так как они работают с именами полей диапазона базы данных, а новые функции – нет (а в Excel-то работают прекрасно со смарт-таблицами). По скорости они одинаковы и существенно опережают формулы массива.

Вероятно, расширенный фильтр, диапазоны БД и функции БД – не самый распространённый способ обработки данных.
Приведу ещё один аргумент: в Calc сравнительно бедные сводные таблицы. Но дело даже не в этом, а в том, что СТ не позволяют объединять критерии оператором "ИЛИ", для этого создают вспомогательные столбцы в исходных данных. Расширенный фильтр (а в Calc ещё и Стандартный фильтр, но он не нагляден) прекрасно с этим справляется (И+ИЛИ). Впрочем, и здесь приходится иногда использовать вспомогательные столбцы, чтобы хранить устоявшиеся варианты отбора данных. Схема та же:
=IF(OR(AND(COUNTIF(...);...);...);1;0)

UPD:
Всё, о чём я писал, имеет значение для тех, кто что-то разрабатывает для других. В общем, для комплексных решений. Я, к тому же, восстанавливаю утраченную функциональность после ухода с Excel.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community


eeigor

Респект. kompilainenn, я не предполагал, что можно файл примера прилагать на русском. Значит, можно?
Я смотрю, что Mike Kaganski уже добавил свой комментарий.
Единственное, осталось за кадром текущее решение проблемы. Если решение в виде пары скобок или других "опознавательных признаков" может что-то разъяснить. Впрочем, я об этом постарался сообщить...
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

kompilainenn

Цитата: eeigor от 14 января 2021, 22:09не предполагал, что можно файл примера прилагать на русском. Значит, можно?
Какая разница, если мы смотрим на число?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

economist

@eeigor - поддерживаю! Диапазоны БД в Calc - действительно очень быстрый и мощный инструмент (такого нет даже в Excel), потому что:

- Они "прячут" всю БД-сущность от пользователя. Он понятия не имеет откуда взялись данные, кто за него ввел логины/пароли тем самым 1С/Экселям/etc, почему данные "не убиваются" правкой и сами восстанавливаются при открытии файла или по кнопке. Большинство юзеров воспринимают это как настоящее офисное чудо.

- Можно использовать данные из разных БД (sqlite, DBF, TXT итд) на одном листе (или даже заменяя поверх), обойтись без муторного кодинга Форм Base и уж тем более муторных Диалогов BASIC (где необходима обработка кучи возможных событий и тупняков юзера вроде нажатия Esc и потери фокуса).

- Calc становится самым доступным конструктором одно-оконных интерфейсов бизнес-приложений, а всю логику и скорость "большого ПО" - обеспечивает "невидимый" SQLite или PostrgreSQL (и сервер с NVMe RAID массивом, на котором всё быстро это крутится). Представляете сколько работы можно спихнуть на юзеров? Они ведь будут рады, что сами себе нарисовали "форму", и формулами, усл. форматом - сделали то, чем будут гордиться и с удовольствием использовать.

- Макросом можно легко "подменить" дескртиптор DatabaseRange, а там можно сменить не только "SELECT...", но и даже движок БД на принципиально другой. И, самое главное, быстрее механизма doImport для получения данных из огромных баз, похоже, в OpenOffice|LibreOffice - нет:

oDBR = thisComponent.DataBaseRanges.getByName("Импорт1")
oDesc() = oDBR.getImportDescriptor()
oDesc(0) = "ДебиторыODB" ' а еще есть ГороскопCVS.ODB :-)
oDesc(2) = "SELECT..."
oDBR.getReferredCells.doImport(oDesc())


- У DatabaseRange есть отдельный Автофильтр, которым макросом можно управлять независимо от прочих (и куча команд Диспетчера). Кстати, его критерии можно хранить в ячейках выше, реализуя классический 1С/SAP-подобный интерфейс: "шапка" с кнопками (и итогами!) и "табличная часть" ниже. Ничего более эргономичного для "офисных/бух" данных пока не изобрели.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

@economist, мне было интересно почитать.

P.S. Вообще, монологи от @economist традиционно вдохновляют и направляют...
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

Mric

Чтобы не создавать новую тему, тут еще одна загвоздка возникла. Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все?

economist

1) Повторите формулу из условного форматирования в пустом столбце
2) включите Автофильтр, отберите нужные строки
3) выделите отобранное, удалите

В Calc нет Фильтра по цвету (заливки и шрифта), какой есть в Excel, пожелания высказывались, когда-нить допилят и в LO.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

kompilainenn

Цитата: Mric от 19 января 2021, 15:48Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все?
Так может следовало просто удалять дубликаты, а не кружиться с условным форматированием?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут