# RANKXDAX Function (Statistical)

Returns the rank of an expression evaluated in the current context in the list of values for the expression evaluated for each row in the specified table.

## Syntax

RANKX ( <Table>, <Expression> [, <Value>] [, <Order>] [, <Ties>] )
Parameter Attributes Description
Table

A table expression.

Expression

An expression that will be evaluated for row of the table.

Value Optional

An expression that will be evaluated in the current context. If omitted, the Expression argument will be used.

Order Optional

The order to be applied. 0/FALSE/DESC – descending; 1/TRUE/ASC – ascending.

Ties Optional

Function behavior in the event of ties. Skip – ranks that correspond to elements in ties will be skipped; Dense – all elements in a tie are counted as one.

## Return values

Scalar A single integer value.

The rank number of Value among all possible values of Expression evaluated for all rows of Table numbers.

## Remarks

The default value for the Order argument is DESC.
The default value for the Ties argument is SKIP.
The Expression argument is evaluated in a row context: while a measure reference implies a context transition, an explicit CALCULATE might be necessary using aggregation functions such as SUM.

When one or both the Expression or the Value arguments have a Decimal data type (which is Decimal Number in Power BI), RANKX may return unexpected results because of different approximation in storing the underlying floating point number. To avoid unexpected results, change the data type to Currency data type (which is Fixed Decimal Number in Power BI) or force rounding by using ROUND.

» 7 related articles
» 1 related function

## Examples

```--  RANKX computes the ranking of an expression over a table
--  The expression is evaluated during the iteration over the
--  table and then in the evaluation context of RANKX.
--  The result is the position of the outer evaluation in the
--  lookup table built during the iteration
DEFINE
VAR BrandsAndSales =
VALUES ( 'Product'[Brand] ),
"@Amt", [Sales Amount]
)
EVALUATE
BrandsAndSales,
"Rank",
RANKX (
BrandsAndSales,
[@Amt]
)
)
ORDER BY [@Amt] DESC
```
Brand @Amt Rank
Contoso 7,352,399.03 1
Fabrikam 5,554,015.73 2
Litware 3,255,704.03 4
Proseware 2,546,144.16 5
A. Datum 2,096,184.64 6
Wide World Importers 1,901,956.66 7
Southridge Video 1,384,413.85 8
The Phone Company 1,123,819.07 9
Tailspin Toys 325,042.42 11
```--  The third argument of RANKX is useful when the outer
--  evaluation requires a different expression than the
--  inner one. For example, when ranking an expression over
--  a pre-built lookup table
DEFINE
VAR SalesLevels =
SELECTCOLUMNS ( { 6000000, 3000000, 1500000, 750000, 0 }, "@Limit", [Value] )

EVALUATE
VALUES ( Product[Brand] ),
"Sales Amount", [Sales Amount],
"Level", RANKX ( SalesLevels, [@Limit], [Sales Amount] )
)
ORDER BY [Level] ASC
```
Brand Sales Amount Level
Contoso 7,352,399.03 1
Litware 3,255,704.03 2
Fabrikam 5,554,015.73 2
Wide World Importers 1,901,956.66 3
Proseware 2,546,144.16 3
A. Datum 2,096,184.64 3
Southridge Video 1,384,413.85 4
The Phone Company 1,123,819.07 4
Tailspin Toys 325,042.42 5
```--  The fourth argument of RANKX specifies the order of ranking
--  it can be DESC (default) or ASC
DEFINE
VAR BrandsAndSales =
ADDCOLUMNS ( VALUES ( 'Product'[Brand] ), "@Amt", [Sales Amount] )
EVALUATE
BrandsAndSales,
"Rank ASC",  RANKX ( BrandsAndSales, [@Amt], [@Amt], ASC ),
"Rank DESC", RANKX ( BrandsAndSales, [@Amt], [@Amt], DESC ),
"Rank (default)", RANKX ( BrandsAndSales, [@Amt], [@Amt] )
)
ORDER BY [@Amt] DESC
```
Brand @Amt Rank ASC Rank DESC Rank (default)
Contoso 7,352,399.03 11 1 1
Fabrikam 5,554,015.73 10 2 2
Adventure Works 4,011,112.28 9 3 3
Litware 3,255,704.03 8 4 4
Proseware 2,546,144.16 7 5 5
A. Datum 2,096,184.64 6 6 6
Wide World Importers 1,901,956.66 5 7 7
Southridge Video 1,384,413.85 4 8 8
The Phone Company 1,123,819.07 3 9 9
Northwind Traders 1,040,552.13 2 10 10
Tailspin Toys 325,042.42 1 11 11
```--  The fifth argument of RANKX specifies the behavior in
--  case of ties. SKIP (default) skips positions, whereas
--  DENSE guarantees a 1-step increment in the ranking
DEFINE
VAR BrandsAndSales =
VALUES ( 'Product'[Brand] ),
"@Amt", MROUND ( [Sales Amount], 1E6 )
)
EVALUATE
BrandsAndSales,
"Rank SKIP",  RANKX ( BrandsAndSales, [@Amt], [@Amt], DESC, SKIP ),
"Rank DENSE", RANKX ( BrandsAndSales, [@Amt], [@Amt], DESC, DENSE )
)
ORDER BY [@Amt] DESC
```
Brand @Amt Rank SKIP Rank DENSE
Contoso 7,000,000 1 1
Fabrikam 6,000,000 2 2
Litware 3,000,000 4 4
Proseware 3,000,000 4 4
Wide World Importers 2,000,000 6 5
A. Datum 2,000,000 6 5
The Phone Company 1,000,000 8 6
Southridge Video 1,000,000 8 6
Tailspin Toys 0 11 7

## Related functions

Other related functions are:

Last update: Sep 11, 2024     » Show contributors

Contributors: Alberto Ferrari, Marco Russo, VinÃ­cius Nader

Microsoft documentation: https://docs.microsoft.com/en-us/dax/rankx-function-dax

# Context Transition

This function performs a Context Transition if called in a Row Context. Click to read more.

# Row Context

This expression is executed in a Row Context. Click to read more.

# Not recommended

The use of this function is not recommended. See Remarks and Related functions for alternatives.

# Not recommended

The use of this parameter is not recommended.

# Deprecated

This function is deprecated. Jump to the Alternatives section to see the function to use.

# Volatile

A volatile function may return a different result every time you call it, even if you provide the same arguments. Click to read more.

# Deprecated

This parameter is deprecated and its use is not recommended.

# DirectQuery compatibility

Limitations are placed on DAX expressions allowed in measures and calculated columns.
The state below shows the DirectQuery compatibility of the DAX function.

### Contribute

Want to improve the content of RANKX? Did you find any issue?
Please, report it us! All submissions will be evaluated for possible updates of the content.