Generates the count of distinct non-null values for rows in each group that meet a specific condition.

NOTE: When added to a transform, this function is applied to the current sample. If you change your sample or run the job, the computed values for this function are updated. Transforms that change the number of rows in subsequent recipe steps do not affect the values computed for this step.

To perform a simple counting of distinct non-nulls without conditionals, use the COUNTDISTINCT function. See COUNTDISTINCT Function.

Basic Usage

aggregate value: COUNTDISTINCTIF(entries, entryValidation == 'Ok') group:City

Output: Generates a two-column table containing the unique values for City and the count of distinct non-null values in the entries column for that City value when the entryValidation value is 'Ok'.


aggregate value:COUNTDISTINCTIF(col_ref, test_expression) [group:group_col_ref]

ArgumentRequired?Data TypeDescription
col_refYstringReference to the column you wish to evaluate.
test_expressionYstringExpression that is evaluated. Must resolve to true or false

For more information on syntax standards, see Language Documentation Syntax Notes.

For more information on the group parameter, see Aggregate Transform.


Name of the column whose values you wish to use in the calculation. Column must be a numeric (Integer or Decimal) type.

Usage Notes:

Required?Data TypeExample Value
YesString that corresponds to the name of the columnmyValues


This parameter contains the expression to evaluate. This expression must resolve to a Boolean (true or false) value.

Usage Notes:

Required?Data TypeExample Value
YesString expression that evaluates to true or false(LastName == 'Mouse' && FirstName == 'Mickey')


Example - Summarize Voter Registrations

This example illustrates how you can use the following conditional calculation functions to analyze polling data:

  • SUMIF - Sum of a set of values by group that meet a specified condition. See SUMIF Function.
  • COUNTDISTINCTIF - Sum of a set of values by group that meet a specified condition. See COUNTDISTINCTIF Function.


Here is some example polling data across 16 precincts in 8 cities across 4 counties, where registrations have been invalidated at the polling station, preventing voters from voting. Precincts where this issue has occurred previously have been added to a watch list (precinctWatchList).

8740 321
9830 421
62229 532
6930 632
78713 953
3420 1053
58259 1374
2440 1474


First, you want to sum up the invalid registrations (invalidReg) by city:

derive value:SUMIF(invalidReg, precinctWatchList == "y") group:cityId as:'invalidRegbyCityId'

The invalidRegbyCityId column contains invalid registrations across the entire city. Now, at the county level, you want to identify the number of precincts that were on the watch list and were part of a city-wide registration problem. This step uses an aggregation:

aggregate value:COUNTDISTINCTIF(precinctId, invalidRegbyCityId > 60) group:countyId



The voting officials in counties 2 and 3 should investigate their precinct registration issues.

Was this page helpful? Let us know how we did:

Send feedback about...

Google Cloud Dataprep Documentation