Udostępnij za pośrednictwem


percentiles_linear_fl()

Funkcja percentiles_linear_fl() jest funkcją zdefiniowaną przez użytkownika (UDF), która oblicza percentyle przy użyciu interpolacji liniowej między najbliższymi rangami, tą samą metodą używaną przez PERCENTILES programu Excel. INC , funkcja. Natywne funkcje percentyla kusto używają metody najbliższej rangi. W przypadku dużych zestawów wartości różnica między obiema metodami jest nieznaczna i zalecamy użycie funkcji natywnej w celu uzyskania najlepszej wydajności. Aby uzyskać więcej informacji na temat tych i dodatkowych metod obliczania percentyla, zapoznaj się z artykułem percentylowym w Wikipedii. Funkcja akceptuje tabelę zawierającą kolumnę do obliczenia i opcjonalny klucz grupowania oraz tablicę dynamiczną wymaganych percentyli i zwraca kolumnę zawierającą dynamiczną tablicę wartości percentyla dla każdej grupy.

Składnia

T | invoke percentiles_linear_fl(, val_colpct_arr [,aggr_col ])

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
val_col string ✔️ Nazwa kolumny zawierającej wartości, za pomocą których mają być obliczane percentyle.
pct_arr dynamic ✔️ Tablica liczbowa zawierająca wymagane percentyle. Każdy percentyl powinien znajdować się w zakresie [0–100].
aggr_col string Nazwa kolumny zawierającej klucz grupowania.

Definicja funkcji

Funkcję można zdefiniować, osadzając jej kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:

Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.

Ważne

Instrukcja let nie może być uruchamiana samodzielnie. Po nim musi znajdować się instrukcja wyrażenia tabelarycznego. Aby uruchomić działający przykład percentiles_linear_fl()polecenia , zobacz Przykład.

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.

Przykład

W poniższym przykładzie użyto operatora invoke do uruchomienia funkcji.

Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po definicji funkcji osadzonej.

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

Dane wyjściowe

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]