Как позволить среднему пользователю создавать логическое выражение графически

В нашем приложении есть список клиентов и список ключевых слов (среди прочего). Каждый клиент может иметь несколько ключевых слов, но это не обязательно. Так, например, у одного клиента могут быть ключевые слова "розничная" и "цепочка", можно иметь только "подрядчика", а третья может вообще не иметь.

Я хочу, чтобы пользователь сделал выбор клиентов на основе этих ключевых слов, но не должен был писать (retail AND chain) or contractor and not wholesale

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

Есть ли у кого-нибудь предложения о том, как это сделать? Или, может быть, некоторые примеры приложений, где есть аналогичная функциональность?

Ответ 1

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

Find customers with

All of these            Any of these          None of these
[] retail               [] retail             [] retail
[] chain                [] chain              [] chain
[] contractor           [] contractor         [] contractor
[] wholesale            [] wholesale          [] wholesale

Ответ 2

Конечные пользователи имеют серьезные проблемы со сложными булевыми конструкциями. Было много исследований этого (И им очень легко понять, но OR - это сложно). Предоставьте конечным пользователям доступ к генератору булевых выражений общего назначения, и вы прыгаете вниз по кроличьей дыре без конца.

  • Решение JacobM - приятное упрощение.
  • Одна система, которую я использовал в прошлом, состоит в том, чтобы усовершенствовать поиск: разрешить, возможно, одно или два решения для первого поиска, а затем разрешить конечным пользователям уничтожать результаты с помощью ряда единых решений ( "просто показать подрядчиков", "не в розницу" и т.д.). Для того, чтобы это хорошо работало, вам обычно нужен простой способ для ведения последних поисков либо через список вкладок, либо что-то еще.
  • Подумайте о своих конечных пользователей. Действительно ли им нужен полный логический генератор поиска? Каковы фактические данные, которые они хотят? Имеет ли доступ к этим данным поиск не более сложный, чем какой-либо произвольный лимит? Если это так, создайте свой пользовательский интерфейс, чтобы поддерживать только до этого предела. Решение JacobM является примером этого в некоторой степени.

Ответ 3

Для большей мощности и гибкости, чем вы можете добиться с помощью фиксированных списков полей, theres запрос по примеру, хорошо зарекомендовавший себя подход что позволяет строить сложные булевы выражения.

Для действительно графически способов указания неограниченных произвольных булевых выражений, пара, использующая метафоры пути:

  • Мюррей, Патон и Брайс Калеидокери (Журнал визуальных языков и вычислений Том 11, выпуск 2, апрель 2000, стр .151 -189)

  • Shneidermans Filer/flow (Продолжение 54-й ежегодной встречи Американского общества информационных наук, т. 28, Вашингтон, Округ Колумбия, 27-31 октября 1991 года, p379-384).

В то время как лучше, чем булевские выражения в стиле SQL, все они являются относительно сложными пользовательскими интерфейсами, что, вероятно, требует использования, по крайней мере, некоторой практики. Таким образом, любая такая специальная функция запроса должна быть изолирована как "расширенная" функция. В большинстве приложений пользователи имеют несколько очень специфических типов запросов, на которые приходится основная часть их работы (например, учетные записи с задолженностью более чем на n дней). Простой диалог для выбора консервированных или полуконсервированных запросов лучше всего подходит для этого и должен быть пользовательским интерфейсом по умолчанию.

Ответ 4

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

Ответ 5

В базе данных MS Access есть мастер для создания отчетов. Пользователь ориентируется на построение SQL-запроса интуитивным способом. TOAD имеет мастер для фильтрации запросов.

Надеюсь, это поможет вам.