# FirstSortedValue - chart function

FirstSortedValue() returns the value from the expression specified in value that corresponds to the result of sorting the sort\_weight argument, for example, the name of the product with the lowest unit price. The nth value in the sort order, can be specified in rank. If more than one resulting value shares the same sort\_weight for the specified rank, the function returns NULL.

Syntax:

FirstSortedValue([{SetExpression}] [DISTINCT] [TOTAL [&lt;fld {,fld}&gt;]] value, sort\_weight [,rank])

Return data type: dual

Arguments:

Arguments

| Argument | Description |
| --- | --- |
| value | Output field. The function finds the value of the expression value that corresponds to the result of sorting sort\_weight. |
| sort\_weight | Input field. The expression containing the data to be sorted. The first (lowest) value of sort\_weight is found, from which the corresponding value of the value expression is determined. If you place a minus sign in front of sort\_weight, the function returns the last (highest) sorted value instead. |
| rank | By stating<br>a rank "n" larger than 1, you get the nth sorted value. |
| SetExpression | By default, the aggregation function<br>will aggregate over the set of possible records defined by the selection.<br>An alternative set of records can be defined by a set analysis<br>expression. |
| DISTINCT | If the word<br>DISTINCT occurs before the function<br>arguments, duplicates resulting from the evaluation of the function arguments are disregarded. |
| TOTAL | If the word<br>TOTAL occurs before the function<br>arguments, the calculation is made over all possible values given<br>the current selections, and not just those that pertain to the current dimensional value, that is, it disregards the chart dimensions.<br><br>By using TOTAL [&lt;fld {.fld}&gt;], where the TOTAL qualifier is followed by a list of one or more field names as a subset of the chart dimension variables, you create a subset of the total possible values.<br><br>[Defining the aggregation scope](https://help.qlik.com/en-US/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

Examples and results:

Data

| Customer | Product | UnitSales | UnitPrice |
| --- | --- | --- | --- |
| Astrida | AA | 4 | 16 |
| Astrida | AA | 10 | 15 |
| Astrida | BB | 9 | 9 |
| Betacab | BB | 5 | 10 |
| Betacab | CC | 2 | 20 |
| Betacab | DD | - | 25 |
| Canutility | AA | 8 | 15 |
| Canutility | CC | - | 19 |

Examples and results

| Example | Result |
| --- | --- |
| `firstsortedvalue (Product, UnitPrice)` | BB, which is the `Product`with the lowest `UnitPrice`(9). |
| `firstsortedvalue (Product, UnitPrice, 2)` | BB, which is the `Product`with the second-lowest `UnitPrice`(10). |
| `firstsortedvalue (Customer, -UnitPrice, 2)` | Betacab, which is the `Customer`with the `Product` that has second-highest `UnitPrice`(20). |
| `firstsortedvalue (Customer, UnitPrice, 3)` | NULL, because there are two values of `Customer` (Astrida and Canutility) with the samerank (third-lowest) `UnitPrice`(15).<br><br>Use the distinct qualifier to make sure unexpected null results do not occur. |
| `firstsortedvalue (Customer, -UnitPrice*UnitSales, 2)` | Canutility, which is the `Customer` with the second-highest sales order value `UnitPrice` multiplied by `UnitSales` (120). |

Data used in examples:

`ProductData:` `LOAD * inline [` `Customer|Product|UnitSales|UnitPrice` `Astrida|AA|4|16` `Astrida|AA|10|15` `Astrida|BB|9|9` `Betacab|BB|5|10` `Betacab|CC|2|20` `Betacab|DD||25` `Canutility|AA|8|15` `Canutility|CC||19` `] (delimiter is '|');`

## Learn more

* [Set analysis](https://help.qlik.com/en-US/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)
* [Defining the aggregation scope](https://help.qlik.com/en-US/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm)