Freigeben über


series_downsample_fl()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Die Funktion series_downsample_fl() ist eine benutzerdefinierte Funktion (UDF), die eine Zeitreihe um einen ganzzahligen Faktor herunterstempelt. Diese Funktion verwendet eine Tabelle, die mehrere Zeitreihen (dynamische numerische Matrix) enthält, und setzt jede Datenreihe herab. Die Ausgabe enthält sowohl die grobe Datenreihe als auch die jeweilige Zeitarray. Um Aliasing zu vermeiden, wendet die Funktion vor dem Untersampling einen einfachen Low Pass-Filter auf jede Datenreihe an.

Syntax

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
t_col string ✔️ Der Name der Spalte, die die Zeitachse der Datenreihe zum Abwärtsstempel enthält.
y_col string ✔️ Der Name der Spalte, die die Datenreihe enthält, um die Absampelung zu ändern.
ds_t_col string ✔️ Der Name der Spalte, die die abgesampte Zeitachse jeder Datenreihe speichern soll.
ds_y_col string ✔️ Der Name der Spalte, in der die unten beispielierte Datenreihe gespeichert werden soll.
sampling_factor int ✔️ Eine ganze Zahl, die das erforderliche Sampling nach unten angibt.

Funktionsdefinition

Sie können die Funktion definieren, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder wie folgt als gespeicherte Funktion in Ihrer Datenbank erstellen:

Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.

Wichtig

Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels series_downsample_fl()finden Sie unter Beispiel.

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.

Beispiel

Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.

Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.

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)

Output

Die Zeitreihe wurde um 4 heruntergestampt: Diagramm mit Downsampling einer Zeitreihe.

Hier ist die ursprüngliche Zeitreihe (vor dem Downsampling):

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

Diagramm mit der ursprünglichen Zeitreihe vor dem Downsampling