series_downsample_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
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)