Announcing Univariate Anomaly Detector in Azure Data Explorer

Published Apr 13 2022 11:44 PM 2,222 Views
Microsoft

Today, we are excited to announce a feature that users now can detect anomalies with Anomaly Detector capability in Azure Data Explorer (ADX). We are offering two new functions in ADX to help users to detect anomaly within your time-series data: series_uv_anomalies_fl() and series_uv_change_points_fl().  

 

Introduction of Azure Data Explorer and Azure Cognitive Services Anomaly Detector

The Anomaly Detector API enables you to check and detect abnormalities in your time series data without having to know machine learning. The Anomaly Detector API's algorithms adapt by automatically finding and applying the best-fitting models to your data, regardless of industry, scenario, or data volume. Using your time series data, the API decides boundaries for anomaly detection, expected values, and which data points are anomalies. 

 

Azure Data Explorer is a fully managed, high-performance, big data analytics platform that makes it easy to analyze high volumes of data in near real time. The Azure Data Explorer toolbox gives you an end-to-end solution for data ingestion, query, visualization, and management. 

 

What are the new functions in ADX for anomaly detection?

Function 1:  series_uv_anomalies_fl() 

The function series_uv_anomalies_fl() detects anomalies in time series by calling the Univariate Anomaly Detection API, part of Azure Cognitive Services. The function accepts a limited set of time series as numerical dynamic arrays and the required anomaly detection sensitivity level. Each time series is converted into the required JSON (JavaScript Object Notation) format and posts it to the Anomaly Detector service endpoint. The service response has dynamic arrays of high/low/all anomalies, the modeled baseline time series, its normal high/low boundaries (a value above or below the high/low boundary is an anomaly) and the detected seasonality. 

 

Function 2: series_uv_change_points_fl()

The function series_uv_change_points_fl() finds change points in time series by calling the Univariate Anomaly Detection API, part of Azure Cognitive Services. The function accepts a limited set of time series as numerical dynamic arrays, the change point detection threshold, and the minimum size of the stable trend window. Each time series is converted into the required JSON format and posts it to the Anomaly Detector service endpoint. The service response has dynamic arrays of change points, their respective confidence, and the detected seasonality. 

These two functions are user-defined tabular functions  applied using the invoke operator. You can either embed its code in your query (ad hoc) or you can define it as a stored function in your database (persistent). 

 

Where to use these new capabilities? 

These two functions are available to use either in Azure Data Explorer website or in Kusto. Explorer application.  

Louise_Han_0-1649917141335.png

 

Getting started is simple! 

  1. Create an ADX Cluster in Azure portal, after the resource is created successfully, go to the resource and create a database. 
  2. Create an Anomaly Detector resource in Azure portal and check the keys and endpoints which you’ll need later. 
  3. Enable plugins in ADX 
    1. These new functions have inline Python and require enabling the python() plugin on the cluster. 
    2. These new functions call the anomaly detection service endpoint and require: 

 

Code Examples 1: Detect anomalies in an entire way 

In ADX, run the following query to make an anomaly detection chart with your onboarded data. You could also create a function to add the code to a stored function for persistent usage. 

 

let series_uv_anomalies_fl=(tbl:(*), y_series:string, sensitivity:int=85, tsid:string='_tsid') 
{ 
    let uri = '[Your-Endpoint]anomalydetector/v1.0/timeseries/entire/detect'; 
    let headers=dynamic({'Ocp-Apim-Subscription-Key': h'[Your-key]'}); 
    let kwargs = pack('y_series', y_series, 'sensitivity', sensitivity); 
    let code = ```if 1: 
        import json 
        y_series = kargs["y_series"] 
        sensitivity = kargs["sensitivity"] 
        json_str = [] 
        for i in range(len(df)): 
            row = df.iloc[i, :] 
            ts = [{'value':row[y_series][j]} for j in range(len(row[y_series]))] 
            json_data = {'series': ts, "sensitivity":sensitivity}     # auto-detect period, or we can force 'period': 84. We can also add 'maxAnomalyRatio':0.25 for maximum 25% anomalies 
            json_str = json_str + [json.dumps(json_data)] 
        result = df 
        result['json_str'] = json_str 
    ```; 
    tbl 
    | evaluate python(typeof(*, json_str:string), code, kwargs) 
    | extend _tsid = column_ifexists(tsid, 1) 
    | partition by _tsid ( 
       project json_str 
       | evaluate http_request_post(uri, headers, dynamic(null)) 
       | project period=ResponseBody.period, baseline_ama=ResponseBody.expectedValues, ad_ama=series_add(0, ResponseBody.isAnomaly), pos_ad_ama=series_add(0, ResponseBody.isPositiveAnomaly) 
       , neg_ad_ama=series_add(0, ResponseBody.isNegativeAnomaly), upper_ama=series_add(ResponseBody.expectedValues, ResponseBody.upperMargins), lower_ama=series_subtract(ResponseBody.expectedValues, ResponseBody.lowerMargins) 
       | extend _tsid=toscalar(_tsid) 
      ) 
} 
; 
let stime=datetime(2017-01-01); 
let etime=datetime(2017-03-02); 
let dt=1d; 
let ts = [Your-table] 
| make-series value=avg(value) on timestamp from stime to etime step dt 
| extend _tsid='TS1'; 
ts 
| invoke series_uv_anomalies_fl('value') 
| lookup ts on _tsid 
| render anomalychart with(xcolumn=timestamp, ycolumns=value, anomalycolumns=ad_ama) 

 

 

