I know, this is a very broad question and there's a lot of context to consider, but how would you offer quick filtering of large data sets (tables/list views)?

Currently, software products in our company employ two different patterns:

1. Text boxes for each column of data (below the header). The input is matched against the data in the same column.
2. One text box for the entire table. The input is matched against any column.

![enter image description here](https://i.stack.imgur.com/s088t.png)

In the long run I'd like to consolidate these patterns into one consistent pattern for filtering. Currently, I've a strong personal preference for #2:

* #1 is not widely used (however, Excel does something similar for tables)
* The UI can easily be translated to most platforms
* Users don't have to reflect in which column a string of data occurs
* It is relatively easy to determine if a table is currently filtered (because there's text in the box). #1 doesn't provide such a natural clue, if the filtered column is off-screen
* Users can search for data that isn't displayed, when its columns are hidden

However, #1 has some advantages:

* It is relatively easy for users to define more complex filters over several columns. #2 would force you to use some kind of artificial query language for the same flexibility.
* The results are fewer (since only one particular column is matched), while #2 might show some (or depending on the data set even a huge lot) of undesired results
* It is easier to provide data-type-specific filters for discrete states that are represented as icons

Again, I believe, it is hard to weight these options for just any data set, but quite frankly, that's what I have to do here. The data of our customers varies wildly and sometimes comes from external sources outside of our control.

I'm very interested in any conclusive research and/or anecdotal evidence, if one or the other (or something entirely different) works well for such a general-purpose setting.