Udostępnij za pośrednictwem


series_downsample_fl()

Funkcja series_downsample_fl() jest funkcją zdefiniowaną przez użytkownika (UDF), która obniża szereg czasowy według współczynnika całkowitego. Ta funkcja przyjmuje tabelę zawierającą wiele szeregów czasowych (tablicę liczbową dynamiczną) i downsamples każdej serii. Dane wyjściowe zawierają zarówno serię grubszą, jak i jej tablicę czasową. Aby uniknąć aliasowania, funkcja stosuje prosty filtr z niskim przekazywaniem dla każdej serii przed podamplingiem.

Składnia

T | invoke series_downsample_fl(, t_col, y_col, ds_t_col, ds_y_colsampling_factor)

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

Parametry

Nazwa Typ Wymagane Opis
t_col string ✔️ Nazwa kolumny zawierającej oś czasowa serii do downsample.
y_col string ✔️ Nazwa kolumny zawierającej serię do downsample.
ds_t_col string ✔️ Nazwa kolumny do przechowywania osi czasu próbkowanej w dół każdej serii.
ds_y_col string ✔️ Nazwa kolumny do przechowywania w dół przykładowej serii.
sampling_factor int ✔️ Liczba całkowita określająca wymagane próbkowanie w dół.

Definicja funkcji

Funkcję można zdefiniować, osadzając 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. Należy po nim wykonać instrukcję wyrażenia tabelarycznego. Aby uruchomić działający przykład programu series_downsample_fl(), zobacz Przykład.

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.

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 osadzonej definicji funkcji.

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)

Dane wyjściowe

Szereg czasowy downsampled przez 4: Wykres przedstawiający downsampling szeregów czasowych.

Aby uzyskać informacje, oto oryginalny szereg czasowy (przed downsampling):

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

Wykres przedstawiający oryginalny szereg czasowy przed downsamplingiem