Sdílet prostřednictvím


plotly_anomaly_fl()

Funkce plotly_anomaly_fl() je uživatelem definovaná funkce, která umožňuje přizpůsobit šablonu grafu a vytvořit tak interaktivní graf anomálií.

Funkce přijímá tabulku obsahující zdrojovou a základní časovou řadu, seznamy pozitivních a negativních anomálií s příslušnými velikostmi a řetězec popisků grafu. Funkce vrátí tabulku s jednou buňkou obsahující plotly JSON. Volitelně můžete data vykreslit na dlaždici řídicího panelu Azure Data Explorer. Další informace najdete v tématu Plotly (Preview).

Poznámka

Zvažte použití nativní " | render anomalychart" metody Azure Data Explorer pro vykreslení neinteraktivních grafů anomálií.

Požadavek

Extrahujte požadovanou šablonu anomálií z veřejně dostupné PlotlyTemplate tabulky. Zkopírujte tuto tabulku z databáze Samples do své databáze spuštěním následujícího příkazu KQL z cílové databáze:

.set PlotlyTemplate <| cluster('help.kusto.windows.net').database('Samples').PlotlyTemplate

Syntax

T | invoke plotly_anomaly_fl(, time_col, val_col, baseline_col, time_high_col, val_high_col, size_high_col, time_low_col, val_low__col, size_low_col, chart_title, series_nameval_name)

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

Parametry

Název Typ Vyžadováno Popis
time_col string ✔️ Název sloupce obsahujícího dynamické pole časových bodů původní časové řady
val_col string ✔️ Název sloupce obsahujícího hodnoty původní časové řady
baseline_col string ✔️ Název sloupce obsahujícího hodnoty časové řady podle směrného plánu. Anomálie se obvykle zjišťují velkým posunem hodnoty od očekávané základní hodnoty.
time_high_col string ✔️ Název sloupce obsahujícího časové body vysokých (nad směrný plán) anomálií
val_high_col string ✔️ Název sloupce obsahujícího hodnoty vysokých anomálií
size_high_col string ✔️ Název sloupce obsahujícího velikosti značek vysokých anomálií
time_low_col string ✔️ Název sloupce obsahujícího časové body nízkých anomálií
val_low_col string ✔️ Název sloupce obsahujícího hodnoty nízkých anomálií
size_low_col string ✔️ Název sloupce obsahujícího velikosti značek nízkých anomálií
chart_title string Název grafu, výchozí hodnota je Graf anomálií.
series_name string Název časové řady, výchozí hodnota je Metrika
val_name string Název osy hodnot, výchozí hodnota je Hodnota.

Definice funkce

Funkci můžete definovat vložením jejího kódu jako funkce definované dotazem nebo jejím vytvořením jako uložené funkce v databázi, a to 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 nelze spustit samostatně. Musí za ním následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad , podívejte se na plotly_anomaly_fl()příklad.

let plotly_anomaly_fl=(tbl:(*), time_col:string, val_col:string, baseline_col:string, time_high_col:string , val_high_col:string, size_high_col:string,
                                time_low_col:string, val_low_col:string, size_low_col:string,
                                chart_title:string='Anomaly chart', series_name:string='Metric', val_name:string='Value')
{
    let anomaly_chart = toscalar(PlotlyTemplate | where name == "anomaly" | project plotly);
    let tbl_ex = tbl | extend _timestamp = column_ifexists(time_col, datetime(null)), _values = column_ifexists(val_col, 0.0), _baseline = column_ifexists(baseline_col, 0.0),
                              _high_timestamp = column_ifexists(time_high_col, datetime(null)), _high_values = column_ifexists(val_high_col, 0.0), _high_size = column_ifexists(size_high_col, 1),
                              _low_timestamp = column_ifexists(time_low_col, datetime(null)), _low_values = column_ifexists(val_low_col, 0.0), _low_size = column_ifexists(size_low_col, 1);
    tbl_ex
    | extend plotly = anomaly_chart
    | extend plotly=replace_string(plotly, '$TIME_STAMPS$', tostring(_timestamp))
    | extend plotly=replace_string(plotly, '$SERIES_VALS$', tostring(_values))
    | extend plotly=replace_string(plotly, '$BASELINE_VALS$', tostring(_baseline))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_HIGH_ANOMALIES$', tostring(_high_timestamp))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_VALS$', tostring(_high_values))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_MARKER_SIZE$', tostring(_high_size))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_LOW_ANOMALIES$', tostring(_low_timestamp))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_VALS$', tostring(_low_values))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_MARKER_SIZE$', tostring(_low_size))
    | extend plotly=replace_string(plotly, '$TITLE$', chart_title)
    | extend plotly=replace_string(plotly, '$SERIES_NAME$', series_name)
    | extend plotly=replace_string(plotly, '$Y_NAME$', val_name)
    | project plotly
};
// 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, vyvolejte ji po definici vložené funkce.

