The funnel in the heading of a column opens the filter of that column. A filter limits the rows which the grid shows to the rows which meet a condition on the type of the column: a number is compared as a number, a date as a date and a text as text. The examples use the result of the statement described in [[Invantive Query Tool Multi-Platform/Results|Results]]. The typed filter is available from release 28.0. The filter works on the rows which the product already holds. It does not ask the platform again, so it is the difference between what is fetched, which the statement decides, and what is looked at. The rows which a filter leaves out are not removed: clearing the filter shows them again. ![[20261008-qtm-results-filter.png]] ## The Parts of the Filter The filter has the following parts, from top to bottom: - A list of operators and a box for the operand form the first condition. - The choice between "AND" and "OR" joins the first condition to the second one. - A second list of operators and a second operand form the second condition. A condition with no operand is left out. - "Clear" takes away the conditions and the choice of values. - The box "Search" narrows the list of values down to the values which contain the text. - The check box "(All)" ticks or unticks every value in the list. - The list shows every different value of the column, each with the number of rows which hold it, such as `1,25 (1)`. The empty values stand first as "(Blanks)". Unticking a value hides the rows which hold it. - Under the list stands the number of different values, such as "10 Values". The list shows the values as the cells show them, in the format of the column: a number with its decimals, a date in the format of the device and a yes or no value as "Yes" or "No". The values are counted while the filter is already open, so the conditions can be typed at once. Filters on several columns apply together. ## Operators The operators which the list offers follow the type of the column: - A text: "Equals", "Does not equal", "Contains", "Does not contain", "Starts with", "Does not start with", "Ends with", "Does not end with", "Like", "Not Like", "Matches Regular Expression", "Does not match", "Greater than", "Greater than or equal to", "Less than", "Less than or equal to", "(Blanks)" and "(NonBlanks)". - A number: "Equals", "Does not equal", "Greater than", "Greater than or equal to", "Less than", "Less than or equal to", "Contains", "Does not contain", "(Blanks)" and "(NonBlanks)". - A date, a time and a date with a time: "Equals", "Does not equal", "Greater than", "Greater than or equal to", "Less than", "Less than or equal to", "(Blanks)" and "(NonBlanks)". - A yes or no value: "Equals", "Does not equal", "(Blanks)" and "(NonBlanks)". "(Blanks)" and "(NonBlanks)" need no operand. They keep the rows with an empty value, or the rows with a value. ## Operands An operand is read in the language of the device first and in the invariant notation after that, so a date can always be written as `2026-10-03`, and also as `03/10/2026` on a device which writes dates that way. A number takes the decimal separator of the device or a point. The comparison depends on the type: - A number is compared as a number. A decimal is compared exactly, and a floating point number as a floating point number. - A date is compared at the precision which the cell shows: a date by the day, a date with a time by the second and a timestamp by the tick, with the offset of the time zone taken into account. - A yes or no value takes "Yes" and "No" in the language of the product, and `true`, `false`, `1` and `0`. - A text is compared without regard to upper and lower case. An operand which cannot be read does not filter. Its box turns red and its tool tip gives the reason: "Not a number.", "Not a date." or "Not a yes or a no.". A date which is half typed therefore does not empty the grid. The operator "Like" takes `%` and `*` for any number of characters and `_` and `?` for one character. The operator "Matches Regular Expression" takes a regular expression, which has one second to match; an expression which takes longer, or which is not valid, does not filter. ## Examples The conditions which follow were set on the result of the statement of [[Invantive Query Tool Multi-Platform/Results|Results]], which has twelve rows. The grid showed the following numbers of rows: - `AMOUNT` greater than `3` and less than `10`, joined with "AND": 4 rows, the rows `3`, `5`, `6` and `7`. Every amount between the two limits is shown; the three empty amounts are not, since an empty value is neither. - The same two conditions joined with "OR": 9 rows. Every amount is greater than 3 or less than 10, so every row with an amount remains, and only the three empty amounts go. - `AMOUNT` with the operator "(Blanks)": the three rows with an empty amount, the rows `4`, `8` and `12`. - `DAY_VALUE` greater than `2026-10-03`: 4 rows, the rows `3`, `4`, `8` and `9`. The operand `03/10/2026` gives the same rows on the device of the example. - `CATEGORY` starts with `ga`: 4 rows, the four rows with `Gamma`. Upper and lower case do not matter. - `DAY_VALUE` greater than `zz`: all 12 rows. The operand is not a date, so the filter does nothing. - The list of the column `FLAG` shows "No (8)" and "Yes (4)".