percentiles_linear_fl()
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer
이 함수 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] |