After you run the code, you will render a chart like this:

Louise_Han_1-1649917463126.png

 

Code Examples 2: Detect change points when anomaly happens

In ADX, run the following query to make an anomaly detection chart with your onboarded data. You could also create a function to add the code to a stored function for persistent usage. 

 

let series_uv_change_points_fl=(tbl:(*), y_series:string, score_threshold:real=0.9, trend_window:int=5, tsid:string='_tsid') 
{ 
    let uri = '[Your-Endpoint]anomalydetector/v1.0/timeseries/entire/detect'; 
    let headers=dynamic({'Ocp-Apim-Subscription-Key': h'[Your-Key]'}); 
    let kwargs = pack('y_series', y_series, 'score_threshold', score_threshold, 'trend_window', trend_window); 
    let code = ```if 1: 
        import json 
        y_series = kargs["y_series"] 
        score_threshold = kargs["score_threshold"] 
        trend_window = kargs["trend_window"] 
        json_str = [] 
        for i in range(len(df)): 
            row = df.iloc[i, :] 
            ts = [{'value':row[y_series][j]} for j in range(len(row[y_series]))] 
            json_data = {'series': ts, "threshold":score_threshold, "stableTrendWindow": trend_window}     # auto-detect period, or we can force 'period': 84 
            json_str = json_str + [json.dumps(json_data)] 
        result = df 
        result['json_str'] = json_str 
    ```; 
    tbl 
    | evaluate python(typeof(*, json_str:string), code, kwargs) 
    | extend _tsid = column_ifexists(tsid, 1) 
    | partition by _tsid ( 
       project json_str 
       | evaluate http_request_post(uri, headers, dynamic(null)) 
        | project period=ResponseBody.period, change_point=series_add(0, ResponseBody.isChangePoint), confidence=ResponseBody.confidenceScores 
        | extend _tsid=toscalar(_tsid) 
       ) 
} 
; 
let ts = range x from 1 to 300 step 1 
| extend y=iff(x between (100 .. 110) or x between (200 .. 220), 20, 5) 
| extend ts=datetime(2021-01-01)+x*1d 
| extend y=y+4*rand() 
| summarize ts=make_list(ts), y=make_list(y) 
| extend sid=1; 
ts 
| invoke series_uv_change_points_fl('y', 0.8, 10, 'sid') 
| join ts on $left._tsid == $right.sid 
| project-away _tsid 
| project-reorder y, *      //  just to visualize the anomalies on top of y series 
| render anomalychart with(xcolumn=ts, ycolumns=y, confidence, anomalycolumns=change_point) 

 

 

After you run the code, you will render a chart like this:

Louise_Han_2-1649917564750.png

 

Resources

