Skip to main content

PQL46 (PQL Function Library - CPM 4.6)

PU_COUNT_DISTINCT

Applies to: CELONIS 4.0 CELONIS 4.2 CELONIS 4.3 CELONIS 4.4 CELONIS 4.5 CELONIS 4.6

Description

Calculates the number of distinct elements in the specified column for each element of the given child table.

PU_COUNT_DISTINCT can be applied on any data type. The data type of the result is always an INT.

If no value in the parent table exists for the element in the child table (either because all values of the parent table are filtered out, or because no corresponding value exists in the first place), 0 will be returned.

Syntax
PU_COUNT_DISTINCT ( child_table, parent_table.column [, filter_expression] )
PU_COUNT_DISTINCT ( DOMAIN_TABLE ( column1,...,columnN ), parent_table.column [, filter_expression] )
Examples

[1] Count the number of distinct values for each company code.

Query

Column1

"companyDetail"."companyCode"

Column2

PU_COUNT_DISTINCT ( "companyDetail" , "caseTable"."value" )

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

companyDetail

companyCode : STRING

country : STRING

'001'

'DE'

'002'

'DE'

'003'

'US'

Foreign Keys

caseTable.companyCode

companyDetail.companyCode

Result

Column1 : STRING

Column2 : INT

'001'

3

'002'

1

'003'

1

[2] PU functions can be used in a FILTER. In this example, the company codes are filtered such that the corresponding distinct number of case table values is smaller than 2.

Query

Filter

FILTER PU_COUNT_DISTINCT ( "companyDetail" , "caseTable"."value" ) < 2;

Column1

"companyDetail"."companyCode"

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

companyDetail

companyCode : STRING

country : STRING

'001'

'DE'

'002'

'DE'

'003'

'US'

Foreign Keys

caseTable.companyCode

companyDetail.companyCode

Result

Column1 : STRING

'002'

'003'

[3] PU functions can be used inside another aggregation function. In this example, the maximum value of all distinct number of case table values for each company code is calculated.

Query

Column1

MAX ( PU_COUNT_DISTINCT ( "companyDetail" , "caseTable"."value" ) )

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

companyDetail

companyCode : STRING

country : STRING

'001'

'DE'

'002'

'DE'

'003'

'US'

Foreign Keys

caseTable.companyCode

companyDetail.companyCode

Result

Column1 : INT

3

[4] Count the number of distinct values for each company code. Only consider cases with an ID larger than 2.

Query

Column1

"companyDetail"."companyCode"

Column2

PU_COUNT_DISTINCT ( "companyDetail" , "caseTable"."value" , "caseTable"."caseID" > 2 )

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

companyDetail

companyCode : STRING

country : STRING

'001'

'DE'

'002'

'DE'

'003'

'US'

Foreign Keys

caseTable.companyCode

companyDetail.companyCode

Result

Column1 : STRING

Column2 : INT

'001'

1

'002'

1

'003'

1

[5] Count the number of distinct values for each company code. Only consider cases with an ID larger than 3. All case table values for companyCode '001' are filtered out, which means that in this case, 0 is returned.

Query

Column1

"companyDetail"."companyCode"

Column2

PU_COUNT_DISTINCT ( "companyDetail" , "caseTable"."value" , "caseTable"."caseID" > 3 )

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

companyDetail

companyCode : STRING

country : STRING

'001'

'DE'

'002'

'DE'

'003'

'US'

Foreign Keys

caseTable.companyCode

companyDetail.companyCode

Result

Column1 : STRING

Column2 : INT

'001'

0

'002'

1

'003'

1

[6] For each case ID, calculate the number of distinct case table values for the associated company code using DOMAIN_TABLE.

Query

Column1

"caseTable"."caseId"

Column2

PU_COUNT_DISTINCT(DOMAIN_TABLE("caseTable"."companyCode"), "caseTable"."value")

Input

Output

caseTable

caseId : INT

companyCode : STRING

value : INT

1

'001'

600

2

'001'

400

3

'001'

200

4

'002'

300

5

'002'

300

6

'003'

200

Result

Column1 : INT

Column2 : INT

1

3

2

3

3

3

4

1

5

1

6

1