Esercitazione: Visualizzare anomalie usando il rilevamento di batch e Power BI (rilevamento univariato)

Importante

A partire dal 20 settembre 2023 non sarà possibile creare nuove risorse rilevamento anomalie. Il servizio Rilevamento anomalie viene ritirato il 1° ottobre 2026. È consigliabile eseguire la migrazione a Microsoft Fabric, che integra direttamente il progetto open source microsoft/anomaly-detector o al progetto open source anomaly-detector.

Usare questa esercitazione per trovare anomalie nel set di dati di una serie temporale come batch. Usando Power BI desktop, si prende un file Excel, si preparano i dati per il API Rilevamento anomalie e si visualizzano anomalie statistiche in tutto il file.

In questa esercitazione si apprenderà come:

  • Usare Power BI Desktop per importare e trasformare un set di dati di serie temporali
  • Integrare Power BI Desktop con il API Rilevamento anomalie per il rilevamento anomalie batch
  • Visualizzare le anomalie trovate all'interno dei dati, inclusi i valori previsti e quelli rilevati, e i limiti di rilevamento anomalie.

Prerequisiti

  • Sottoscrizione Azure
  • Microsoft Power BI Desktop, disponibile gratuitamente.
  • Un file di Excel (con estensione xlsx) contenente i punti dati delle serie temporali.
  • Dopo aver creato la sottoscrizione Azure, creare una risorsa Rilevamento anomalie nel portale di Azure per ottenere la chiave e l'endpoint.
    • Sarà necessaria la chiave e l'endpoint della risorsa creata per connettere l'applicazione al API Rilevamento anomalie. Questa operazione verrà eseguita più avanti nell'avvio rapido.

Note

Per i migliori risultati quando si usa l'API Rilevamento anomalie, i dati delle serie temporali in formato JSON devono includere:

  • Punti dati separati dallo stesso intervallo, con non più del 10% del numero previsto di punti mancanti.
  • Almeno 12 punti dati se i dati non hanno un modello stagionale chiaro.
  • Almeno 4 occorrenze del modello se i dati hanno uno modello chiaro.

Caricare e formattare i dati della serie temporale

Per iniziare, aprire Power BI Desktop e caricare i dati delle serie temporali scaricati dai prerequisiti. Questo file di Excel contiene una serie di coppie di valori e timestamp UTC (Coordinated Universal Time).

Note

Power BI possono usare dati di un'ampia gamma di origini, ad esempio file .csv, database SQL, Azure archiviazione BLOB e altro ancora.

Nella finestra principale Power BI Desktop selezionare la barra multifunzione Home. Nel gruppo di dati Esternal della barra multifunzione aprire il menu a discesa Get Data e selezionare Excel.

 Immagine del pulsante

Nella finestra di dialogo visualizzata passare alla cartella in cui è stato scaricato il file xlsx di esempio e selezionarlo. Nella finestra di dialogo Strumento di navigazione selezionare Foglio1 e quindi Modifica.

Immagine della schermata

Power BI convertirà i timestamp nella prima colonna in un tipo di dati Date/Time. Questi timestamp devono essere convertiti in testo per poter essere inviati al API Rilevamento anomalie. Se l'editor di Power Query non viene aperto automaticamente, selezionare Modifica query nella scheda home.

Selezionare la scheda Transform nell'Editor di Power Query. Nel gruppo Qualsiasi colonna aprire l'elenco a discesa Tipo di dati e selezionare Testo.

Immagine dell'elenco a discesa del tipo di dati

Quando si riceve un avviso sulla modifica del tipo di colonna, selezionare Sostituisci corrente. Quindi selezionare Chiudi e applica o su Applica nella scheda Home della barra multifunzione.

Creare una funzione per inviare i dati e formattare la risposta

Per formattare e inviare il file di dati al API Rilevamento anomalie, è possibile richiamare una query sulla tabella creata in precedenza. Nella scheda Home sulla barra multifunzione dell'editor di Power Query aprire il menu a discesa Nuova origine e selezionare Query vuota.

Assicurarsi che la nuova query sia selezionata, quindi selezionare Editor avanzato.

 Immagine della schermata

All'interno del Editor avanzato usare il frammento di codice M Power Query seguente per estrarre le colonne dalla tabella e inviarle all'API. La query creerà quindi una tabella dalla risposta JSON e la restituirà. Sostituire la variabile apiKey con la chiave valida dell'API Anomaly Detector e endpoint con l'endpoint. Dopo aver immesso la query nel Editor avanzato, selezionare Done.

