User & Content Filter Parameters

The combination of content filters (both at user level and shared URL level) and parameters allow admin users to control user access to a subset of available data on the same dashboard or widget. Filters are replaced at runtime for direct queries, or applied on top of the data returned by a query.

User Level Filters

User-level filters limit data based on criteria associated to that user. For example, a national manager may be allowed to see data for all regions, but a Regional manager is only allowed to see data for their specific region for the same dashboard.

To set the user level filters, set the User Filter either during user invitation or if the user is already in the system, via the Edit User From the Team Menu.

Following example limits a user to a specific organizationid, applied on top of the results of the query. Note that the organizationid must be present in the dataset for the filter to take effect.

Also note the second filter is a query parameter called $c9_region$ passed into the query.

For more details on query parameters, please read /docs/embedSSO.html

Content Filters in Share URLs

The contentFilters URL parameter filters a dashboard or widget when it loads. This lets you send one shared dashboard to different audiences, each seeing only their own customer, region or date range.

contentFilters works with:

Note: On a plain Shareable URL, the filter values are visible and can be edited by anyone with the link. Use content filters in a plain URL for convenience, not security. To restrict the data a viewer can see, use User Level Filters or Secure URL Embed.

Syntax

contentFilters takes a JSON array. Each object in the array is one filter:

[{"fieldName":"customer","values":["Costco"],"operator":"="}]
Key Type Description
fieldName string The field to filter on. Not case sensitive.
values array The value(s) to compare against. Always an array, even for a single value. Quote strings (["Costco"]) and leave numbers unquoted ([90000]).
operator string The comparison to apply. See Supported Operators.

To use the filter in a link, URL encode the whole JSON string and append it to the share URL:

<share URL>?contentFilters=<URL-encoded JSON>

For example, the filter above becomes:

https://www.knowi.com/d/<dashboardShareId>?contentFilters=%5B%7B%22fieldName%22%3A%22customer%22%2C%22values%22%3A%5B%22Costco%22%5D%2C%22operator%22%3A%22%3D%22%7D%5D

Tip: Write the JSON in plain text first, then run it through a URL encoder. Spaces in field names, apostrophes in values (such as Macy's) and other special characters need no extra escaping beyond normal URL encoding.

Supported Operators

Operator Field Types Description
= string, number, date Exact match, case sensitive. With several values, matches any of them (same as in).
!= string, number, date Excludes rows that match the value.
in string, number Matches any value in the array.
not in string, number Excludes every value in the array.
like string Contains the value, case insensitive. For example, Ma matches Macy's.
not like string Excludes rows that contain the value, case insensitive.
> number, date Greater than.
>= number, date Greater than or equal to.
< number, date Less than.
<= number, date Less than or equal to.
is null any Field is empty. Use an empty values array: "values":[].
is not null any Field has a value. Use an empty values array: "values":[].

Word operators are lowercase with single spaces (not in, is null). For >, >=, < and <=, only the first value in the array is used.

Note: Use != for "not equal", not <>. The <> operator is not supported and returns the matching rows instead of excluding them. Operators such as starts with are also not supported and return no data. Use like instead.

Examples:

{"fieldName":"customer","values":["Costco"],"operator":"="}
{"fieldName":"customer","values":["Costco","Target"],"operator":"in"}
{"fieldName":"customer","values":["Costco","Target"],"operator":"not in"}
{"fieldName":"customer","values":["Ma"],"operator":"like"}
{"fieldName":"opened","values":[90000],"operator":">"}
{"fieldName":"customer","values":[],"operator":"is not null"}

Combining Filters

All filters in the array are combined with AND. For example, the following returns only Marketing rows for Costco and Target:

[{"fieldName":"customer","values":["Costco","Target"],"operator":"in"},
 {"fieldName":"message_type","values":["Marketing"],"operator":"="}]

To match one value OR another on the same field, put all the values in a single filter with in. Two separate filters on the same field must both be true, so the following returns no data:

[{"fieldName":"customer","values":["Costco"],"operator":"="},
 {"fieldName":"customer","values":["Target"],"operator":"="}]

There is no way to combine filters on different fields with OR.

Filtering by Date Range

There is no range or between operator. To filter a date range, use two filters on the same field: a lower bound and an upper bound.

Date strings such as "2026-07-28" are read as midnight UTC. If your dates are stored at a different time of day, an inclusive upper bound (<=) can leave out the last day. To include the full last day, use < with the day after:

[{"fieldName":"Sent Date","values":["2026-07-25"],"operator":">="},
 {"fieldName":"Sent Date","values":["2026-07-29"],"operator":"<"}]

This returns July 25 through July 28. You can also pass exact timestamps as epoch milliseconds, for example [1784966400000].

The = operator is the exception: "values":["2026-07-27"] with = matches the whole day, regardless of time.

The same two-filter pattern works for number ranges.

Troubleshooting

  • The dashboard is empty. A value that does not exist in the data returns no rows, with no error. Check that the value matches the data exactly, including capitalization when using =, in or !=.
  • Numbers are not filtering correctly. Make sure numeric values are unquoted: [90000], not ["90000"].
  • A date range is missing the last day. Use < with the following day as the upper bound. See Filtering by Date Range.
  • The link value is not applied to a dashboard filter. If a dashboard filter has a fixed default value, it can conflict with the value passed in the link. Set the dashboard filter to Require Value and leave the default value blank.