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

Description

Calculates the quantile of the specified column for each element of the given child 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 a float number between 0 (same as PU_MIN) and 1.0 (same as PU_MAX).

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

Syntax

PU_QUANTILE ( child_table, parent_table.column, quantile [, filter_expression] )
PU_QUANTILE ( DOMAIN_TABLE ( column1,...,columnN ), parent_table.column, quantile [, filter_expression])

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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
companyDetail
companyCode : STRINGcountry : STRING
'001''DE'
'002''DE'
'003''US'

Foreign Keys
caseTable.companyCodecompanyDetail.companyCode
Output
Result
Column1 : STRINGColumn2 : 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
A
B_KEY : INTC_KEY : STRINGVALUE : 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 : STRINGVALUE : INT
'A'
400
'A'
100
'A'
200
'B'
100
'C'
200
'D'
500

Foreign Keys
C.C_KEYA.C_KEY
B.B_KEYA.B_KEY
Output
Result
Column1 : INTColumn2 : INT
1
400
2
500



[10] For each case ID, calculate the 0.5 quantile of the case table values for the associated company code using DOMAIN_TABLE. This produces the same result as PU_MEDIAN since QUANTILE(0.5) == MEDIAN():

Query
Column1
"caseTable"."caseId"
Column2
PU_QUANTILE(DOMAIN_TABLE("caseTable"."companyCode"), "caseTable"."value", 0.5)
Input
caseTable
caseId : INTcompanyCode : STRINGvalue : INT
1
'001'
600
2
'001'
400
3
'001'
200
4
'002'
300
5
'002'
300
6
'003'
200
Output
Result
Column1 : INTColumn2 : INT
1
400
2
400
3
400
4
300
5
300
6
200


  • No labels