# RANKX

Returns the ranking of a number in a list of numbers for each row in the *table* argument.

## Syntax

```
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
```

### Parameters

**table**

Any DAX expression that returns a table of data over which the expression is evaluated.

**expression**

Any DAX expression that returns a single scalar value. The expression is evaluated for each row of *table*, to generate all possible values for ranking. See the remarks section to understand the function behavior when *expression* evaluates to BLANK.

**value**

(Optional) Any DAX expression that returns a single scalar value whose rank is to be found. See the remarks section to understand the function's behavior when *value* is not found in the expression.

When the *value* parameter is omitted, the value of expression at the current row is used instead.

**order**

(Optional) A value that specifies how to rank *value*, low to high or high to low:

value | alternate value | Description |
---|---|---|

0 (zero) | FALSE | Ranks in descending order of values of expression. If value is equal to the highest number in expression then RANKX returns 1. This is the default value when order parameter is omitted. |

1 | TRUE | Ranks in ascending order of expression. If value is equal to the lowest number in expression then RANKX returns 1. |

**ties**

(Optional) An enumeration that defines how to determine ranking when there are ties.

enumeration | Description |
---|---|

Skip | The next rank value, after a tie, is the rank value of the tie plus the count of tied values. For example if five (5) values are tied with a rank of 11 then the next value will receive a rank of 16 (11 + 5). This is the default value when ties parameter is omitted. |

Dense | The next rank value, after a tie, is the next rank value. For example if five (5) values are tied with a rank of 11 then the next value will receive a rank of 12. |

## Return value

The rank number of *value* among all possible values of *expression* evaluated for all rows of *table* numbers.

## Remarks

If

*expression*or*value*evaluates to BLANK it is treated as a 0 (zero) for all expressions that result in a number, or as an empty text for all text expressions.If

*value*is not among all possible values of*expression*then RANKX temporarily adds*value*to the values from*expression*and re-evaluates RANKX to determine the proper rank of*value*.Optional arguments might be skipped by placing an empty comma (,) in the argument list, i.e. RANKX(Inventory, [InventoryCost],,,"Dense")

Equality related comparisons (=, < >, >= and <=) between values with the

*Decimal Number*data type can potentialy return unexpected results when using RANKX function. Incorrect results can occur because values with*Decimal Number*data type are stored as IEEE Standard 754 floating point numbers and have inherent limitations in their precision. To avoid unexpected results, change the data type to*Fixed Decimal Number*or do a forced rounding using ROUND.This function is not supported for use in DirectQuery mode when used in calculated columns or row-level security (RLS) rules.

## Example

The following calculated column in the Products table calculates the sales ranking for each product in the Internet channel.

```
= RANKX(ALL(Products), SUMX(RELATEDTABLE(InternetSales), [SalesAmount]))
```