DISTINCT DAX Function (Table manipulation)

Returns a one column table that contains the distinct (unique) values in a column, for a column argument. Or multiple columns with distinct (unique) combination of values, for a table expression argument.

Syntax

DISTINCT ( <ColumnNameOrTableExpr> )
Parameter Attributes Description
ColumnNameOrTableExpr

The column (or table expression) from which unique values (or combination of values) are to be returned.

Return values

Table An entire table or a table with one or more columns.

A column of unique values if the parameter is a single column. If the parameter is a table expression, the result has the same columns and remove only duplicated rows.

Remarks

If the parameter is a single column, the result of DISTINCT is affected by the current filter context. In this case it is important to understand the differences with VALUES, which might add an additional blank row in case of invalid relationships.
If the parameter is a table expression, DISTINCT returns a table by removing duplicate rows provided by the table expression.

» 5 related articles
» 2 related functions

Examples

--  DISTINCT retrieves the distinct values of a column
--  VALUES does the same.
--  They differ in the way they handle the blank row generated
--  for invalid relationships, if present
--  DISTINCT does not return the blank row caused by an invalid relationship 
--  VALUES includes the blank row caused by an invalid relationship, if present
EVALUATE
SUMMARIZECOLUMNS (
    Store[Continent],
    "#Stores (no blank row)", COUNTROWS ( DISTINCT ( Store[Store Name] ) ),
    "#Stores (blank row)",    COUNTROWS ( VALUES ( Store[Store Name] ) )
)
Continent #Stores (no blank row) #Stores (blank row)
North America 209 209
Europe 54 54
Asia 41 41
(Blank) (Blank) 1
--  DISTINCT and VALUES can also be used with a table.
--  DISTINCT returns the distinct rows in the table.
--  VALUES returns the table, with the blank row caused 
--  by an invalid relationship if it exists,
--  but without performing a distinct.
--  Worth remembering that a table reference does not return
--  the blank row caused by an invalid relationship if you 
--  just use the table name.
EVALUATE
SUMMARIZECOLUMNS (
    Store[Continent],
    "#Stores",                COUNTROWS ( Store ),
    "#Stores (no blank row)", COUNTROWS ( DISTINCT ( Store ) ),
    "#Stores (blank row)",    COUNTROWS ( VALUES ( Store ) )
)

Continent #Stores #Stores (no blank row) #Stores (blank row)
North America 209 209 209
Europe 54 54 54
Asia 41 41 41
(Blank) (Blank) (Blank) 1
--  DISTINCT can be used with variables.
--  VALUES requires a table or a column that exists in the model.
EVALUATE
VAR Stores = 
    SELECTCOLUMNS ( Store, "Continent", Store[Continent] )
RETURN
    {
        ( "#Stores (all rows)",     COUNTROWS (          ( Stores ) ) ),
        ( "#Stores (no blank row)", COUNTROWS ( DISTINCT ( Stores ) ) )
        --
        --  The following would produce an error: VALUES cannot be used with variables
        --
        -- ( "#Stores (blank row)",    COUNTROWS ( VALUES ( Stores ) ) )
    }
Value1 Value2
#Stores (all rows) 304
#Stores (no blank row) 3

Related articles

Learn more about DISTINCT in the following articles:

Related functions

Other related functions are:

Last update: Mar 13, 2024   » Contribute   » Show contributors

Contributors: Alberto Ferrari, Marco Russo, Kenneth Barber

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

2018-2024 © SQLBI. All rights are reserved. Information coming from Microsoft documentation is property of Microsoft Corp. » Contact us   » Privacy Policy & Cookies

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.

Iterator

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 DISTINCT? Did you find any issue?
Please, report it us! All submissions will be evaluated for possible updates of the content.


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.