%3CLINGO-SUB%20id%3D%22lingo-sub-3285400%22%20slang%3D%22en-US%22%3EAnnouncing%20Univariate%20Anomaly%20Detector%20in%20Azure%20Data%20Explorer%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3285400%22%20slang%3D%22en-US%22%3E%3CP%3EToday%2C%20we%20are%20excited%20to%20announce%20a%20feature%20that%20users%20now%20can%20detect%20anomalies%20with%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fanomaly-detector%2Foverview-multivariate%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%22%3EAnomaly%20Detector%3C%2FA%3E%20capability%20in%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fdata-explorer-overview%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%22%3EAzure%20Data%20Explorer%20(ADX)%3C%2FA%3E.%20We%20are%20offering%20two%20new%20functions%20in%20ADX%20to%20help%20users%20to%20detect%20anomaly%20within%20your%20time-series%20data%3A%20%3CSTRONG%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-anomalies-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3Eseries_uv_anomalies_fl()%3C%2FA%3E%20and%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3Eseries_uv_change_points_fl().%3C%2FA%3E%26nbsp%3B%26nbsp%3B%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId-394711096%22%20id%3D%22toc-hId-416963113%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW131138748%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW131138748%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3EIntroduction%20of%20Azure%20Data%20Explorer%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW131138748%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3Eand%20Azure%20Cognitive%20Services%20Anomaly%20Detector%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20class%3D%22EOP%20SCXW131138748%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW90571771%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%3EThe%20%3C%2FSPAN%3E%3C%2FSPAN%3E%3CA%20class%3D%22Hyperlink%20SCXW90571771%20BCX0%22%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fanomaly-detector%2Foverview-multivariate%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20Underlined%20SCXW90571771%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3EAnomaly%20Detector%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3EAPI%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW90571771%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%3E%20enables%20you%20to%20check%20and%20detect%20abnormalities%20in%20your%20time%20series%20data%20without%20having%20to%20know%20machine%20learning.%20The%20Anomaly%20Detector%20API's%20algorithms%20adapt%20by%20automatically%20finding%20and%20applying%20the%20best-fitting%20models%20to%20your%20data%2C%20regardless%20of%20industry%2C%20scenario%2C%20or%20data%20volume.%20Using%20your%20time%20series%20data%2C%20the%20API%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%3Edecides%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW90571771%20BCX0%22%3E%20boundaries%20for%20anomaly%20detection%2C%20expected%20values%2C%20and%20which%20data%20points%20are%20anomalies.%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW90571771%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fdata-explorer-overview%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EAzure%20Data%20Explorer%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22none%22%3E%20is%20a%20fully%20managed%2C%20high-performance%2C%20big%20data%20analytics%20platform%20that%20makes%20it%20easy%20to%20analyze%20high%20volumes%20of%20data%20in%20near%20real%20time.%20The%20Azure%20Data%20Explorer%20toolbox%20gives%20you%20an%20end-to-end%20solution%20for%20data%20ingestion%2C%20query%2C%20visualization%2C%20and%20management.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--1412743367%22%20id%3D%22toc-hId--1390491350%22%3EWhat%20are%20the%20new%20functions%20in%20ADX%20for%20anomaly%20detection%3F%3C%2FH2%3E%0A%3CH3%20id%3D%22toc-hId--722181893%22%20id%3D%22toc-hId--699929876%22%3EFunction%201%3A%26nbsp%3B%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-anomalies-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3Eseries_uv_anomalies_fl()%3C%2FA%3E%26nbsp%3B%3C%2FH3%3E%0A%3CP%3E%3CSPAN%20data-contrast%3D%22auto%22%3EThe%20function%E2%80%AF%3C%2FSPAN%3E%3CSTRONG%3E%3CSPAN%20data-contrast%3D%22auto%22%3Eseries_uv_anomalies_fl()%3C%2FSPAN%3E%3C%2FSTRONG%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%E2%80%AFdetects%20anomalies%20in%20time%20series%20by%20calling%20the%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fanomaly-detector%2Foverview%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EUnivariate%20Anomaly%20Detection%20API%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%2C%20part%20of%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fwhat-are-cognitive-services%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EAzure%20Cognitive%20Services%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E.%20The%20function%20accepts%20a%20limited%20set%20of%20time%20series%20as%20numerical%20dynamic%20arrays%20and%20the%20required%20anomaly%20detection%20sensitivity%20level.%20Each%20time%20series%20is%20converted%20into%20the%20required%20JSON%20(JavaScript%20Object%20Notation)%20format%20and%20posts%20it%20to%20the%20Anomaly%20Detector%20service%20endpoint.%20The%20service%20response%20has%20dynamic%20arrays%20of%20high%2Flow%2Fall%20anomalies%2C%20the%20modeled%20baseline%20time%20series%2C%20its%20normal%20high%2Flow%20boundaries%20(a%20value%20above%20or%20below%20the%20high%2Flow%20boundary%20is%20an%20anomaly)%20and%20the%20detected%20seasonality.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH3%20id%3D%22toc-hId-1765330940%22%20id%3D%22toc-hId-1787582957%22%3EFunction%202%3A%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3Eseries_uv_change_points_fl()%3C%2FA%3E%3C%2FH3%3E%0A%3CP%3E%3CSPAN%20data-contrast%3D%22auto%22%3EThe%20function%E2%80%AF%3C%2FSPAN%3E%3CSTRONG%3E%3CSPAN%20data-contrast%3D%22auto%22%3Eseries_uv_change_points_fl()%3C%2FSPAN%3E%3C%2FSTRONG%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%E2%80%AFfinds%20change%20points%20in%20time%20series%20by%20calling%20the%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fanomaly-detector%2Foverview%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EUnivariate%20Anomaly%20Detection%20API%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%2C%20part%20of%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fwhat-are-cognitive-services%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EAzure%20Cognitive%20Services%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E.%20The%20function%20accepts%20a%20limited%20set%20of%20time%20series%20as%20numerical%20dynamic%20arrays%2C%20the%20change%20point%20detection%20threshold%2C%20and%20the%20minimum%20size%20of%20the%20stable%20trend%20window.%20Each%20time%20series%20is%20converted%20into%20the%20required%20JSON%20format%20and%20posts%20it%20to%20the%20Anomaly%20Detector%20service%20endpoint.%20The%20service%20response%20has%20dynamic%20arrays%20of%20change%20points%2C%20their%20respective%20confidence%2C%20and%20the%20detected%20seasonality.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-contrast%3D%22auto%22%3EThese%20two%20functions%20are%20user-defined%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Fquery%2Ffunctions%2Fuser-defined-functions%23tabular-function%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3Etabular%20functions%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%20%E2%80%AFapplied%20using%20the%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Fquery%2Finvokeoperator%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3Einvoke%20operator%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E.%20You%20can%20either%20embed%20its%20code%20in%20your%20query%20(ad%20hoc)%20or%20you%20can%20define%20it%20as%20a%20stored%20function%20in%20your%20database%20(persistent).%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId-1754827836%22%20id%3D%22toc-hId-1777079853%22%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW258741330%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW258741330%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3EWhere%20to%20use%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW258741330%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3E%20these%20new%20capabilities%3F%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW258741330%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%3CSPAN%20class%3D%22EOP%20SCXW258741330%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%3CSPAN%20class%3D%22TextRun%20SCXW80563429%20BCX0%22%20data-contrast%3D%22auto%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3EThese%20two%20functions%20are%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3Eavailable%20to%20use%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3Eeither%20in%20Azure%20Data%20Explorer%20website%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3E%20or%20in%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3EKusto.%20Explorer%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3E%20application.%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW80563429%20BCX0%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW80563429%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Louise_Han_0-1649917141335.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364074i4CE65DD9EED88B37%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22Louise_Han_0-1649917141335.png%22%20alt%3D%22Louise_Han_0-1649917141335.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--52626627%22%20id%3D%22toc-hId--30374610%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW200068939%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW200068939%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3EGetting%20started%20is%20simple!%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW200068939%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FH2%3E%0A%3COL%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CA%20href%3D%22https%3A%2F%2Fms.portal.azure.com%2F%23create%2FMicrosoft.AzureKusto%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3ECreate%20an%20ADX%20Cluster%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%20in%20Azure%20portal%2C%20after%20the%20resource%20is%20created%20successfully%2C%20go%20to%20the%20resource%20and%20create%20a%20database.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CA%20href%3D%22https%3A%2F%2Fms.portal.azure.com%2F%23create%2FMicrosoft.CognitiveServicesAnomalyDetector%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3ECreate%20an%20Anomaly%20Detector%20resource%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22auto%22%3E%20in%20Azure%20portal%20and%20check%20the%20keys%20and%20endpoints%20which%20you%E2%80%99ll%20need%20later.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CSPAN%20data-contrast%3D%22auto%22%3EEnable%20plugins%20in%20ADX%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3COL%20class%3D%22lia-list-style-type-lower-alpha%22%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EThese%20new%20functions%20have%20inline%20Python%20and%20require%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Fquery%2Fpythonplugin%23enable-the-plugin%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3Eenabling%20the%20python()%20plugin%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22none%22%3E%E2%80%AFon%20the%20cluster.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EThese%20new%20functions%20call%20the%20anomaly%20detection%20service%20endpoint%20and%20require%3A%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3CUL%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EEnable%20the%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Fquery%2Fhttp-request-plugin%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%3Ehttp_request%20plugin%20%2F%20http_request_post%20plugin%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22none%22%3E%E2%80%AFon%20the%20cluster.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%251.%22%20data-font%3D%22%22%20data-listid%3D%227%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3E%3CSPAN%20data-contrast%3D%22none%22%3EModify%20the%E2%80%AF%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Fmanagement%2Fcalloutpolicy%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%3CSPAN%20data-contrast%3D%22none%22%3Ecallout%20policy%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20data-contrast%3D%22none%22%3E%E2%80%AFfor%20type%E2%80%AF%3C%2FSPAN%3E%3CSPAN%20data-contrast%3D%22none%22%3Ewebapi%3C%2FSPAN%3E%3CSPAN%20data-contrast%3D%22none%22%3E%E2%80%AFto%20allow%20accessing%20the%20service%20endpoint.%3C%2FSPAN%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3C%2FLI%3E%0A%3C%2FOL%3E%0A%3C%2FLI%3E%0A%3C%2FOL%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--1860081090%22%20id%3D%22toc-hId--1837829073%22%3E%3CEM%3E%3CSPAN%20class%3D%22TextRun%20SCXW177051583%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW177051583%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3ECode%20Examples%201%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW177051583%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3E%3A%20Detect%20anomalies%20in%20an%20entire%20way%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW177051583%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%3CSPAN%20class%3D%22EOP%20SCXW177051583%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559738%26quot%3B%3A320%2C%26quot%3B335559739%26quot%3B%3A0%2C%26quot%3B335559740%26quot%3B%3A240%7D%22%3E%3CSPAN%20class%3D%22TextRun%20SCXW22927707%20BCX0%22%20data-contrast%3D%22auto%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3EIn%20ADX%2C%20run%20the%20following%20query%20to%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3Emake%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3E%20a%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3En%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3E%20anomaly%20detection%20chart%20with%20your%20onboarded%20data.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3EYou%20could%20also%20%3C%2FSPAN%3E%3C%2FSPAN%3E%3CA%20class%3D%22Hyperlink%20SCXW22927707%20BCX0%22%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dpersistent%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3E%3CSPAN%20class%3D%22TextRun%20Underlined%20SCXW22927707%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Ecreate%20a%20function%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20class%3D%22TextRun%20SCXW22927707%20BCX0%22%20data-contrast%3D%22auto%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW22927707%20BCX0%22%3E%20to%20add%20the%20code%20to%20a%20stored%20function%20for%20persistent%20usage.%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW22927707%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-sql%22%3E%3CCODE%3Elet%20series_uv_anomalies_fl%3D(tbl%3A(*)%2C%20y_series%3Astring%2C%20sensitivity%3Aint%3D85%2C%20tsid%3Astring%3D'_tsid')%20%0A%7B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20uri%20%3D%20'%5BYour-Endpoint%5Danomalydetector%2Fv1.0%2Ftimeseries%2Fentire%2Fdetect'%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20headers%3Ddynamic(%7B'Ocp-Apim-Subscription-Key'%3A%20h'%5BYour-key%5D'%7D)%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20kwargs%20%3D%20pack('y_series'%2C%20y_series%2C%20'sensitivity'%2C%20sensitivity)%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20code%20%3D%20%60%60%60if%201%3A%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFimport%20json%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFy_series%20%3D%20kargs%5B%22y_series%22%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFsensitivity%20%3D%20kargs%5B%22sensitivity%22%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_str%20%3D%20%5B%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFfor%20i%20in%20range(len(df))%3A%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFrow%20%3D%20df.iloc%5Bi%2C%20%3A%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFts%20%3D%20%5B%7B'value'%3Arow%5By_series%5D%5Bj%5D%7D%20for%20j%20in%20range(len(row%5By_series%5D))%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_data%20%3D%20%7B'series'%3A%20ts%2C%20%22sensitivity%22%3Asensitivity%7D%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%23%20auto-detect%20period%2C%20or%20we%20can%20force%20'period'%3A%2084.%20We%20can%20also%20add%20'maxAnomalyRatio'%3A0.25%20for%20maximum%2025%25%20anomalies%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_str%20%3D%20json_str%20%2B%20%5Bjson.dumps(json_data)%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFresult%20%3D%20df%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFresult%5B'json_str'%5D%20%3D%20json_str%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%60%60%60%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFtbl%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20evaluate%20python(typeof(*%2C%20json_str%3Astring)%2C%20code%2C%20kwargs)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20extend%20_tsid%20%3D%20column_ifexists(tsid%2C%201)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20partition%20by%20_tsid%20(%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFproject%20json_str%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20evaluate%20http_request_post(uri%2C%20headers%2C%20dynamic(null))%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20project%20period%3DResponseBody.period%2C%20baseline_ama%3DResponseBody.expectedValues%2C%20ad_ama%3Dseries_add(0%2C%20ResponseBody.isAnomaly)%2C%20pos_ad_ama%3Dseries_add(0%2C%20ResponseBody.isPositiveAnomaly)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%2C%20neg_ad_ama%3Dseries_add(0%2C%20ResponseBody.isNegativeAnomaly)%2C%20upper_ama%3Dseries_add(ResponseBody.expectedValues%2C%20ResponseBody.upperMargins)%2C%20lower_ama%3Dseries_subtract(ResponseBody.expectedValues%2C%20ResponseBody.lowerMargins)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20extend%20_tsid%3Dtoscalar(_tsid)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF)%20%0A%7D%20%0A%3B%20%0Alet%20stime%3Ddatetime(2017-01-01)%3B%20%0Alet%20etime%3Ddatetime(2017-03-02)%3B%20%0Alet%20dt%3D1d%3B%20%0Alet%20ts%20%3D%20%5BYour-table%5D%20%0A%7C%20make-series%20value%3Davg(value)%20on%20timestamp%20from%20stime%20to%20etime%20step%20dt%20%0A%7C%20extend%20_tsid%3D'TS1'%3B%20%0Ats%20%0A%7C%20invoke%20series_uv_anomalies_fl('value')%20%0A%7C%20lookup%20ts%20on%20_tsid%20%0A%7C%20render%20anomalychart%20with(xcolumn%3Dtimestamp%2C%20ycolumns%3Dvalue%2C%20anomalycolumns%3Dad_ama)%20%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EAfter%20you%20run%20the%20code%2C%20you%20will%20render%20a%20chart%20like%20this%3A%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Louise_Han_1-1649917463126.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364075iBA9341CBCEDCBBE1%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Louise_Han_1-1649917463126.png%22%20alt%3D%22Louise_Han_1-1649917463126.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId-627431743%22%20id%3D%22toc-hId-649683760%22%3E%3CEM%3E%3CSPAN%20class%3D%22TextRun%20SCXW177051583%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW177051583%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3ECode%20Examples%202%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW177051583%20BCX0%22%20data-ccp-parastyle%3D%22heading%201%22%3E%3A%20Detect%20change%20points%20when%20anomaly%20happens%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FEM%3E%3C%2FH2%3E%0A%3CP%3E%3CSPAN%20class%3D%22TextRun%20SCXW73694455%20BCX0%22%20data-contrast%3D%22auto%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3EIn%20ADX%2C%20run%20the%20following%20query%20to%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3Emake%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3E%20a%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3En%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3E%20anomaly%20detection%20chart%20with%20your%20onboarded%20data.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3EYou%20could%20also%20%3C%2FSPAN%3E%3C%2FSPAN%3E%3CA%20class%3D%22Hyperlink%20SCXW73694455%20BCX0%22%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dpersistent%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3E%3CSPAN%20class%3D%22TextRun%20Underlined%20SCXW73694455%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Ecreate%20a%20function%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20class%3D%22TextRun%20SCXW73694455%20BCX0%22%20data-contrast%3D%22auto%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW73694455%20BCX0%22%3E%20to%20add%20the%20code%20to%20a%20stored%20function%20for%20persistent%20usage.%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW73694455%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-sql%22%3E%3CCODE%3Elet%20series_uv_change_points_fl%3D(tbl%3A(*)%2C%20y_series%3Astring%2C%20score_threshold%3Areal%3D0.9%2C%20trend_window%3Aint%3D5%2C%20tsid%3Astring%3D'_tsid')%20%0A%7B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20uri%20%3D%20'%5BYour-Endpoint%5Danomalydetector%2Fv1.0%2Ftimeseries%2Fentire%2Fdetect'%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20headers%3Ddynamic(%7B'Ocp-Apim-Subscription-Key'%3A%20h'%5BYour-Key%5D'%7D)%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20kwargs%20%3D%20pack('y_series'%2C%20y_series%2C%20'score_threshold'%2C%20score_threshold%2C%20'trend_window'%2C%20trend_window)%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFlet%20code%20%3D%20%60%60%60if%201%3A%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFimport%20json%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFy_series%20%3D%20kargs%5B%22y_series%22%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFscore_threshold%20%3D%20kargs%5B%22score_threshold%22%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFtrend_window%20%3D%20kargs%5B%22trend_window%22%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_str%20%3D%20%5B%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFfor%20i%20in%20range(len(df))%3A%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFrow%20%3D%20df.iloc%5Bi%2C%20%3A%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFts%20%3D%20%5B%7B'value'%3Arow%5By_series%5D%5Bj%5D%7D%20for%20j%20in%20range(len(row%5By_series%5D))%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_data%20%3D%20%7B'series'%3A%20ts%2C%20%22threshold%22%3Ascore_threshold%2C%20%22stableTrendWindow%22%3A%20trend_window%7D%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%23%20auto-detect%20period%2C%20or%20we%20can%20force%20'period'%3A%2084%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFjson_str%20%3D%20json_str%20%2B%20%5Bjson.dumps(json_data)%5D%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFresult%20%3D%20df%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFresult%5B'json_str'%5D%20%3D%20json_str%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%60%60%60%3B%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AFtbl%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20evaluate%20python(typeof(*%2C%20json_str%3Astring)%2C%20code%2C%20kwargs)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20extend%20_tsid%20%3D%20column_ifexists(tsid%2C%201)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%7C%20partition%20by%20_tsid%20(%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AFproject%20json_str%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20evaluate%20http_request_post(uri%2C%20headers%2C%20dynamic(null))%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20project%20period%3DResponseBody.period%2C%20change_point%3Dseries_add(0%2C%20ResponseBody.isChangePoint)%2C%20confidence%3DResponseBody.confidenceScores%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%7C%20extend%20_tsid%3Dtoscalar(_tsid)%20%0A%E2%80%AF%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF)%20%0A%7D%20%0A%3B%20%0Alet%20ts%20%3D%20range%20x%20from%201%20to%20300%20step%201%20%0A%7C%20extend%20y%3Diff(x%20between%20(100%20..%20110)%20or%20x%20between%20(200%20..%20220)%2C%2020%2C%205)%20%0A%7C%20extend%20ts%3Ddatetime(2021-01-01)%2Bx*1d%20%0A%7C%20extend%20y%3Dy%2B4*rand()%20%0A%7C%20summarize%20ts%3Dmake_list(ts)%2C%20y%3Dmake_list(y)%20%0A%7C%20extend%20sid%3D1%3B%20%0Ats%20%0A%7C%20invoke%20series_uv_change_points_fl('y'%2C%200.8%2C%2010%2C%20'sid')%20%0A%7C%20join%20ts%20on%20%24left._tsid%20%3D%3D%20%24right.sid%20%0A%7C%20project-away%20_tsid%20%0A%7C%20project-reorder%20y%2C%20*%20%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%E2%80%AF%2F%2F%20%E2%80%AFjust%20to%20visualize%20the%20anomalies%20on%20top%20of%20y%20series%20%0A%7C%20render%20anomalychart%20with(xcolumn%3Dts%2C%20ycolumns%3Dy%2C%20confidence%2C%20anomalycolumns%3Dchange_point)%20%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EAfter%20you%20run%20the%20code%2C%20you%20will%20render%20a%20chart%20like%20this%3A%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Louise_Han_2-1649917564750.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364076iE29550E1060925CE%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Louise_Han_2-1649917564750.png%22%20alt%3D%22Louise_Han_2-1649917564750.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CH2%20id%3D%22toc-hId--1180022720%22%20id%3D%22toc-hId--1157770703%22%3EResources%3C%2FH2%3E%0A%3CUL%20style%3D%22font-weight%3A%20400%3B%22%3E%0A%3CLI%20data-leveltext%3D%22%EF%82%B7%22%20data-font%3D%22Symbol%22%20data-listid%3D%229%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%221%22%20data-aria-level%3D%221%22%3ELearn%20about%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Fanomaly-detector%2Foverview-multivariate%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Ewhat%20is%20Univariate%20Anomaly%20Detector%3C%2FA%3E.%26nbsp%3B%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%EF%82%B7%22%20data-font%3D%22Symbol%22%20data-listid%3D%229%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%222%22%20data-aria-level%3D%221%22%3ELearn%20about%20what%20is%20%3CA%20href%3D%22https%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fservices%2Fdata-explorer%2F%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3EAzure%20Data%20Explorer%3C%2FA%3E.%26nbsp%3B%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%EF%82%B7%22%20data-font%3D%22Symbol%22%20data-listid%3D%229%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%223%22%20data-aria-level%3D%221%22%3EUsing%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-anomalies-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Eseries_uv_anomalies_fl()%3C%2FA%3E%20and%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Eseries_uv_change_points_fl()%3C%2FA%3E%20to%20detect%20anomalies.%26nbsp%3B%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%EF%82%B7%22%20data-font%3D%22Symbol%22%20data-listid%3D%229%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%224%22%20data-aria-level%3D%221%22%3EContact%20us%3A%20%3CA%20href%3D%22mailto%3AAnomalyDetector%40microsoft.com%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3EAnomalyDetector%40microsoft.com%3C%2FA%3E%26nbsp%3B%26nbsp%3B%3C%2FLI%3E%0A%3CLI%20data-leveltext%3D%22%EF%82%B7%22%20data-font%3D%22Symbol%22%20data-listid%3D%229%22%20aria-setsize%3D%22-1%22%20data-aria-posinset%3D%225%22%20data-aria-level%3D%221%22%3ENeed%20support%3F%E2%80%AF%3CA%20href%3D%22https%3A%2F%2Fforms.office.com%2Fpages%2Fresponsepage.aspx%3Fid%3Dv4j5cvGGr0GRqy180BHbR2Ci-wb6-iNDoBoNxrnEk9VURjNXUU1VREpOT0U1UEdURkc0OVRLSkZBNC4u%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3EJoin%20the%20Anomaly%20Detector%20Community%3C%2FA%3E.%26nbsp%3B%3C%2FLI%3E%0A%3C%2FUL%3E%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-3285400%22%20slang%3D%22en-US%22%3E%3CP%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW119693719%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3EToday%2C%20we%20are%20excited%20to%20announce%20a%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3Efeature%20that%20users%20now%20can%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3E%20detect%20anomalies%20in%20Azure%20Data%20%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3EExplorer%20(%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3EADX).%20We%20are%20offering%20two%20functions%20in%20ADX%20to%20help%20users%20to%20detect%20anomaly%20within%20your%20time-series%20data%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3E%3A%20%3C%2FSPAN%3E%3C%2FSPAN%3E%3CA%20class%3D%22Hyperlink%20SCXW119693719%20BCX0%22%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-anomalies-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20Underlined%20SCXW119693719%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Eseries_uv_ano%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Em%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Ealies_fl%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3E()%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW119693719%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3E%20and%20%3C%2FSPAN%3E%3C%2FSPAN%3E%3CA%20class%3D%22Hyperlink%20SCXW119693719%20BCX0%22%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdata-explorer%2Fkusto%2Ffunctions-library%2Fseries-uv-change-points-fl%3Ftabs%3Dadhoc%22%20target%3D%22_blank%22%20rel%3D%22noreferrer%20noopener%22%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20Underlined%20SCXW119693719%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3Eseries_uv_change_points_fl%3C%2FSPAN%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%20data-ccp-charstyle%3D%22Hyperlink%22%3E().%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FA%3E%3CSPAN%20class%3D%22TextRun%20Highlight%20SCXW119693719%20BCX0%22%20data-contrast%3D%22none%22%3E%3CSPAN%20class%3D%22NormalTextRun%20SCXW119693719%20BCX0%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22EOP%20SCXW119693719%20BCX0%22%20data-ccp-props%3D%22%7B%26quot%3B201341983%26quot%3B%3A0%2C%26quot%3B335559739%26quot%3B%3A120%2C%26quot%3B335559740%26quot%3B%3A264%7D%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22ADX%26amp%3BAD.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364077i06D0346BFD60A252%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22ADX%26amp%3BAD.png%22%20alt%3D%22ADX%26amp%3BAD.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-3285400%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3ECognitive%20Services%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Co-Authors
Version history
Last update:
‎Apr 13 2022 11:47 PM
Updated by: