Sdílet prostřednictvím


plotly_anomaly_fl()

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

Funkce přijímá tabulku obsahující zdroj a časovou řadu podle směrného plánu, seznamy kladný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í grafly JSON. Volitelně můžete data vykreslit na dlaždici řídicího panelu Azure Data Exploreru. Další informace najdete v tématu Plotly (Preview).

Poznámka:

Zvažte použití nativní " | render anomalychart" metody Azure Data Exploreru pro vykreslení neinteraktivního grafu anomálií.

Požadavek

Extrahujte požadovanou šablonu "anomálie" z veřejně dostupné PlotlyTemplate tabulky. Zkopírujte tuto tabulku z ukázkové databáze do 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

Syntaxe

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_name val_name, )

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

Parametry

Název Type Požadováno Popis
time_col string ✔️ Název sloupce obsahující 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, který obsahuje hodnoty časové řady podle směrného plánu. Anomálie jsou obvykle zjištěny velkým posunem hodnoty od očekávané základní hodnoty.
time_high_col string ✔️ Název sloupce obsahujícího časové body vysoké (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 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říkladplotly_anomaly_fl().

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, vyvoláte 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 řetězec JSON plotly, který lze vykreslit pomocí | vykreslujte vykreslení nebo na dlaždici řídicího panelu Azure Data Exploreru. Další informace o vytváření dlaždic řídicího panelu najdete v tématu Vizualizace dat pomocí řídicích panelů Azure Data Exploreru .

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