(table as table) => let

    apikey      = "[Placeholder: Your Anomaly Detector resource access key]",
    endpoint    = "[Placeholder: Your Anomaly Detector resource endpoint]/anomalydetector/v1.0/timeseries/entire/detect",
    inputTable = Table.TransformColumnTypes(table,{{"Timestamp", type text},{"Value", type number}}),
    jsontext    = Text.FromBinary(Json.FromValue(inputTable)),
    jsonbody    = "{ ""Granularity"": ""daily"", ""Sensitivity"": 95, ""Series"": "& jsontext &" }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Content-Type" = "application/json", #"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody, ManualStatusHandling={400}]),
    jsonresp    = Json.Document(bytesresp),

    respTable = Table.FromColumns({

                     Table.Column(inputTable, "Timestamp")
                     ,Table.Column(inputTable, "Value")
                     , Record.Field(jsonresp, "IsAnomaly") as list
                     , Record.Field(jsonresp, "ExpectedValues") as list
                     , Record.Field(jsonresp, "UpperMargins")as list
                     , Record.Field(jsonresp, "LowerMargins") as list
                     , Record.Field(jsonresp, "IsPositiveAnomaly") as list
                     , Record.Field(jsonresp, "IsNegativeAnomaly") as list

                  }, {"Timestamp", "Value", "IsAnomaly", "ExpectedValues", "UpperMargin", "LowerMargin", "IsPositiveAnomaly", "IsNegativeAnomaly"}
               ),

    respTable1 = Table.AddColumn(respTable , "UpperMargins", (row) => row[ExpectedValues] + row[UpperMargin]),
    respTable2 = Table.AddColumn(respTable1 , "LowerMargins", (row) => row[ExpectedValues] -  row[LowerMargin]),
    respTable3 = Table.RemoveColumns(respTable2, "UpperMargin"),
    respTable4 = Table.RemoveColumns(respTable3, "LowerMargin"),

    results = Table.TransformColumnTypes(

                respTable4,
                {{"Timestamp", type datetime}, {"Value", type number}, {"IsAnomaly", type logical}, {"IsPositiveAnomaly", type logical}, {"IsNegativeAnomaly", type logical},
                 {"ExpectedValues", type number}, {"UpperMargins", type number}, {"LowerMargins", type number}}
              )

 in results

Richiamare la query nel foglio dati selezionando Sheet1 sotto Immettere un parametro, quindi selezionare Richiama.

Immagine della funzione Richiama

Importante

Al termine, ricordarsi di rimuovere la chiave dal codice e non renderlo mai pubblico. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali, ad esempio Azure Key Vault. Per altre informazioni, vedere l'articolo Servizi di Azure AI security.

Privacy e autenticazione dell'origine dati

Note

È importante conoscere i criteri dell'organizzazione a livello di privacy e accesso ai dati. Per altre informazioni, vedere Power BI Livelli di privacy del desktop.

Quando si prova a eseguire la query si potrebbe ricevere un messaggio di avviso, poiché utilizza un'origine dati esterna.

 Immagine che mostra un avviso creato da Power BI

Per risolvere il problema, selezionare File e quindi Opzioni e impostazioni. Selezionare quindi Opzioni. In File corrente selezionare Privacy e Ignora i livelli di privacy per un potenziale miglioramento delle prestazioni.

Si potrebbe anche ricevere un messaggio che chiede di specificare in che modo ci si vuole connettere all'API.

Immagine che mostra una richiesta di specificare le credenziali di accesso

Per risolvere il problema, selezionare Modifica credenziali nel messaggio. Nella finestra di dialogo visualizzata selezionare Anonimo per connettersi alll'API in modalità anonima. Selezionare Connetti.

Quindi selezionare Chiudi e applica nella scheda Home della barra multifunzione per applicare le modifiche.

Visualizza la risposta dell'API Anomaly Detector

Nella schermata principale Power BI iniziare a usare le query create in precedenza per visualizzare i dati. Prima di tutto selezionare Grafico a linee in Visualizzazioni. Quindi aggiungere il timestamp della funzione richiamata all'Asse del grafico a linee. Fare clic su di esso con il pulsante destro del mouse e scegliere Timestamp.

Fare clic con il pulsante destro del mouse sul valore Timestamp

Aggiungere i campi seguenti da Richiamata funzione al campo Valori del grafico. Usare lo screenshot seguente come aiuto per creare il grafico.

  • valore
  • UpperMargins
  • LowerMargins
  • Valori Attesi

Immagine delle impostazioni del grafico

Dopo aver aggiunto i campi, selezionare il grafico e ridimensionarlo per mostrare tutti i punti dati. Il grafico avrà un aspetto simile a quello dello screenshot seguente:

Immagine della visualizzazione del grafico

Visualizzare i punti dati delle anomalie

Sul lato destro della finestra Power BI, sotto il riquadro FIELDS fare clic con il pulsante destro del mouse su Value nella query della funzione Invoked Function e selezionare Nuova misura rapida.

Immagine della nuova schermata di misura rapida

Nella schermata visualizzata selezionare Valore filtrato come calcolo. Impostare Valore di base su Sum of Value. Quindi trascinare IsAnomaly dai campi Richiamata funzione al campo Filtro. Selezionare True dall'elenco a discesa Filtro.

Seconda immagine della nuova schermata di misura rapida

Dopo aver selezionato OK si vedrà un campo Value for True in fondo all'elenco dei campi. Fare clic su di esso con il pulsante destro del mouse e rinominarlo in Anomalia. Aggiungerlo all'asse Valori del grafico. Quindi selezionare lo strumento Formato e impostare il tipo di asse delle X su Categorie.

Immagine dell'asse x del formato

Applicare i colori al grafico selezionando lo strumento Formato e Colori dati. Il grafico dovrebbe essere simile al seguente:

Immagine del grafico finale