Delen via


percentiles_linear_fl()

De functie percentiles_linear_fl() is een door de gebruiker gedefinieerde functie (UDF) die percentielen berekent met behulp van lineaire interpolatie tussen dichtstbijzijnde rangschikkingen, dezelfde methode die wordt gebruikt door percentielen van Excel. INC , functie. Systeemeigen percentielfuncties van Kusto gebruiken de dichtstbijzijnde rangschikkingsmethode. Voor grote sets waarden is het verschil tussen beide methoden onbeduidend en we raden u aan de systeemeigen functie te gebruiken voor de beste prestaties. Voor meer informatie over deze en aanvullende percentielberekeningsmethoden raadpleegt u het percentielartikel op Wikipedia. De functie accepteert een tabel met de kolom waarop moet worden berekend en een optionele groeperingssleutel en een dynamische matrix van de vereiste percentielen, en retourneert een kolom met een dynamische matrix van de waarden van de percentielen per groep.

Syntax

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

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
val_col string ✔️ De naam van de kolom die de waarden bevat waarmee de percentielen moeten worden berekend.
pct_arr dynamic ✔️ Een numerieke matrix met de vereiste percentielen. Elk percentiel moet het bereik [0-100] hebben.
aggr_col string De naam van de kolom die de groepssleutel bevat.

Functiedefinitie

U kunt de functie definiëren door de code in te sluiten als een door een query gedefinieerde functie of door deze als volgt te maken als een opgeslagen functie in uw database:

Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.

Belangrijk

Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een tabellaire expressie-instructie. Zie Voorbeeld als u een werkend voorbeeld van percentiles_linear_fl()wilt uitvoeren.

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.

Voorbeeld

In het volgende voorbeeld wordt de operator aanroepen gebruikt om de functie uit te voeren.

Als u een door een query gedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.

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

Uitvoer

naam 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]