English 中文(简体)
How to Build a User Friendly Filter
原标题:

Our application displays tons of valuable information to our users in a table. We have a filtering capablity that is based on boolean/logic searches. Even after coaching, users still tend to not understand how to use filters because AND OR > >= etc are foreign to them. This filter is easy for programmers since it is easily translated into code. Any examples on how this can be made more user-friendly and less prone to error?

最佳回答

In web applications, telerik had a good idea with their grid, you should be able to do that in desktop applications too.

问题回答

In the past, when I needed to solve this problem, I presented the users with a list of items (in one or more columns), and gave them a single text box to type text into. I would then match the text against the text in the columns, and collapse the list (removing records that do not match) as they type.

This approach reminds users of Google. Everyone knows how to Google.

If you don t like the idea of presenting a large list of all items initially, you can show an empty results pane first, and display results after a search is typed in.

Convert operators to plain English text and ask them to select from it. For eg: To

Show me all Books whose author is [text field] and the price is [less than/greater than] [text field]

[less than/greater than] is a dropdown list

[text field] is an input box

The resulting text after the user has filled in all the fields should result in plain simple English

Eg: Show me all books whose author is Stephen King and the price is less than 10 $

I used this in an app of mine when I used to freelance and the users loved it. Using some nifty UI programming you can give options to expand the filter to n levels.

you can provide some preset filters for the most common queries to that table - if that s possible with the application you are using

you can provide a "count instead of display" mechanism so the user sees how many rows he/she will potentially retrieve

you can provide them a Wiki page with some examples online

you can give them a QBE tool

hope that helps good luck MikeD

In my experience you are simply not going to get end users to understand the difference between AND and OR conditions. Therefore I build my filters so that ANDing or ORing is built in. In general, my logic is as follows:

  1. Criteria for different fields are ANDed together to restrict results.

  2. Multiple values for the same field are effectively ORed together and then ANDed onto the criteria for other fields. I generally detect input into a single field of comma-separated lists (translated to IN ()), dash-separated ranges (translated to BETWEEN), wildcard values (translated to LIKE), and any combination (for example Customer ID: 1-10, 50, 52).

I find that most users intuitively understand this system.

Of course, from time to time a different interface with some degree of ORing is required and in those cases I generally have a section of the search user interface in a panel or group box labelled "Any of these is true".

I have recently been working on this problem. My solution is to be more descriptive, to use words instead of symbols and to change the words where it allows for a more readable layout. To illustrate, imagine the filter expression:

Breed == "Spaniel" AND (Age == 2 OR Colour == "White")

Certain linear Query builders might write this:

 (  And/Or Field    Operator Value
[ ]        [Breed]  [=]      [Spaniel]
[1] [AND]  [Age]    [=]      [2]
[1] [OR]   [Colour] [=]      [White] 

Or a hierarchical one may display this as:

AND
    [Breed] [Is Equal To] [Spaniel]
    OR
        [Age]    [Is Equal To] [Spaniel]
        [Colour] [Is Equal To] [White]

Both of which might be readable to a developer but not so readable to the layperson.

My solution is more like:

Show ALL records where
    [Breed] [Is Equal To] [Spaniel]
    Show ANY records where
        [Age]    [Is Equal To] [Spaniel]
        [Colour] [Is Equal To] [White]

So borrowing from the hierarchical approach but changing the AND and OR to an ALL or ANY. This means it can be read from top to bottom a little more easily.

I think Django s built-in admin interface has a very intuitive UI for filters.

There s a simple screenshot in the docs but there s a lot more you can do, especially when filtering on dates.

You might want to take a closer look at Django s admin interface to see if you can apply some of their tricks to your case.

I would think something similar to MS Access Query generator. You may also want to have good context sensitive help system that will guide first time users.

Theresa Neil illustrated several approaches for building complex rule interfaces (AKA predicate clauses) in the iTunes Solves the Nested Clause Dillema post. Some good examples there. I really like the way Apple does it in iTunes (although, I don t use iTunes).





相关问题
Why running a service as Local System is bad on windows?

I am trying to find out the difference between difference service account types. I tumbled upon this question. The answer was because it has powerful access to local resources, and Network Service ...

Programmatically detect Windows cluster configuration?

Does anyone know how to programatically detect that a Windows server is part of a cluster? Further, is it possible to detect that the server is the active or passive node? [Edit] And detect it from ...

get file icon for Outlook appointment (.msg)

I ve read Get File Icon used by Shell and the other similar posts - and already use SHFileInfo to get the associated icon for any given extension, and that works great. However, Outlook uses ".msg" ...

Identifying idle state on a windows machine

I know about the GetLastInputInfo method but that would only give me the duration since last user input - keyboard or mouse. If a user input was last received 10 minutes ago, that wouldn t mean the ...

Terminating a thread gracefully not using TerminateThread()

My application creates a thread and that runs in the background all the time. I can only terminate the thread manually, not from within the thread callback function. At the moment I am using ...

热门标签