WHERE TOP|BOTTOM IN is a ranking filter. It limits the inputs into a metric’s computations to those values that are the top or bottom n rankings according to the ranking criteria that you specify. This filter supports the percent parameters n%.

When you are using filters with a percentage (such as TOP(20%)), the number of the selected items is always rounded up.

For example, you want to select 20% of 21 items, and each item has a distinct value of the metric that it is ranked by. The result is going to be 5, because 20% of 21 is 4.2, and it gets rounded up to 5.


SELECT metric1 WHERE TOP(n) IN (SELECT metric2 BY attribute1, attribute2...) WITHIN (...)

Here, metric1 represents the metric the value of which is actually returned. The value returned depends on which values are included in its computations. These inputs are determined by the filtering criteria statement that follows the IN keyword in parentheses.

The attributes that follow BY are those that will be ranked according to their metric2 values. Whichever attribute values are associated with metric2 values that fall in the TOP(n) or BOTTOM(n) are then included in metric1 computations - determining the final output.

The syntax for this type of rank filtering requires the SELECT keyword before the metric following the IN keyword.


SELECT {metric/no_of_tickets} WHERE TOP(5) IN (SELECT {metric/no_of_tickets} 2 BY {attribute/assignee}) WITHIN ({attribute/ticket_group}, all other)

This example returns TOP(#) assignees by EACH group. 

SELECT {metric/Amount} WHERE TOP(5) IN (SELECT {metric/avg_won} BY {attribute/product})

MAQL also supports using the OF keyword following the TOP|BOTTOM ranking filter. This changes the way the metric is interpreted by the query engine. With OF you can carry out rankings by more than one metric. Likewise, the ranking metric is interpreted as a submetric, rather than a subreport (as is the case for TOP|BOTTOM in conjunction with the IN keyword).

See also TOP or BOTTOM(n) OF.