DISTINCTCOUNT()
Learn how DISTINCTCOUNT counts unique values in a column, how it treats blanks, and when to use DISTINCTCOUNTNOBLANK instead.
DISTINCTCOUNT()
DISTINCTCOUNT() counts the number of distinct values in a column, evaluated within the current filter context.
DISTINCTCOUNT(Column)Basic Example
Unique Customers =
DISTINCTCOUNT(FactSales[CustomerKey])FactSales[CustomerKey]
101
102
101
103
102
DISTINCTCOUNT -> 3 (101, 102, 103 — each counted once)This is the standard way to answer "how many unique X" — unique customers, unique products sold, unique visits — from a fact table where the same key can legitimately repeat across many rows.
How DISTINCTCOUNT Handles Blanks
DISTINCTCOUNT() counts a blank value as one distinct value, if the column contains any blanks at all.
FactSales[PromoCode]
"SAVE10"
"SAVE10"
(blank)
"WELCOME"
DISTINCTCOUNT -> 3 ("SAVE10", blank, "WELCOME")If the intent is "how many distinct promo codes were actually used," including blank as a countable value overstates it by one. DISTINCTCOUNTNOBLANK() excludes the blank:
Promo Codes Used =
DISTINCTCOUNTNOBLANK(FactSales[PromoCode])DISTINCTCOUNTNOBLANK -> 2 ("SAVE10", "WELCOME")DISTINCTCOUNT Is Filter-Context Aware
Like any DAX aggregation, DISTINCTCOUNT() only counts distinct values among the rows visible in the current filter context — not the whole table unconditionally.
Unique Customers =
DISTINCTCOUNT(FactSales[CustomerKey])No filters applied -> counts distinct customers across all sales
Category = "Bikes" filter -> counts distinct customers who bought Bikes specificallyTo get an unfiltered total for comparison (a "percent of all customers" style measure), wrap it in CALCULATE() with ALL():
Unique Customers (All Categories) =
CALCULATE(
DISTINCTCOUNT(FactSales[CustomerKey]),
ALL(DimProduct)
)See the DAX CALCULATE Modifiers Cheat Sheet for this pattern applied more generally.
Common Mistakes
Not Accounting for Blank Inflating the Count by One
A DISTINCTCOUNT() that's consistently one higher than expected is often the blank-counts-as-a-value behavior, not a data quality bug — check whether DISTINCTCOUNTNOBLANK() is actually the intended function.
Using DISTINCTCOUNT for a Multi-Column Distinct Count
DISTINCTCOUNT() only accepts a single column. Counting distinct combinations of two or more columns needs COUNTROWS() over a SUMMARIZE()'d table instead — see COUNTROWS.
Running It Against a High-Cardinality Column on a Huge Table
DISTINCTCOUNT() on a column with millions of unique values (a raw transaction ID, for example) is one of the more expensive DAX aggregations — worth checking whether a lower-cardinality key would answer the same business question.
Best Practices
- Use
DISTINCTCOUNTNOBLANK()when a blank value shouldn't count as a real, distinct answer. - Reach for
COUNTROWS()+SUMMARIZE()for a distinct count across more than one column. - Be mindful of running
DISTINCTCOUNT()against very high-cardinality columns on large fact tables — it's not free.