percentiles_linear_fl()
Funkce percentiles_linear_fl()
je uživatelem definovaná funkce (UDF), která vypočítá percentily pomocí lineární interpolace mezi nejbližšími pořadími, stejnou metodou, jakou používá funkce PERCENTILS Excelu . Funkce INC . Nativní percentilové funkce Kusto používají nejbližší metodu pořadí. U velkých sad hodnot je rozdíl mezi oběma metodami nevýznamný a pro zajištění nejlepšího výkonu doporučujeme použít nativní funkci. Další podrobnosti o těchto a dalších metodách výpočtů percentilu najdete v článku o percentilu na Wikipedii.
Funkce přijímá tabulku obsahující sloupec k výpočtu a volitelný klíč seskupení a dynamickou matici požadovaných percentilů a vrátí sloupec obsahující dynamickou matici hodnot percentilů pro každou skupinu.
Syntaxe
T | invoke percentiles_linear_fl(
,
val_col pct_arr [,
aggr_col ])
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
val_col | string |
✔️ | Název sloupce, který obsahuje hodnoty, se kterými se mají vypočítat percentily. |
pct_arr | dynamic |
✔️ | Číselná matice obsahující požadované percentily. Každý percentil by měl být v rozsahu [0–100]. |
aggr_col | string |
Název sloupce, který obsahuje klíč seskupení. |
Definice funkce
Funkci můžete definovat vložením jejího kódu jako funkce definovanou dotazem nebo vytvořením jako uložené funkce v databázi následujícím způsobem:
Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.
Důležité
Příkaz let nemůže běžet samostatně. Musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad, podívejte se na příkladpercentiles_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.
Příklad
Následující příklad používá operátor invoke ke spuštění funkce.
Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.
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
Výstup
name | linka | pct_arr | pct_val |
---|---|---|---|
A | [5,7,9] | [0,25,50,75,100] | [5,6,7,8,9] |
T | [5,7,7,10] | [0,25,50,75,100] | [5,6.5,7,7.75,10] |
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro