Compartir a través de


Tutorial: Visualización de anomalías con detección por lotes y Power BI (univariante)

Importante

A partir del 20 de septiembre de 2023, no podrá crear nuevos recursos de Anomaly Detector. El servicio Anomaly Detector se va a retirar el 1 de octubre de 2026.

Use este tutorial para detectar anomalías dentro de un conjunto de datos de serie temporal como un lote. Con Power BI Desktop, puede tomar un archivo de Excel, preparar los datos para Anomaly Detector API y visualizar las anomalías estadísticas del archivo.

En este tutorial, aprenderá a:

  • Usar Power BI Desktop para importar y transformar un conjunto de datos de serie temporal
  • Integrar Power BI Desktop con Anomaly Detector API para la detección de anomalías por lotes
  • Visualizar las anomalías que se encuentran en los datos, incluidos los valores esperados y vistos, y los límites de la detección de anomalías.

Requisitos previos

  • Una suscripción de Azure
  • Microsoft Power BI Desktop, disponible de forma gratuita.
  • Un archivo de Excel (.xlsx) que contenga los puntos de datos de la serie temporal.
  • Cuando tenga la suscripción de Azure, cree un recurso de Anomaly Detector en Azure Portal para obtener la clave y el punto de conexión.
    • Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a Anomaly Detector API. Lo hará más adelante en el inicio rápido.

Nota

Para obtener mejores resultados cuando utilice la API Anomaly Detector, sus datos de series temporales con formato JSON deben incluir:

  • puntos de datos separados por el mismo intervalo, sin que falte más del 10 % del número esperado de puntos.
  • al menos 12 puntos de datos si sus datos no tienen un patrón estacional claro.
  • por lo menos cuatro ocurrencias de patrones si los datos tienen un patrón estacional claro.

Carga y formato de los datos de la serie temporal

Para empezar, abra Power BI Desktop y cargue los datos de la serie temporal que descargó en los requisitos previos. Este archivo de Excel contiene una serie de pares de marca de tiempo y valor de hora universal coordinada (UTC).

Nota

Power BI puede usar datos de una amplia variedad de orígenes como archivos .csv, bases de datos SQL, Azure Blob Storage, etc.

En la ventana principal de Power BI Desktop, seleccione la cinta de opciones Inicio. En el grupo Datos externos de la cinta de opciones, abra el menú desplegable Obtener datos y seleccione Excel.

Una imagen del botón

Después de que aparezca el cuadro de diálogo, vaya a la carpeta donde descargó el archivo .xlsx de ejemplo y selecciónelo. Una vez que aparezca el cuadro de diálogo Navegador, seleccione Hoja1 y, a continuación, Editar.

Una imagen de la pantalla

Power BI convertirá las marcas de tiempo de la primera columna en un tipo de datos Date/Time. Estas marcas de tiempo se deben convertir a texto antes de enviarse a Anomaly Detector API. Si el editor de Power Query no se abre automáticamente, seleccione Editar consultas en la pestaña Inicio.

Seleccione la pestaña Transformar de la cinta de opciones del Editor de Power Query. En el grupo Cualquier columna, abra el menú desplegable Tipo de datos: y seleccione Texto.

Imagen de la lista desplegable de tipos de datos

Si recibe un aviso sobre el cambio de tipo de columna, seleccione Sustituir la actual. Después, seleccione Cerrar y aplicar o Aplicar en la cinta de opciones Inicio.

Creación de una función para enviar los datos y dar formato a la respuesta

Para dar formato y enviar el archivo de datos a Anomaly Detector API, puede invocar una consulta en la tabla que creó anteriormente. En el Editor de Power Query, en la pestaña Inicio de la cinta de opciones, abra el menú desplegable Nuevo origen y seleccione Consulta en blanco.

Asegúrese de que está seleccionada la nueva consulta y, a continuación, seleccione Editor avanzado.

Imagen de la pantalla

En el Editor avanzado, use el siguiente fragmento de Power Query M para extraer las columnas de la tabla y enviarlas a la API. Después, la consulta creará una tabla a partir de la respuesta JSON y la devolverá. Reemplace la variable apiKey por la clave de Anomaly Detector API y endpoint por el punto de conexión. Después de haber especificado la consulta en el Editor avanzado, seleccione Listo.

(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

Invoque la consulta en la hoja de datos seleccionando Sheet1 debajo de Escribir parámetro y seleccione Invocar.

Imagen de la función de invocación

Importante

Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Consulte el artículo Seguridad de servicios de Azure AI para más información.

Privacidad y autenticación en el origen de datos

Nota

Conozca las directivas de la organización sobre la privacidad y el acceso a datos. Consulte los niveles de privacidad de Power BI Desktop para más información.

Es posible que reciba un mensaje de advertencia cuando intente ejecutar la consulta ya que usa un origen de datos externo.

Una imagen que muestra una advertencia creada por Power BI

Para solucionar este problema, seleccione Archivo y Opciones y configuración. Después, seleccione Opciones . A continuación, en Archivo actual, seleccione Privacidad e Ignorar los niveles de privacidad y mejorar el rendimiento potencialmente.

Además, puede recibir un mensaje que le pide que especifique cómo desea conectarse a la API.

Una imagen que muestra una solicitud para especificar las credenciales de acceso

Para solucionar este problema, seleccione Editar credenciales en el mensaje. Después de que aparezca el cuadro de diálogo, seleccione Anónimo para conectarse a la API de forma anónima. A continuación, seleccione Conectar.

Después, seleccione Cerrar y aplicar en la cinta de opciones Inicio para aplicar los cambios.

Visualización de la respuesta de Anomaly Detector API

En la pantalla principal de Power BI, empiece a usar las consultas que creó anteriormente para visualizar los datos. Primero, seleccione Gráfico de líneas en Visualizaciones. A continuación, agregue la marca de tiempo desde la función invocada al eje del gráfico de líneas. Haga clic con el botón derecho en él y seleccione Marca de tiempo.

Hacer clic con el botón derecho en el valor de marca de tiempo

Agregue los siguientes campos desde Función invocada al campo Valores del gráfico. Use la siguiente captura de pantalla para ayudar a crear el gráfico.

  • Value
  • UpperMargins
  • LowerMargins
  • ExpectedValues

Imagen de la configuración de gráficos

Después de agregar los campos, seleccione el gráfico y cambie su tamaño para que aparezcan todos los puntos de datos. El gráfico tendrá un aspecto similar al de la siguiente captura de pantalla:

Imagen de la visualización de gráficos

Visualización de puntos de datos de anomalías

En el lado derecho de la ventana de Power BI, bajo el panel CAMPOS, haga clic con el botón derecho en Valor en la consulta de Función invocada y seleccione Nueva medida rápida.

Una imagen de la nueva pantalla de medida rápida

En la pantalla que aparece, seleccione Valor filtrado como cálculo. Establezca Valor base en Sum of Value. A continuación, arrastre IsAnomaly desde los campos de Función invocada a Filtro. Seleccione True en el menú desplegable Filtro.

Imagen de la nueva pantalla de medida rápida

Después de seleccionar Aceptar, tendrá un campo Value for True, en la parte inferior de la lista de los campos. Haga clic con el botón derecho en ella y cambie su nombre a Anomalías. Agréguela a los valores del gráfico. A continuación, seleccione la herramienta Formato y establezca el tipo de eje X en Categórico.

Imagen del formato del eje x

Aplique colores al gráfico seleccionando la herramienta Formato y Colores de datos. El gráfico debe tener un aspecto parecido al siguiente:

Imagen del gráfico final