let plotly_anomaly_fl=(tbl:(*), time_col:string, val_col:string, baseline_col:string, time_high_col:string , val_high_col:string, size_high_col:string,
                                time_low_col:string, val_low_col:string, size_low_col:string,
                                chart_title:string='Anomaly chart', series_name:string='Metric', val_name:string='Value')
{
    let anomaly_chart = toscalar(PlotlyTemplate | where name == "anomaly" | project plotly);
    let tbl_ex = tbl | extend _timestamp = column_ifexists(time_col, datetime(null)), _values = column_ifexists(val_col, 0.0), _baseline = column_ifexists(baseline_col, 0.0),
                              _high_timestamp = column_ifexists(time_high_col, datetime(null)), _high_values = column_ifexists(val_high_col, 0.0), _high_size = column_ifexists(size_high_col, 1),
                              _low_timestamp = column_ifexists(time_low_col, datetime(null)), _low_values = column_ifexists(val_low_col, 0.0), _low_size = column_ifexists(size_low_col, 1);
    tbl_ex
    | extend plotly = anomaly_chart
    | extend plotly=replace_string(plotly, '$TIME_STAMPS$', tostring(_timestamp))
    | extend plotly=replace_string(plotly, '$SERIES_VALS$', tostring(_values))
    | extend plotly=replace_string(plotly, '$BASELINE_VALS$', tostring(_baseline))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_HIGH_ANOMALIES$', tostring(_high_timestamp))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_VALS$', tostring(_high_values))
    | extend plotly=replace_string(plotly, '$HIGH_ANOMALIES_MARKER_SIZE$', tostring(_high_size))
    | extend plotly=replace_string(plotly, '$TIME_STAMPS_LOW_ANOMALIES$', tostring(_low_timestamp))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_VALS$', tostring(_low_values))
    | extend plotly=replace_string(plotly, '$LOW_ANOMALIES_MARKER_SIZE$', tostring(_low_size))
    | extend plotly=replace_string(plotly, '$TITLE$', chart_title)
    | extend plotly=replace_string(plotly, '$SERIES_NAME$', series_name)
    | extend plotly=replace_string(plotly, '$Y_NAME$', val_name)
    | project plotly
};
let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let marker_scale = 8;
let s_name = 'TS1';
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid
| where sid == s_name
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| mv-apply num1=num to typeof(double), anomalies1=anomalies to typeof(double), score1=score to typeof(double), TimeStamp1=TimeStamp to typeof(datetime)  on (
    summarize pAnomalies=make_list_if(num1, anomalies1 > 0), pTimeStamp=make_list_if(TimeStamp1, anomalies1 > 0), pSize=make_list_if(toint(score1*marker_scale), anomalies1 > 0),
              nAnomalies=make_list_if(num1, anomalies1 < 0), nTimeStamp=make_list_if(TimeStamp1, anomalies1 < 0), nSize=make_list_if(toint(-score1*marker_scale), anomalies1 < 0)
)
| invoke plotly_anomaly_fl('TimeStamp', 'num', 'baseline', 'pTimeStamp', 'pAnomalies', 'pSize', 'nTimeStamp', 'nAnomalies', 'nSize',
                           chart_title='Anomaly chart using plotly_anomaly_fl()', series_name=s_name, val_name='# of requests')
| render plotly

Výstup

Výstupem je plotly řetězec JSON, který se dá vykreslit pomocí | vykreslovat v grafu' nebo v dlaždici řídicího panelu Azure Data Explorer. Další informace o vytváření dlaždic řídicího panelu najdete v tématu Vizualizace dat pomocí řídicích panelů Azure Data Explorer .

Následující obrázek znázorňuje ukázkový graf anomálií pomocí výše uvedené funkce:

Snímek obrazovky s grafem anomálií ukázkové datové sady

Můžete přiblížit a najet myší na anomálie:

Snímek obrazovky s přiblížením neobvyklé oblastiSnímek obrazovky s najetí myší na anomálii