En mi anterior entrada del blog os conté como afrontar escenarios Near Real-Time. En esta entrada vamos a contaros acerca de los escenarios Real-Time (RT) donde, a diferencia de los primeros, la latencia desde que ocurre un determinado evento hasta que se convierte en información, debe ser lo más cercana a cero segundos.

Problema a resolver:

Tenemos un negocio de ventas on-line por Internet y necesitamos monitorizar en tiempo real el estado de los stocks de los productos que vendemos. Esto es crítico ya que una rotura del stock de un artículo provocará la pérdida de ventas y además, el cliente se lo comprará a nuestra competencia. Adicionalmente necesitamos que cuando un artículo se quede sin stock, se avise automáticamente al departamento responsable de su gestión.

Diseño de la solución:

Vamos a solucionar nuestro problema con ayuda de la funcionalidad Real-time streaming del servicio de Power BI y de Flow para ejecutar workflows:

La parte de generación de datos en tiempo real, la hemos simulado haciendo uso de un script Javascript que genera datos aleatorios. A continuación, vamos a hacer uso de Power BI REST API para conectar estos datos a un Streaming dataset del servicio de Power BI. Finalmente generaremos un data alert cuando un producto se quede sin stock y con Flow se generará y enviará un mail automáticamente alertando de la situación.

Implementación de la solución

En este apartado os vamos a explicar paso a paso cómo implementar la solución que serían estos:

  1. Crear el script que genere datos ficticios de compras: fecha y hora del evento, producto y stock disponible tras la compra.
  2. Crear el Streaming dataset en Power BI y conectarle los datos que se generan en el paso anterior.
  3. Diseñar un dashboard para monitorización en tiempo real.
  4. Data Alert para cuando el stock sea cero.
  5. Creación del workflow con Flow para que envíe el email.

1) Generación de datos

Para simplificar este paso, hemos simulado el streaming de datos con una función javascript que genera datos aleatorios cada 2 segundos y, a posteriori, los envía encapsulados en un objeto JSON por AJAX a la URL que nos asigne Power BI en el siguiente punto. No vamos a entrar en detalle en este punto, simplemente adjuntamos el código comentado para que lo podáis ver y probar.

2) Crear el Streaming dataset

Vamos a crear el streaming dataset con el mismo formato y las variables con el mismo nombre que va a recibir Power BI desde el script que hemos creado en el paso anterior.

Elegimos la API para enviarle los datos en streaming a Power BI:

Y definimos el formato del dataset. En este paso es necesario marcar la opción de «Historic data analysis» ya que lo vamos a necesitar después. Cuando marcamos esta opción Power BI almacena en una base de datos interna los datos que recibe en streaming para poder posteriormente elaborar reports y hacer uso de Data Alerts. La url que nos proporciona Power BI, la pegaremos en nuestro script del paso 1 para poder enviarle los datos que generamos en streaming:

 

3) Generar el Real-Time Dashboard

En este apartado vamos a generar un Dashboard para ver de un modo visual como van variando los stocks de los productos. Creamos uno nuevo, añadimos un tile y seleccionamos como origen REAL-TIME DATA:

Elegimos en el siguiente paso el streaming dataset que hemos creado anteriormente:

Y por último elegimos el tipo de gráfico y las variables que queremos visualizar. No hay demasiados tipos de visualización pero resultan más que suficientes para analizar los datos. En la siguiente imagen tenéis un ejemplo con los diferentes tipos. Al acceder al dashboard podremos ver como los gráficos van cambiando en tiempo real:

4) Data Alert cuando el stock sea 0

El dashboard visualmente es muy atractivo sin embargo le falta lo más importante, que es desencadenar automáticamente una acción cuando el stock de un producto llegue a cero. Para conseguirlo vamos a hacer uso de la funcionalidad data alerts la cual exige que tengamos una licencia Pro. Otra limitación importante a tener en cuenta es que sólo podemos crear data alerts desde un dashboard que contenga KPI, cards o gauges procedentes de un report. Es justo aquí donde si no hemos activado la opción Historic data analysis del punto 2, no podremos crear data alerts.

Vamos a crear el report desde nuestro streaming dataset:

Hemos creado un report donde utilizamos la visualización de KPI para mostrar el último stock que nos ha llegado para cada producto. Sólo funcionan los campos de tipo texto para poder filtrar, es por esto que hemos tenido que convertir la fecha a número entero y después a string. No podemos cambiar nada del dataset ni tampoco añadir métricas personalizadas con DAX, afortunadamente los gráficos de Power BI nos permiten hacer cálculos personalizados haciendo uso de los filtros. En la siguiente imagen se puede observar la configuración del kpi para que nos muestre el último stock de cada producto:

Para poder crear un data alert, tenemos que llevar las visualizaciones de KPI a un dashboard nuevo:

Una vez ya tenemos las tarjetas de tipo KPI en el dashboard nuevo, ya podemos crear las data alerts:

En el momento de creación de este blog existe una limitación y es que sólo podemos ser avisados como máximo una vez cada hora. Hemos creado una alerta para que salte cuando el stock del producto 1 se quede en cero unidades:

 

5) Crear el workflow con Flow

Ahora necesitamos que cuando se dispare la alerta en Power BI se envíe un email automáticamente. Para ello vamos a utilizar Flow ya que desde Power BI te sugiere utilizar esta herramienta:

Flow ya detecta automáticamente la alerta que hemos creado y a continuación añadimos la acción de enviar un mail

 

Y tras llegar a cero el stock del producto 1 hemos recibido, por un lado, un email de Power BI avisando de la alerta y, por otro, el mail desde Flow:

Conclusión:

Hemos podido comprobar la sencillez con la que hemos podido conectar un streaming de datos en tiempo real con Power BI. Resulta realmente llamativa la monitorización del flujo de datos con un Dashboard y destaca la facilidad de crear un workflow sin escribir ni una sola línea de código.

Todo esto visto desde el punto de vista tecnológico resulta fascinante, pero también lo es desde el punto de vista estratégico de las empresas que quieren transformar digitalmente sus empresas. En este blog estamos explicando como transformar digitalmente un proceso de negocio con ayuda de Power BI y Flow consiguiendo que sea más eficiente y eficaz. Aprovecho la conclusión para hacer hincapié en la importancia de hacer uso de la tecnología para optimizar procesos de negocio críticos. Personalmente lo entiendo como una oportunidad de prosperar para las empresas, no significa que tengamos que prescindir de personas sino que las personas pueden y deben hacer cosas que aporten más valor a estas. En nuestro caso de uso de esta entrada, aportaría mucho más valor a nuestro negocio si las personas que tenemos asignadas a gestión de stocks se dedicasen a otras tareas como por ejemplo de optimización de almacén.

Enlaces de interés:

https://docs.microsoft.com/en-us/power-bi/service-real-time-streaming

https://docs.microsoft.com/en-us/power-bi/service-flow-integration

Manuel Mas