Sdílet prostřednictvím


series_downsample_fl()

Funkce series_downsample_fl() je uživatelem definovaná funkce (UDF), která převzorkuje časovou řadu podle celočíselného faktoru. Tato funkce přebírá tabulku obsahující více časových řad (dynamické číselné pole) a převzorkuje každou řadu. Výstup obsahuje hrubou řadu i příslušné časové pole. Aby se zabránilo aliasingu, použije funkce před podvzorkováním jednoduchý filtr s nízkým předáváním na každou řadu.

Syntaxe

T | invoke series_downsample_fl(, t_col y_col, ds_t_col ds_y_col sampling_factor,, )

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
t_col string ✔️ Název sloupce, který obsahuje časovou osu řady k převzorkování.
y_col string ✔️ Název sloupce, který obsahuje řadu, převzorkuje.
ds_t_col string ✔️ Název sloupce pro uložení časové osy vybraných dolů každé řady.
ds_y_col string ✔️ Název sloupce pro uložení ukázkové řady.
sampling_factor int ✔️ Celé číslo určující požadované vzorkování.

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říkladseries_downsample_fl().

let series_downsample_fl=(tbl:(*), t_col:string, y_col:string, ds_t_col:string, ds_y_col:string, sampling_factor:int)
{
    tbl
    | extend _t_ = column_ifexists(t_col, dynamic(0)), _y_ = column_ifexists(y_col, dynamic(0))
    | extend _y_ = series_fir(_y_, repeat(1, sampling_factor), true, true)    //  apply a simple low pass filter before sub-sampling
    | mv-apply _t_ to typeof(DateTime), _y_ to typeof(double) on
    (extend rid=row_number()-1
    | where rid % sampling_factor == ceiling(sampling_factor/2.0)-1                    //  sub-sampling
    | summarize _t_ = make_list(_t_), _y_ = make_list(_y_))
    | extend cols = bag_pack(ds_t_col, _t_, ds_y_col, _y_)
    | project-away _t_, _y_
    | evaluate bag_unpack(cols)
};
// 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 series_downsample_fl=(tbl:(*), t_col:string, y_col:string, ds_t_col:string, ds_y_col:string, sampling_factor:int)
{
    tbl
    | extend _t_ = column_ifexists(t_col, dynamic(0)), _y_ = column_ifexists(y_col, dynamic(0))
    | extend _y_ = series_fir(_y_, repeat(1, sampling_factor), true, true)    //  apply a simple low pass filter before sub-sampling
    | mv-apply _t_ to typeof(DateTime), _y_ to typeof(double) on
    (extend rid=row_number()-1
    | where rid % sampling_factor == ceiling(sampling_factor/2.0)-1                    //  sub-sampling
    | summarize _t_ = make_list(_t_), _y_ = make_list(_y_))
    | extend cols = bag_pack(ds_t_col, _t_, ds_y_col, _y_)
    | project-away _t_, _y_
    | evaluate bag_unpack(cols)
};
demo_make_series1
| make-series num=count() on TimeStamp step 1h by OsVer
| invoke series_downsample_fl('TimeStamp', 'num', 'coarse_TimeStamp', 'coarse_num', 4)
| render timechart with(xcolumn=coarse_TimeStamp, ycolumns=coarse_num)

Výstup

Časová řada se převzorkuje o 4: Graf znázorňující převzorkování časové řady

Tady je původní časová řada (před downsamplingem):

demo_make_series1
| make-series num=count() on TimeStamp step 1h by OsVer
| render timechart with(xcolumn=TimeStamp, ycolumns=num)

Graf zobrazující původní časová řada před downsamplingem