다음을 통해 공유


percentiles_linear_fl()

이 함수 percentiles_linear_fl()Excel의 PERCENTILES에서 사용하는 것과 동일한 메서드인 가장 가까운 순위 간의 선형 보간을 사용하여 백분위수(UDF)를 계산하는 UDF(사용자 정의 함수) 입니다 . INC 함수입니다. Kusto 네이티브 백분위수 함수는 가장 가까운 순위 메서드를 사용합니다. 큰 값 집합의 경우 두 메서드 간의 차이는 중요하지 않으며 최상의 성능을 위해 네이티브 함수를 사용하는 것이 좋습니다. 이러한 백분위수 계산 방법과 추가 백분위수 계산 방법에 대한 자세한 내용은 Wikipedia백분위수 문서를 참조하세요. 이 함수는 계산할 열과 선택적 그룹화 키가 포함된 테이블과 필요한 백분위수의 동적 배열을 허용하고 각 그룹당 백분위수 값의 동적 배열을 포함하는 열을 반환합니다.

구문

T | invoke percentiles_linear_fl(, val_col pct_arr [, aggr_col ])

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 Type 필수 설명
val_col string ✔️ 백분위수 계산할 값을 포함하는 열의 이름입니다.
pct_arr dynamic ✔️ 필요한 백분위수가 포함된 숫자 배열입니다. 각 백분위수는 [0-100] 범위에 있어야 합니다.
aggr_col string 그룹화 키를 포함하는 열의 이름입니다.

함수 정의

다음과 같이 해당 코드를 쿼리 정의 함수로 포함하거나 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.

다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.

Important

let 문자체적으로 실행할 수 없습니다. 그 뒤에 테이블 형식 식 문이 있어야 합니다. 작업 예제 percentiles_linear_fl()를 실행하려면 예제를 참조 하세요.

let percentiles_linear_fl=(tbl:(*), val_col:string, pct_arr:dynamic, aggr_col:string='')
{
    tbl
    | extend _vals = column_ifexists(val_col, 0.0)
    | extend _key = column_ifexists(aggr_col, 'ALL')
    | order by _key asc, _vals asc 
    | summarize _vals=make_list(_vals) by _key
    | extend n = array_length(_vals)
    | extend pct=pct_arr
    | mv-apply pct to typeof(real) on (
          extend index=pct/100.0*(n-1)
        | extend low_index=tolong(floor(index, 1)), high_index=tolong(ceiling(index))
        | extend interval=todouble(_vals[high_index])-todouble(_vals[low_index])
        | extend pct_val=todouble(_vals[low_index])+(index-low_index)*interval
        | summarize pct_arr=make_list(pct), pct_val=make_list(pct_val))
    | project-away n
};
// Write your query to use the function here.

예시

다음 예제에서는 호출 연산자를 사용하여 함수를 실행합니다.

쿼리 정의 함수를 사용하려면 포함된 함수 정의 후에 호출합니다.

let percentiles_linear_fl=(tbl:(*), val_col:string, pct_arr:dynamic, aggr_col:string='')
{
    tbl
    | extend _vals = column_ifexists(val_col, 0.0)
    | extend _key = column_ifexists(aggr_col, 'ALL')
    | order by _key asc, _vals asc 
    | summarize _vals=make_list(_vals) by _key
    | extend n = array_length(_vals)
    | extend pct=pct_arr
    | mv-apply pct to typeof(real) on (
          extend index=pct/100.0*(n-1)
        | extend low_index=tolong(floor(index, 1)), high_index=tolong(ceiling(index))
        | extend interval=todouble(_vals[high_index])-todouble(_vals[low_index])
        | extend pct_val=todouble(_vals[low_index])+(index-low_index)*interval
        | summarize pct_arr=make_list(pct), pct_val=make_list(pct_val))
    | project-away n
};
datatable(x:long, name:string) [
5, 'A',
9, 'A',
7, 'A',
5, 'B',
7, 'B',
7, 'B',
10, 'B',
]
| invoke percentiles_linear_fl('x', dynamic([0, 25, 50, 75, 100]), 'name')
| project-rename name=_key, x=_vals

출력

name x pct_arr pct_val
A [5,7,9] [0,25,50,75,100] [5,6,7,8,9]
B [5,7,7,10] [0,25,50,75,100] [5,6.5,7,7.75,10]