List.Min returns the smallest item in a list, or an optional default value if the list is empty. Available in Excel (Power Query), Power BI Desktop, and Power BI Service.
If you want the lowest value in a list or a column, whether that’s the smallest number, the earliest date, or the first text value alphabetically, this is the function to use. In this article, I’ll show you how it works with six examples.
Syntax of List.Min Function
List.Min(list as list, optional default as any, optional comparisonCriteria as any, optional includeNulls as nullable logical) as any
where
list(required, list). The list of values to scan for the smallest item.default(optional, any). The value to return whenlistis empty. When omitted, an empty list returnsnull.comparisonCriteria(optional, any). Controls how the items are compared, for exampleComparer.OrdinalIgnoreCasefor case-insensitive text. When omitted ornull, the default comparer is used.includeNulls(optional, nullable logical). Whethernullitems in the list count as values. When omitted, nulls are ignored.
Returns: the smallest item in the list (type any). If the list is empty, it returns default when one is provided, otherwise null.
In plain terms, you hand it a list and it hands back the lowest value, whatever type that value happens to be.
Example 1: Find the smallest number in a list
The simplest case is a list of numbers written right into the formula.
List.Min({74,28,95,41,66})
Result: 28
The function scans the five numbers and returns the smallest one.
Example 2: Get the first text value alphabetically
List.Min works on text too. The “minimum” of a text list is the value that sorts first alphabetically.
List.Min({"Oslo","Lisbon","Geneva","Zagreb"})
Result: Geneva
Geneva starts with the earliest letter of the four city names, so it wins.
Example 3: Find the earliest date
Dates compare chronologically, so List.Min gives you the earliest date in a list.
List.Min({#date(2026,3,18),#date(2025,11,4),#date(2026,1,22)})
<!– UNVERIFIED: shown as the clean call; machine-validated via a Date.ToText wrapper in the spec (proven value 2025-11-04) –>
Result: #date(2025,11,4)
November 4, 2025 comes before the two 2026 dates, so it is the minimum.
Example 4: Handle an empty list
An empty list does not throw an error. Without a default, you silently get null.
List.Min({})
<!– UNVERIFIED: shown as the clean call; machine-validated via an if-null wrapper in the spec –>
Result: null
That null can ripple through later steps unnoticed. Pass a default value as the second argument to get something safer back.
List.Min({},0)
Result: 0
Now an empty list returns 0 instead of null.
Example 5: Find the lowest quote in a table column
The most common real-world use is getting the minimum of a table column. A column reference like Source[Quote] is a list, so you can feed it straight to List.Min.
Say you have a Quotes query with bids from four contractors.
Here is the starting data:
| Contractor | Quote |
|---|---|
| Hadley Builders | 18450 |
| Kemp & Sons | 17200 |
| Orson Renovations | 19800 |
| Brightwell Contracting | 16950 |
Now pull the Quote column as a list and take its minimum:
let
Source = Excel.CurrentWorkbook(){[Name="Quotes"]}[Content],
LowestQuote = List.Min(Source[Quote])
in
LowestQuote
Result: 16950
That is the Brightwell Contracting bid, the cheapest of the four quotes. The same pattern flipped gives you the maximum value in a column.
Example 6: Compare text without case sensitivity
The default text comparison treats uppercase and lowercase differently. Watch what happens with mixed casing.
List.Min({"apple","Banana","cherry"})
Result: Banana
Banana wins even though apple comes first alphabetically. To fix that, pass Comparer.OrdinalIgnoreCase as the third argument (comparisonCriteria), with null filling the default slot.
List.Min({"apple","Banana","cherry"},null,Comparer.OrdinalIgnoreCase)
Result: apple
With case ignored, apple comes out first, as it should.
Things to keep in mind with List.Min
- Setting
includeNullstotruereturnsnullif the list has any nulls. Anullcounts as the smallest possible value, so it always wins. Leave the argument out to get the smallest real value. - Capitals sort before lowercase because the comparison is ordinal. The default comparer works on Unicode code points, and every uppercase letter has a lower code point than every lowercase one. That is why Example 6 needed the comparer fix.
- Mixed-type lists do not error. M ranks types against each other (numbers sort below text), so
List.Minquietly picks a winner across types. A mixed-type minimum usually points to a column type problem upstream. - Passing a single value instead of a list throws an error.
Expression.Error: We cannot convert the value 74 to type List.Wrap the value in braces,{74}, to make it a one-item list.
Performance and query folding
Pulling a column into a list with Source[Quote] breaks query folding, so on a database source the whole column is downloaded before List.Min runs. If you are aggregating a foldable source, use Table.Group with a min aggregation instead, which translates to a native MIN. On Excel and CSV sources everything runs locally anyway, and List.Min handles thousands of values without trouble.
Common questions about List.Min
How do I get the lowest value across several columns for each row?
Add a custom column that builds a list from the row’s fields: Table.AddColumn(Source,"Lowest",each List.Min({[Q1],[Q2],[Q3]})). Each row gets the smallest of its own values.
What is the difference between List.Min and List.MinN?
List.Min returns the single smallest item. List.MinN returns the N smallest items as a list, so List.MinN(myList,3) gives you the bottom three.
What is the difference between List.Min and Table.Min?
List.Min takes a list and returns just the value. Table.Min takes a table and returns the whole row that holds the smallest value in the column you name.
List of All Power Query Functions
Related Power Query Functions / Articles: