Skip to main content

PQL47 (PQL Function Library - CPM 4.7)

PU_COUNT

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

Description

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

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

Syntax
PU_COUNT ( child_table, parent_table.column [, filter_expression] )
  • child_table: The table to which the aggregation result should be pulled. This can be:

  • parent_table.column: The column which should be aggregated for every row of the child_table.

  • filter_expression (optional): An optional filter expression to specify which values of the parent_table.column should be taken into account for the aggregation.

NULL handling

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. NULL values in the parent table column are treated as if the row does not exist.

Examples

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

Query

Column1

"companyDetail"."companyCode"

Column2

PU_COUNT ( "companyDetail" , "caseTable"."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

Column2 : INT

'001'

3

'002'

2

'003'

1

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

Query

Filter

FILTER PU_COUNT ( "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

'003'

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

Query

Column1

MAX ( PU_COUNT ( "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 cases which have a value larger than 300 for each company code. All case table values for company codes '002' and '003' are filtered out, which means that in these cases, 0 is returned.

Query

Column1

"companyDetail"."companyCode"

Column2

PU_COUNT ( "companyDetail" , "caseTable"."companyCode" , "caseTable"."value" > 300 )

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'

2

'002'

0

'003'

0

[5] Example over three tables: For each entry in table B, count the number of values that are less than 300 in table C. Tables B and C do not have a direct connection, but are connected via table A.

Query

Column1

"B"."B_KEY"

Column2

PU_COUNT ( "B" , "C"."VALUE" , "C"."VALUE" < 300 )

Input

Output

A

B_KEY : INT

C_KEY : STRING

VALUE : INT

1

'A'

100

1

'B'

200

2

'C'

300

2

'D'

400

3

'E'

500

3

'F'

600

B

B_KEY : INT

1

2

C

C_KEY : STRING

VALUE : INT

'A'

400

'A'

100

'A'

200

'B'

100

'C'

200

'D'

500

Foreign Keys

C.C_KEY

A.C_KEY

B.B_KEY

A.B_KEY

Result

Column1 : INT

Column2 : INT

1

3

2

1

See also: