Skip to main content

Celonis Product Documentation

PU_QUANTILE
Description

Calculates the quantile of the specified source column for each element in the given target table.

Like the regular QUANTILE operator, the column can either be an INT, FLOAT or DATE column. The data type of the result is the same as the input column data type. The given quantile has to be an expression that results in a constant float number between 0 (same as PU_MIN) and 1.0 (same as PU_MAX).

Syntax
 PU_QUANTILE ( target_table, source_table.column, quantile [, filter_expression] )
  • target_table: The table to which the aggregation result should be pulled. This can be:

  • source_table.column: The column which should be aggregated for every row of the target_table.

  • quantile: Quantile expression that results in a constant FLOAT value between 0.0 and 1.0 (both inclusive).

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

NULL handling

If no value in the source table column exists for the element in the target table (either because all values of the source table are filtered out, or because no corresponding value exists in the first place), NULL will be returned. NULL values in the source table column are treated as if the row does not exist. The quantile parameter is not allowed to be NULL.

Examples

[1]

Calculate the 0.5 quantile of the case table values for each company code. This produces the same result as PU_MEDIAN since QUANTILE(0.5) == MEDIAN():

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.5 )
        

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'

400

'002'

300

'003'

200

[2]

PU-functions can be used in a FILTER. In this example, the company codes are filtered such that the corresponding 0.5 quantile of the case table values is smaller than 300:

Query

Filter

         FILTER PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.5 ) < 300;
        

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 0.5 quantiles of the case table values for each company code is calculated:

Query

Column1

         MAX ( PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.5 ) )
        

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

400

[4]

Calculate the 0.0 quantile of the case table values for each company code. This produces the same result as PU_MIN since QUANTILE(0.0) == MIN():

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.0 )
        

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'

200

'002'

300

'003'

200

[5]

Calculate the 1.0 quantile of the case table values for each company code. This produces the same result as PU_MAX since QUANTILE(1.0) == MAX():

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 1.0 )
        

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'

600

'002'

300

'003'

200

[6]

Calculate the 0.5 quantile of the case table values for each company code. Only consider cases with an ID larger than 2. This produces the same result as PU_MEDIAN since QUANTILE(0.5) == MEDIAN():

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.5 , "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'

200

'002'

300

'003'

200

[7]

Calculate the 0.5 quantile of the case table 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, NULL is returned. This produces the same result as PU_MEDIAN since QUANTILE(0.5) == MEDIAN():

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.5 , "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'

null

'002'

300

'003'

200

[8]

Calculate the 0.25 quantile of the case table values for each company code:

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 0.25 )
        

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'

200

'002'

300

'003'

200

[9]

Example over three tables: For each entry in table B, calculate the 0.5 quantile of the values that are larger than 100 in table C. This produces the same result as PU_MEDIAN since QUANTILE(0.5) == MEDIAN(): Tables B and C do not have a direct connection, but are connected via table A:

Query

Column1

         "B"."B_KEY"
        

Column2

         PU_QUANTILE ( "B" , "C"."VALUE" , 0.5 , "C"."VALUE" > 100 )
        

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

A.C_KEY

C.C_KEY

B.B_KEY

A.B_KEY

Result

Column1 : int

Column2 : int

1

400

2

500

[10]

Calculate the 0.5 quantile of the case table values using a division as the quantile parameter:

Query

Column1

         "companyDetail"."companyCode"
        

Column2

         PU_QUANTILE ( "companyDetail" , "caseTable"."value" , 50 / 100 )
        

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'

400

'002'

300

'003'

200

See also: