De Oyente a Protagonista: un Plan para Sacarle el Jugo a #SJODigital2025

De Oyente a Protagonista: un Plan para Sacarle el Jugo a #SJODigital2025

Photo by Tima Miroshnichenko on Pexels.com

En febrero de 2024, las comunidades de datos centroamericanas atendimos el llamado de nuestros amigos en Nicaragua e iniciamos un evento cuyo fin es llevar conocimiento a nuestra región, impulsar el intercambio de ideas, la colaboración y el crecimiento en el ámbito digital. Un evento que brindara una experiencia de transformación digital a nuestros países, y así lo hicimos en Managua, Nicaragua.

Este año, nuestro país, Costa Rica, será la sede de la segunda edición de la Jornada, y estamos entusiasmados de poder tener esta celebración a muy pocos días: #SJODigital2025, un evento que se llevará a cabo del 15 al 17 de mayo del 2025.

Y es que siempre asistir a un evento, para quienes disfrutamos del aprendizaje continuo, es una gran oportunidad: conocer y compartir con personas, fortalecer conocimientos, captar nuevas ideas, aprender a resolver situaciones, descubrir herramientas y tendencias del mercado, usualmente acompañadas por casos de uso reales que los oradores muy amablemente comparten con el público.

Asistir a un evento, ya sea virtual o presencial, implica invertir algo muy valioso: nuestro tiempo. Siempre requiere un esfuerzo, pero en el caso de los eventos presenciales, ese esfuerzo suele ser mayor: hay que elegir la vestimenta, cubrir gastos de traslado, alimentación, así como resolver aspectos logísticos. Sin embargo, más allá de lo práctico, muchas veces no somos del todo conscientes del costo real de estar allí presentes: dejar de trabajar, sacrificar tiempo libre, familiar o de descanso. Aun así, elegimos hacerlo porque entendemos que vale la pena: asistimos para “afilar el hacha”, mantenernos actualizados, invertir en nuestro desarrollo profesional y tomar mejores decisiones en el día a día. En un campo como la tecnología, donde el cambio es constante, sabemos que aprender no es opcional, sino una necesidad diaria.

Entonces, mientras estamos en un evento, vale la pena preguntarnos: ¿realmente lo estamos aprovechando? ¿Qué tanta atención le estamos prestando a lo que sucede frente a nosotros? Al contenido, al mensaje, a quien nos comparte una idea, una solución, una herramienta, a ese sinfín de conocimientos que hoy están al alcance gracias a la posibilidad de asistir.

¿Le ha pasado que está en una charla y, de pronto, siente la necesidad de revisar el celular porque vibró o apareció una notificación? Lo toma, ve de qué se trata, piensa un momento en eso, y sin darse cuenta empieza a divagar. Cuando intenta volver a concentrarse, ya ha perdido el hilo de lo que estaba pasando. ¿Será que realmente podemos hacer varias cosas a la vez? La verdad es que no. Somos monotarea.

¿Y qué podemos hacer para retener mejor el mensaje?

  • Tome nota: haz un resumen, un mapa mental o conceptual.
  • Pida la presentación: a veces se pierde tiempo tomando fotos o anotando textualmente lo que se muestra. Si te pueden compartir el material, te podés enfocar en escuchar.
  • Minimizá los distractores: guarda el celular en el bolso o colócalo en modo avión. Al terminar la sesión, ya tendrás tiempo para revisarlo.

¿Importa dónde me siento?
¡Sí! Cuanto más adelante te ubiques, mayor será tu nivel de atención. Sentarse atrás trae más distracciones (y más chance de conversar con alguien que no vino con el mismo objetivo 😅).

Recuerda que estás compartiendo el espacio con personas que, probablemente, comparten tus valores, pasiones o intereses. ¡Conecta con ellas! Intercambia contactos, pedí su LinkedIn o WhatsApp. Generar vínculos también es parte de la experiencia; cultivar relaciones genuinas en estos espacios puede abrir puertas inesperadas.

¿Y después del evento?

¿Qué haces con lo que aprendiste? ¿Con tus notas? ¿Cómo lo incorporas?
Dicen que “los dedos tienen buena memoria”, y es muy cierto. Deja pasar un par de días y luego escribí lo que aprendiste sin ver tus notas.

Por ejemplo:

"En SJODigital tuve la oportunidad de asistir a varios espacios muy enriquecedores. Comencé con el taller de Journey Mapping, donde aprendí a mapear el recorrido del cliente en procesos de transformación digital. También participé en una charla sobre cómo integrar Power BI con el lenguaje R, lo cual abre nuevas posibilidades analíticas.

Exploré estrategias para el éxito empresarial y conocí una solución de automatización inteligente de procesos que podría adaptarse muy bien a nuestra organización. Asistí a una charla sobre los desafíos y realidades de la inteligencia artificial, que nos invitó a reflexionar sobre cómo aprovecharla desde nuestras propias realidades.

Otra sesión que me pareció especialmente valiosa fue sobre cómo transformar los documentos que usamos a diario en decisiones inteligentes. Dado el volumen de documentos que generamos, podríamos estar dejando pasar oportunidades importantes. Finalmente, participé en una charla sobre innovación visual, donde comprendí cómo potenciar el impacto de los objetos visuales nativos de Power BI y transformarlos de forma dinámica para mejorar la interacción del usuario con los datos de nuestra organización.

(Por cierto, todos estos temas sí estarán en el evento 😉)

Ese ejercicio de repaso te ayuda a identificar qué realmente se te quedó. Luego preguntate:

  • ¿Cómo puedo aplicar esto en mi día a día?
    Si no se aplica, se olvida.
  • ¿Sientes que no tienes a quién enseñárselo?
    Escríbalo en su blog, en un post, o hasta en su cuaderno. Enseñar es la mejor forma de aprender. Si lo enseñas, lo incorporas.

Asistir a un evento es una inversión. Pero si solo vas, prestas atención y no aplicas nada, o no conoces a nadie, no hablas con nadie aparte de tu grupo, te estás perdiendo gran parte de la experiencia.

¿Te quedaron dudas en una charla? ¿No hubo oportunidad de preguntar?
Conoce a los ponentes: búscalos durante el evento o escríbeles por redes sociales. La mayoría suele compartir sus datos de contacto durante la presentación. No te quedes con la espina: tanto los ponentes nacionales como los internacionales estarán encantados de conocer tus inquietudes. A veces, el tiempo durante la charla no alcanza para responder todas las preguntas.

Bonus: ¡Sacá la foto!

El selfie está bien, ¡es magnífico! Pero más importante que eso es todo el conocimiento que te llevás. Lo que sucede después puede convertirse en una cadena de eventos afortunados.

Participar activamente en un evento no es casualidad, es un acto de intencionalidad:
invertir tiempo hoy para crecer mañana.

¿Le ha pasado algo parecido? Cuéntame en los comentarios qué estrategias utilizas para sacar el máximo provecho de un evento o si alguna vez sentiste que podrías haber hecho algo diferente.

Descubriendo las Experiencias y Artefactos en Microsoft Fabric

Descubriendo las Experiencias y Artefactos en Microsoft Fabric

Photo by Mikhail Nilov on Pexels.com

Microsoft Fabric es una solución integral que ah llegado para simplificar el trabajo con datos y analítica en la nube. Se trata de una plataforma basada en Software como servicio (SaaS) que une tanto componentes nuevos como ya conocidos, tales como Power BI, Azure Synapse y Azure Data Factory, pero ahora en un entorno totalmente integrado.

En esta publicación, el objetivo es familiarizarse con los términos más importantes que se utilizan en el entorno de Fabric, ya que comprenderlos es clave para aprovechar todo lo que esta plataforma tiene para ofrecer. Para facilitar este proceso, se ah recopilado una serie de términos que servirá como punto de partida antes de profundizar en su funcionamiento.

Conceptos Generales:

  • Capacidad: Se refiere al conjunto de recursos disponibles para ser utilizados en un momento determinado. Esto se mide mediante los SKU, que definen los niveles de memoria y capacidad de cómputo asignados. Por ejemplo, puede variar desde un mínimo de tipo F2, que posee 2 unidades de capacidad y 0.25 v-cores, hasta un SKU de tipo F2048, que cuenta con 2048 unidades de capacidad y 256 v-cores.
  • Experiencia: Es un conjunto de funcionalidades diseñadas para una tarea específica. Algunos ejemplos dentro de Fabric son Synapse Data Warehouse, Synapse Ingeniería de Datos, Synapse Ciencia de Datos, Synapse Real-Time Analytics, Data Factory y Power BI.
  • Artefactos: Son las funcionalidades que se pueden agregar dentro de una experiencia. Los usuarios pueden crear, editar o eliminar estos elementos, que incluyen, por ejemplo, Canalizaciones (Data Pipelines), Cuadernos (Notebooks), Flujos de datos Gen2 (Dataflows Gen2), Informes (Reports), entre otros.
  • Inquilino (Tenant): Es la instancia de Fabric que se asigna a una organización.
  • Área de trabajo (Workspace): Es un espacio colaborativo donde se agrupan diferentes elementos que facilitan la colaboración entre equipos. Funciona como un contenedor que reúne varias funcionalidades.
  • Dominios: Sirven para agrupar los datos de una organización de manera lógica. Por ejemplo, se pueden organizar por departamentos. Las áreas de trabajo se vinculan a dominios para que sus elementos pertenezcan al mismo. Además, se pueden crear subdominios y asignar roles como Administrador de Dominio y Colaborador de Dominio.

Las Experiencias en Microsoft Fabric

Las experiencias en Fabric desempeñan un papel fundamental, ya que a partir de ellas es posible crear artefactos y organizarlos en las áreas de trabajo. A continuación, se describen las principales experiencias junto con algunos de sus artefactos más destacados:

Ingeniería de Datos (Data Engineering)

Proporciona una plataforma Spark con experiencias de creación que permiten a los ingenieros de datos realizar transformaciones de datos a gran escala y democratizar los datos a través de almacenes o lagos de datos. Se puede integrar con Data Factory para programar y orquestar cuadernos de trabajo. Elementos destacados:

  • Almacén de Lago (Lakehouse): Almacena big data para procesos de limpieza, consultas, reportes y para compartir datos. Permite el almacenamiento de datos estructurados y no estructurados en una misma ubicación.
  • Cuaderno (Notebook): Facilita el desarrollo de trabajos Spark y experimentos de Machine Learning. Los lenguajes soportados incluyen PySpark (Python), Spark (Scala), Spark SQL y Spark R.
  • Definición de Trabajo Spark (Spark Job Definition): Permite enviar trabajos a clústeres Spark, además de definir, programar y gestionar trabajos para el procesamiento de big data.

Data Factory

Es una experiencia que combina la simplicidad de Power Query con la potencia de Azure Data Factory. Ofrece más de 200 conectores nativos para conectar con orígenes de datos tanto locales como en la nube. Elementos destacados:

  • Canalizaciones (Data Pipeline): Orquesta las tareas de ingestión y transformación de datos.
  • Flujo de Datos (Dataflow Gen2): Permite preparar, limpiar y transformar datos en un flujo interno o almacenamiento temporal, al cual se puede acceder mediante un conector de tipo Dataflow.

Data Warehouse

Es una experiencia que ofrece un rendimiento y escalabilidad SQL excepcionales. Separa el procesamiento del almacenamiento, lo que permite escalar de manera independiente.

  • Bodega de Datos (Warehouse): Proporciona almacenamiento transaccional compatible con DDL y DML. Soporta métodos de ingestión como COPY INTO, Pipelines, Dataflows o consultas como CREATE TABLE AS SELECT, INSERT o SELECT INTO.

Power BI

Plataforma líder de inteligencia de negocios que garantiza un acceso rápido e intuitivo a los datos de Fabric para la toma de decisiones dentro de la organización.

  • Reporte (Report): Crea informes interactivos para presentar los datos.
  • Reporte Paginado (Paginated Report): Permite el despliegue tabular de datos en un informe, facilitando la impresión y la descarga.
  • Tarjeta de Puntuación (Scorecard): Define, rastrea y comparte métricas clave para la organización. También ayuda a establecer objetivos y dar seguimiento al desempeño del negocio.
  • Panel de Control (Dashboard): Construye una página que cuenta una historia de datos a través de visualizaciones.
  • Almácén de Datos (Datamart) (preview): Solución analítica de autoservicio que permite a los usuarios almacenar y explorar datos cargados en una base de datos completamente gestionada, enfocada en el negocio o en datos departamentales.

Análisis en Tiempo Real (Real Time Analytics)

Se refiere a datos de observación recopilados de diversos orígenes como dispositivos IoT e interacciones humanas. Estos datos pueden ser semiestructurados, como JSON o textos, y suelen llegar en gran volumen.

  • KQL Database: Herramienta de integración que permite gestión y análisis de datos para análisis en tiempo real.
  • KQL Queryset: Permite ejecutar consultas y vistas sobre bases de datos KQL utilizando Kusto Query Language, y también soporta algunas funciones SQL.
  • Eventhouse (preview): Gestiona múltiples bases de datos simultáneamente, compartiendo capacidad y recursos para optimizar el rendimiento y los costos.
  • Eventstream: Función centralizada que captura, transforma y enruta eventos en tiempo real hacia diversos destinos sin requerir código. Se integra con Azure Event Hubs, bases de datos KQL y Lakehouses.

Ciencia de Datos (Data Science)

Es una experiencia que permite crear, implementar y poner en marcha modelos de aprendizaje automático. Se integra con Azure Machine Learning para proporcionar un registro de modelos y seguimiento de experimentos de forma integrada. Los científicos de datos pueden enriquecer los datos con predicciones que se agregarán a los informes de Power BI, proporcionando un enfoque que va de la descriptiva a la predictiva.

  • Modelo ML (ML Model): Utiliza modelos de Machine Learning para predecir resultados y detectar anomalías en los datos.
  • Experimento (Experiment): Permite crear, ejecutar y realizar un seguimiento del desarrollo de múltiples modelos para validar hipótesis.
  • Cuaderno (Notebook): Facilita la exploración de datos y la construcción de soluciones de Machine Learning utilizando aplicaciones de Apache Spark.

Data Activator

Es una experiencia sin código que permite realizar acciones automáticamente cuando se detectan patrones o condiciones cambiantes en los datos.

  • Reflex (Preview): Monitorea datos en Power BI y Eventstream. Cuando los datos cumplen ciertos umbrales o coinciden con patrones específicos, toma automáticamente acciones como enviar alertas o iniciar flujos de trabajo en Power Automate.

Soluciones de Industria (Industry Solutions)

Fabric ofrece soluciones de datos específicas de sector que proporcionan una plataforma para la administración de datos, análisis y toma de decisiones.

  • Sostenibilidad (Sustainability Solutions): Facilitan la ingesta, estandarización y análisis de datos ambientales, sociales y de gobernanza.
  • Comercio Minoristas (Retail Solutions): Ayudan a gestionar grandes volúmenes de datos, integrar información de diversas fuentes y proporcionar análisis en tiempo real. Los minoristas pueden utilizar estas soluciones para optimizar inventarios, segmentar clientes, prever ventas, establecer precios dinámicos y detectar fraudes.
  • Salud (Healthcare Solutions): Están diseñadas para acelerar el tiempo de creación de valor para los clientes, abordando la necesidad crítica de transformar datos relacionados con la salud de manera eficiente a un formato adecuado para el análisis.

Como se puede ver en la Figura No.1, al ingresar al sitio de Fabric, se pueden apreciar las experiencias descritas de la siguiente forma:

Figura 01: Pantalla de inicio del sitio de Microsoft Fabric, que muestra las diversas experiencias.

Para elegir entre los diferentes elementos descritos, se selecciona la experiencia que se desea trabajar, la cual ofrece artefactos específicos según el área. También es posible seleccionar un área de trabajo y agregar elementos según sea necesario, como se muestra en la Figura No. 2:

Figura 02: Visualización dentro de un área de trabajo para agregar elementos de Fabric.

Conclusiones

Se presenta una descripción de los conceptos relacionados con Fabric, que proporciona una base de conocimiento para facilitar a los lectores el inicio de su experiencia con la plataforma. A través de la práctica y la experimentación, los usuarios pueden descubrir las capacidades y beneficios que ofrece este entorno.

Existen diversas formas de organizar los artefactos de las experiencias en Fabric, ya sea creando dominios, subdominios, áreas de trabajo o carpetas. Es fundamental que la empresa defina una estrategia clara para la gobernanza de estos objetos. Asimismo, se recomienda establecer un estándar de nomenclatura para mejorar la organización de los proyectos corporativos.

Finalmente, es crucial resaltar la importancia de la capacitación en el proceso de adopción de nuevas tecnologías como Microsoft Fabric. Esto no solo maximiza su potencial, sino que también permite implementar medidas de seguridad adecuadas en el diseño de la arquitectura.

Bibliografía Consultada:

Escenarios “¿Qué pasaría sí…? en Power BI

Escenarios “¿Qué pasaría sí…? en Power BI

Photo by Ann H on Pexels.com

Los parámetros de tipo “¿Qué pasaría sí…?” permiten la creación de un parámetro que se usa para representar una variable. PBI crea automáticamente un visual de tipo “slicer” que permite ir modificando el valor para ver cómo se afecta algún cálculo que al interno lo vamos a enlazar con dicha variable.

Por ejemplo, imaginemos un informe de ventas que muestra los ingresos por región. Podría crear un parámetro para la tasa de crecimiento de ventas y mediante una medida en DAX, multiplicar el valor de Ventas Totales por la variable del crecimiento de la tasa, como se muestra en la siguiente figura:

La medida usada en el gráfico tiene la fórmula para multiplicar las Ventas Totales * % Pronóstico de Ventas:

PronosticoVentas=[VentasTotales] * 'PctPronosticoVentas'[PctPronosticoVentas Value]

Para la creación del parámetro:

  • Seleccione la pestaña de “Modelado
  • Escoja crear un “nuevo parámetro
  • En el tipo, seleccione “Numeric Range
  • Defina un nombre, el tipo de datos, el rango de valores mínimo y máximo para el parámetro, así como el valor de incremento. Por ejemplo, un parámetro para manejar un pronóstico de crecimiento podría variar entre 1 y 1.5, con incrementos de 0.05 para ver el movimiento.

Recuerde dejar marcado la opción de agregar el “slicer” para que se agregue de forma automática el visual en el informe.

Existe también los parámetros de tipo “Fields“. Estos parámetros son de un comportamiento más versátil que permiten agrupar medidas o campos, para crear una visual con un filtro más dinámico. Acá en la imagen se muestra donde se pueden crear:

En PBI, se va a crear una estructura con las medidas que se seleccionen, en este caso, se escogen 4 medidas:

Visualmente, se crea un “slicer” con las 4 opciones de medidas: Profit, CostoSumado, SalesAvg y TotalSales. También se creó otro grupo seleccionando fechas, marcando Año, cuarto y mes. Al agregarlo en un visual de tipo “matrix“, podríamos escoger ver la categoría de producto según la medida que seleccionamos (recuerda los diferentes formatos de cada medida), así como poder colocar en las columnas el parámetro que construimos con las fechas, y poder visualizar por año, cuarto o mes, de forma dinámica y según sea la necesidad del usuario final:

En conclusión, los parámetros de tipo “¿Qué pasaría sí…?“, permiten agregar dinamismo a los informes en PBI, son una buena manera de lograr:

  • Mejor toma de decisiones: creando y explorando escenarios hipotéticos para ayudar a comprender posibles resultados.
  • Gestión de riesgos: escenarios hipotéticos pueden ayudar a identificar riesgos potenciales y prepararse con estrategias, como tipos de cambios, recesiones económicas o cambios en la demanda por parte de los clientes.
  • Pronósticos: probar diferentes suposiciones y proyecciones para crear pronósticos más precisos y confiables para la organización, buscando comprenden el impacto que puede generar aumentos o disminuciones en las variables.
  • Comunicación y colaboración: al compartir escenarios dentro de la organización se puede facilitar la discusión y el debate entre los miembros de equipo, partes interesadas y responsables de la toma de decisiones, asegurando que todos estén en la misma página, en la misma línea de pensamiento en cuanto al análisis de los datos resultantes.
  • Versatilidad: brindar diferentes vistas de análisis de variables en un mismo visual le da agilidad al análisis que este realizando el usuario del proceso.

Acá puede buscar el informe llamado CrecimientoVentas_Escenarios.pbix que utiliza los conceptos descritos en esta publicación.

POWER BI: ¿Debo crear una columna calculada o una medida en DAX?

POWER BI: ¿Debo crear una columna calculada o una medida en DAX?

Photo by Keira Burton on Pexels.com

DAX es el lenguaje nativo de Power BI cuya naturaleza es funcional, lo que indica que cada expresión es una llamada a una función. Tiene la particularidad de que el contexto de evaluación de las consultas es como el corazón del funcionamiento de dicho lenguaje.

El contexto de evaluación puede hacer referencia al contexto del filtro o al contexto de la fila. El contexto de filtro se le llama al que filtra los datos, mientras que el contexto de la fila, es un contexto que itera la tabla. Es importante anotar que cuando DAX itera, no filtra la tabla. Por eso no son lo mismo.

Justo por esta razón, al iniciar a codificar código utilizando DAX en los informes de Power BI, resulta en ocasiones confuso si se debe utilizar una columna calculada o una medida. Si optamos por crear una columna calculada, esta se puede realizar de dos maneras, una es por medio del panel de Datos que se ubica a la izquierda de la aplicación de Power BI Desktop tal y como se muestra en la Figura No.1:

Figura 1: Crear una columna desde el panel de “Data”.

Otra forma de realizar la misma acción es desde el panel de “Fields” de la derecha, al seleccionar una tabla y darle clic derecho + “New column” como se visualiza en la Figura No.2:

Figura 2: Crear una columna calculada desde el panel de la derecha de “Fields”.

Por otra parte, cuando hablamos de medidas, estas son creadas desde el panel de “Fields” o “Campos” ubicado al lado derecho de la aplicación, y donde se habilita la opción de crear nuevas medidas tal y como se muestra en la Figura No.3:

Figura 3: Crear una medida desde el panel de la derecha de “Fields”.

Aunque parecen muy similares, la columna calculada se basa en datos cargados en el modelo. Aplica la fórmula individualmente a cada fila. Se evalúa en su definición y se almacena en el modelo (implica memoria RAM y espacio). La columna calculada aplica en un contexto de fila (en inglés llamado “Row Context”).

Por otro lado, una medida se calcula en el tiempo de consulta, es guardada como código fuente, pero se calcula solamente cuando se utiliza en el informe y aplica en contexto de filtro (en inglés llamado “Filter Context”).

En resumen, se podrían comparar de la siguiente forma:

Columna CalculadaMedida
Se almacena, ocupa espacioNo se almacena, solo el código fuente de la fórmula
Consume memoria RAMConsume CPU
Se calcula cuando se refresca el reporteSe calcula en tiempo de ejecución de la consulta
CONTEXTO:  ROW (fila por fila)CONTEXTO: Filtro
Tabla 1: Comparación entre columna calcula y medidas en DAX.

Por ejemplo, supóngase que tenemos la siguiente formula:

Sales[Quantity] * (Sales[Net Price] – Sales[Unit Cost])

¿Considera usted que puede ser usada como columna calculada, como medida o ambas?

Para responder la pregunta, véase la Figura No.4 donde es utilizada como una columna calculada de la tabla llamada “Sales”:

Figura 4: Codificando la columna calculada “Gross Margin” en POWER BI.

Sin embargo, si colocamos la misma fórmula en el código de una medida de “Sales” obtendremos la siguiente advertencia luego de codificarla, como se muestra a continuación en la Figura No.5:

Figura 5: Error al crear una medida.

En este caso, el código es el mismo que se utiliza para la columna calculada, sin embargo, lo que afecta en uno u otro cálculo es el contexto. En el caso de la columna calculada, mostrada en la Figura No.4, tiene un comportamiento predeterminado de contexto de fila, los datos de cada fila determinan su contexto. Por otro lado, la medida, correspondiente a la Figura No.5, no posee dicho contexto, no tiene visibilidad de las filas de los datos, por ende, genera el error que no puede determinar las columnas utilizadas en la fórmula. Es por este motivo que, para poder utilizarlas, se requiere de iteraciones y funciones que utilicen agregación, como por ejemplo SUMX entre otras.

Para finalizar, recuerde tener presente cuál es el objetivo del cálculo que desea agregar a su informe, para definir si requiere hacerlo fila por fila, o si es de tipo de agregación o iteración sobre todo el conjunto de datos, eso le ayudara de antemano a tener claro si usa una medida o una columna calculada.

Bibliografía

Russo, M., & Ferrari, A. (2020). The Definitive Guide to DAX. Pearson Education , Inc.

Azure Blob Storage: ¿Requiere hospedaje web de bajo costo? 

Azure Blob Storage: ¿Requiere hospedaje web de bajo costo? 

Photo by Monoar Rahman on Pexels.com

¿Le ha pasado que, en ocasiones amigos, clientes o familiares, lo llaman para consultarle que como hacen para “subir” una página en internet con el fin de poder dar a conocer ideas, proyectos o negocios?  ¿Está pensando en algún emprendimiento y necesita dar a conocer su negocio, pero no sin que sea un gasto mayor? 

Esta publicación se encuentra orientada justamente a responder esta inquietud de una manera muy práctica utilizando Azure Blog Storage como una carta mágica que puede resolver esta situación y con un bajo costo para los interesados. 

Blob Storage es un recurso de Azure que le permite almacenar cualquier tipo de datos tales como archivos de texto, audios, música, videos entre otros muchos más. 

Recuerde que, para poder realizar este ejercicio, requiere de acceso de una cuenta Azure o si no tiene una, existe la opción de crear una gratis que le ofrece Azure por 30 días con un saldo a favor de $200. 

A continuación, se van a desplegar una serie de pasos con las respectivas imágenes para poder guiar el proceso requerido.  Se recomienda la revisión de la publicación previa llamada “Visual Studio Code: diseñando páginas web“, donde se crean archivos de formato “html” que pueden servir como documentos de prueba para seguir el presente ejercicio.

  • Para iniciar este recorrido, primeramente, debe ingresar al portal de Azure. Una vez en la página principal, debe seleccionar la opción de “Create a resourcey digite para realizar la búsqueda el texto las palabras “blog storage”. Entre las opciones disponibles, seleccione “Storage account – blob, file, table, queue” y presione el botón de “Create”. 
Figura No.1: Crear almacenamiento del Storage Account. 
  • Para la creación del recurso en Azure, seleccione la subscripción en la cual planea crear la aplicación, así como el contenedor del grupo de recursos, o puede crear uno nuevo si así lo prefiere. También debe ingresar el nombre de la cuenta de almacenamiento y la localización geográfica. De momento la opción de “Performance” puede quedar predeterminada en “Standard”, lo cual significa que el almacenamiento se dará en discos magnéticos, que implican un costo más bajo al Premium, que son discos en estado sólido. El “Account kind” con valor predeterminando de “Storage V2”, indica que el almacenamiento provee acceso a todos los servicios de Azure de blobs, archivos, tablas, colas y discos. En cuanto a replicación, para este demo vamos a utilizar un esquema local para ahorrar costos por lo que seleccionamos “LRS”. El campo “Access tier”, corresponde a la frecuencia de acceso a los datos, en este ejemplo lo vamos a dejar predeterminado en “Hot”, que son de mayor frecuencia que si se marca “Cool”. Presione el botón de “Review + Create”. 
Figura No.2: Configuración de la cuenta para uso del almacenamiento. 
  • Se le desplegara la página de validación y si todo está correcto puede presionar el botón de “Create”. 
Figura No.3: Validación del recurso. 
  • Luego de crearlo, espere unos segundos para la finalización de la publicación del recurso. Una vez que aparezca la notificación, presione la opción de “Go to resource”. 
Figura No.4: Publicación completa.
  • La visualización del recurso de almacenamiento se verá de la siguiente manera. A este punto ya podría crear y almacenar datos en contenedores, tablas y colas, o creación de archivos compartidos.
Figura No.5: Cuenta de almacenamiento creada.
  • Sin embargo, a pesar de todas estas posibilidades, de momento nuestro objetivo se centra en el menú del lado izquierdo, debajo del submenú de “Settings”, en la opción que dice “Static website”. Debe navegar hasta esta opción tal y como se muestra en la imagen a continuación. Note que una vez adentro, existe un mecanismo para habilitar un sitio estático. Se dice estático en el sentido que permite contenidos estáticos y scripts del lado del cliente, no del lado del servidor. La selección de “Enable” le crea un contenedor predeterminado a la cuenta para permitir servir como punto de hospedaje en la web.
Figura No.6: Habilitar el sitio web estático predeterminado para el almacenamiento.
  • Una vez habilitado, puede copiar la ruta expuesta en la etiqueta llamada “Primary endpoint” ya que la necesitará más adelante, esta se trata de la dirección por la cual se podrá acceder al sitio desde la web. También debe ingresar el nombre de la página de entrada al sitio, en este caso digite “index.html”. En la etiqueta de “Error document path” digite “404.html” para manejo de errores. Recuerde en la publicación “Visual Studio Code: diseñando páginas web“, se explica como crear un pequeño sitio web de ejemplo mediante Visual Studio Code. También los archivos están disponibles en la siguiente ruta de GitHub. Para fines prácticos y los puede descargar para seguir la demostración o subir sus propias páginas. Los puede copiar en un folder local para para luego subirlos a la cuenta de almacenamiento de Azure en el orden que posteriormente se irá indicando.
Figura No.7: Habilitar el sitio web estático predeterminado para el almacenamiento.
  • En esa misma pantalla, navegue en el menú del lado izquierda debajo del submenú de “Blob service” y seleccione “Containers”. Note como en el panel se despliega el container llamado “$web”, el cual corresponde al contenedor para hospedar el sitio web que vamos a darle contenido en los siguientes pasos.
Figura No.8: Contenedor predeterminado de la cuenta de almacenamiento
  • Al navegar el contenedor “$web”, se tiene una configuración predeterminada, pero se requiere subir los archivos html para poder habilitar nuestro sitio web.
Figura No.9: Contenedor de $web vació.
  • En el paso correspondiente a la Figura No.7, indicamos la página de índice como “index.html” y el error como “404.html”, entonces se deben subir los archivos mediante la opción de “Upload”. Tome en cuenta que, para fines de analizar el comportamiento del sitio, debe ir subiendo los archivos conforme se va indicando, no subir todos los archivos al mismo tiempo, en cuyo caso, algunos pasos no darán el comportamiento esperado de los pasos descritos.
Figura No.10: Realizar la carga de los archivos html.
  • Seleccione de la ruta donde tiene creados los archivos html el archivo “index.html” y la imagen para ser cargadas al repositorio que copio en el paso No.7.
Figura No.11: Seleccionar y ejecutar un upload de los archivos html de index.html y la imagen.
  • Ya podemos iniciar a navegar el sitio. Para esto, busque la dirección que copio previamente del punto de entrada primario “Primary endpoint” del paso que mostraba la Figura No.7, este también lo puede localizar nuevamente si así lo requiere, en la sección de la cuenta de almacenamiento llamada “Web Static”. Coloque la dirección en el navegador de su preferencia y debería verse similar a la siguiente figura:
Figura No.12: Navegación del sitio web.
  • Si presiona la navegación a la opción “ACERCA DEL SITIO”, se le va a generar un error como el que muestra a continuación, esto porque no hemos aún subido al sitio la página para el manejo de errores:
Figura No.13: Error en el sitio y no existe página para manejo de errores aún.
  • Regrese nuevamente a la pantalla del contenedor “$web” y proceda a subir el archivo provisto llamado “404.html”.
Figura No.14: Agregar 404.html para manejo del error.
  • Diríjase nuevamente al navegador web e intente de nuevo la misma acción, navegando al acerca de. Nótese como en esta ocasión se despliega una página personalizada.
Figura No.15: Página personalizada para manejo del error 404.
  • Regrese nuevamente a la pantalla del contenedor “$web” y proceda a subir el archivo provisto llamado “about.html”.
Figura No.16: Agregar about.html para visualización del acerca de.
  • Diríjase nuevamente al navegador web e intente de nuevo la misma acción, navegando al acerca de. Nótese como en esta ocasión se despliega la página que muestra información “Acerca de”.
Figura No.17: Acerca del sitio web creado.
  • El contenido del contenedor “$web” quedaría con los archivos indicados a continuación:
Figura No.18: Repositorio en $web.
  • En cuanto al tema tan importante del costo, en la siguiente imagen se visualizan los gastos incurridos en el almacenamiento de los 4 recursos que componen nuestro sitio web de prueba, después de tres días de hecha la publicación de sitio web construido:
Figura No.19: Reporte de costos.

Considere limpiar de Azure los recursos que creo para esta demostración si lo considera necesario.

Espero este contenido le sea de utilidad.

Recursos útiles:

https://azure.microsoft.com/es-es/services/storage/blobs/#overview

https://www.tutorialspoint.com/How-to-create-tables-in-HTML

Digital Transformation Saturday 2022

Digital Transformation Saturday 2022

Este sábado 26 de marzo del 2022 se llevara a cabo el evento “Digital Transformation Saturday 2022“.

Tendré la oportunidad de impartir la charla “POWER BI: En busca de visualizaciones nativas más dinámicas” a las 12 medio día (Room #1).

La idea es poder comentar el rol de una herramienta como POWER BI en la trasformación digital, así como buscar explotar al máximo los visuales que ya trae consigo la herramienta, buscando comportamientos tales como resaltado de colores en gráficas, estilo KPI personalizado, como hacer ranking con caracteres unicode, uso de bookmarks, etc.

Están todos cordialmente invitados, el evento inicia desde las 8 a.m. con gran variedad de temas y expositores.

Registro en: https://www.bilatam.org/dtsaturday2022

Visual Studio Code: diseñando páginas web

Visual Studio Code: diseñando páginas web

Photo by hitesh choudhary on Pexels.com

Últimamente es muy común encontrar demos y ejemplos de ejercicios donde se utiliza la herramienta Visual Studio Code como editor de código fuente.

Se ha preguntado ¿qué es Visual Studio Code? Pues se trata de un editor de código liviano, gratuito y de código abierto (openSource) que corre en el escritorio y es multiplataforma: Windows, macOS y Linux. Ofrece la capacidad de predecir instrucciones que se están por escribir (llamado intellisense), para una variedad de lenguajes tales como Java, C, C#, C++, Python, PowerShell, HTML, XML y JSON entre otros más. También ofrece la habilidad de agregar “plugins” para poder trabajar directamente en la nube de Microsoft Azure. Dependiendo del tipo de archivo que se esté editando, la interfaz gráfica asigna un icono que va caracterizando cada clase de archivo. En adelante de este texto se abreviara como VSCode.

En esta publicación vamos a utilizar VSCode para crear una página HTML que pueda servir de entrada a un sitio web, así como también vamos a ir agregando páginas que complementen un pequeño sitio que pueda servir de base para posteriormente, en otra publicación, realizar el procedimiento para hospedarlo como un sitio web en Azure.

Si no tiene instalado el editor y desea realizar pruebas y hacer este ejercicio, puede descargar la herramienta por medio del siguiente enlace: https://code.visualstudio.com/download

Suponiendo que ya se tiene instalado el editor de VSCode, vamos a instalar una extensión que se llama “LiveServer”, la cual permite iniciar un servidor local de desarrollo para poder ir viendo el desarrollo de la página web que vamos a crear.

Para habilitarlo, en el panel de la izquierda, busque la opción de “Extensions” y digite en la barra “Live Server”. Esto va a desplegar la opción y debe seleccionar “Install”.

Figura No.1: En Extensions, buscar la extensión “Live Server” e instalar

Posteriormente, debemos crear una carpeta en el sistema de archivos donde vamos a ir guardando elementos que vamos a crear. En el menú principal, puede seleccionar “File/Open File” y buscar el repositorio que creo en el sistema de archivos local de su computadora. En este caso se creó “PORTAFOLIO”.

Ubicándose en la carpeta, seleccione de las opciones al lado del nombre del directorio, el primer botón denominado “New File” y digite el nombre del archivo como “index.html”. Note como el editor va reconociendo el tipo de archivo en base a la extensión que se le asigna al mismo.

Figura No.2: Crear carpeta para guardar archivos

Como se muestra en la siguiente imagen, una vez creado el archivo, vamos a utilizar marcado (o tags) HTML para ir dando forma a la página. Se usa el tag <html> y <body> para crear el documento y de momento solo vamos a desplegar un texto que dice “Mi Sitio Web”.

Figura No.3: Código del HTML para la página index

El código HTML es el siguiente:

<html>
    <body>
        Mi Sitio Web
    </body>
</html>

Para visualizar la página web que acabamos de crear, nos posicionamos sobre el nombre del archivo bajo el folder de PORTAFOLIO del lado derecho y seleccionamos el archivo “index.html”, presionamos clic derecho para seleccionar “Open with Live Server”.

Figura No.3: Ejecutar la página en el explorador predeterminado de internet con Live Server

Esto nos permitirá visualizar la página que acabamos de crear, la cual se mira de la siguiente manera:

Figura No.4: Visualización en el explorador de la página index.html

¡Excelente! Ciertamente ya con estos pasos creamos una página web de inicio la cuál es estática y básica. Podemos agregar algunos elementos adicionales para darle un formato más llamativo. Se pueden agregar imágenes en la carpeta del sistema de archivos donde se están guardando los archivos y VSCode las va a reconocer automáticamente. También, utilizando el elemento HREF en el cuerpo de la página HTML, podemos agregar navegación al sitio hacia otra página web.

Para esto, vamos a crear una página web del “Acerca de” para darle más contenido al sitio. Nos posicionamos nuevamente al lado de “PORTAFOLIO” en el menú y seleccionados nuevo archivo. También se agregó una imagen en la carpeta para ser utilizada posteriormente por la página “index.html”. Nótese como en el menú del lado izquierdo la herramienta ya reconoce la imagen con el icono respectivo en color morado tal y como se muestra a continuación:

Figura No.5: Seleccionar “New File” y nombrarla como about.html. Nótese que ya el editor reconoce imágenes en la carpeta

Acá se encuentra el código HTML actualizado para navegar hacia la página de “about.html” que acabamos de agregar, posteriormente le vamos a dar contenido.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Aprendiendo todos los días </title>
  </head>
  <body style="background-color:#e3e7eb;">
    
    <A HREF="about.html">ACERCA DEL SITIO</A>

    <h1>Web y Azure: Construyendo Conocimiento</h1>
    <p>Hoy aprendemos a hospedar un sitio web estático usando Azure Blog Storage.</p>
    <p>Nos puede servir para fines informativos y dar a conocer proyectos en la web.</p>
    
    <table width="550px" height="100%" border="1">
        <tr>        
        <td>
            <img src="5480577948_62eca45201_w.jpg" alt="Aprendiendo">
        </td>        
        <td>
        Este texto se encuentra ubicado al lado de la imagen.
       </td>        
        </tr>        
        </table>
  </body>
</html>

La página con el código anterior cambia y se visualiza de la siguiente manera:

Figura No.6: Agregando texto, imagen, acerca de y una tabla a index.html

En cuanto a la página del acerca de, de forma sencilla se puede crear con el siguiente código HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Acerca de</title>
  </head>
  <body style="background-color:#e3e7eb;">    
    <A HREF="index.html">REGRESAR AL INICIO</A>    
    <h1>Acerca de...</h1>
    <p>Aquí se coloca información acerca de la razón de ser del sitio web.</p>
    <p>Puede incluir información relevante de la persona, el negocio o la organización tal como:</p>
        <ul>
            <li> ¿Comó se llaman?</li>
            <li> ¿Quiénes son?</li>
            <li> ¿Qué hacen? </li>
            <li> ¿Comó se pueden contactar? </li>
        </ul>
  </body>
</html>

Y se visualizaría así:

Figura No.7: Página enlazada del about.html

Es recomendable agregar una página para manejo de errores en el sitio. En este caso se puede crear página “404.html” para darle tratamiento a posibles errores que se den el sitio por páginas no encontradas. Este sería un diseño propuesto para dicha página web:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Page Not Found</title>
  </head>
  <body style="background-color:#e3e7eb;">    
    <h1>Página no encontrada</h1>
    <p>Se dio un error y la página no fue encontrada.</p>
    <A HREF="index.html">Regrese al sitio inicial</A>      
  </body>
</html>

Las páginas se pueden continuar extendiendo y darle diseños más sofisticadas según el gusto, lo importante acá es conocer como el editor de VSCode es una herramienta versátil que también se puede utilizar tanto para editar distintos lenguajes de programación, código para Microsoft Azure, y hasta para generar y ejecutar código HTML.

Mas adelante se mostrará cómo se puede hospedar las páginas que recién creamos mediante Microsoft Azure utilizando Azure Blog Storage, una opción muy económica para dar a conocer su sitio web.

Los archivos utilizados los puede obtener en el repositorio de GitHub de ledadataanalitica.data.blog.

Aplicaciones Lógicas de Azure: Escuchando Actualizaciones Web RSS

Aplicaciones Lógicas de Azure: Escuchando Actualizaciones Web RSS

Photo by Ketut Subiyanto on Pexels.com

Las aplicaciones lógicas de Azure son servicios en la nube que ayudan a calendarizar, automatizar, orquestar tareas o procesos de negocios, así como flujos que requieran integración de aplicaciones, datos, sistemas y servicios entre empresas y organizaciones.  

Se basa en una amplia variedad de conectores como Funciones Azure, Azure Storage, Office 365, Dynamics, BizTalk y SAP entre otros muchos más. La lógica inicia con un disparador o trigger que se activa cuando un evento sucede y permite definir calendarizaciones para responder a dichos eventos mediante acciones. Cada vez que se activa el trigger, se crea una instancia de la aplicación lógica que ejecuta las acciones del flujo. Se pueden construir desde el portal de Azure, con Visual Studio Code o con Azure Power Shell

Para ver un ejemplo de su uso, pensemos en una aplicación lógica que sea capaz de escuchar alimentación de sitios web en el estándar RSS. Los sitios web usualmente utilizan el formato RSS para publicar información que se publica frecuentemente, tales como noticias, series de videos o audios. 

Un sitio web que constantemente está creando actualizaciones en RSS es el sitio de noticias de CNN. Supóngase que se quiere tener una aplicación lógica que este escuchando el RSS del sitio web en inglés para recibir los artículos de primera mano. Una empresa podría escuchar noticias y guardarlas en repositorios de datos para ser analizada por procesos; o escuchar mensajería de Twitter para manejar tweets que se estén generando o seguidores, para guardarlos y obtener estadísticas o mejor aún usar analítica avanzada y hacer análisis de sentimiento.

En este demo introductorio a las Azure Logic Apps, vamos a iniciar a aprender cómo funcionan mediante un ejemplo sencillo que escucha el RSS provisto en el sito de CNN y envía un correo con la información relacionada a la publicación del RSS. 

Para iniciar, considere que se requiere tener una cuenta disponible para Azure o puede crear una que le opción que le ofrece Azure gratis por 30 días por un monto de $200.  

Una vez registrado con la cuenta de Azure, se procede a crear la aplicación utilizando Azure Portal. Ingrese al sitio, y en la opción de buscar seleccione Logic App como se muestra a continuación: 

Captura de pantalla de un celular

Descripción generada automáticamente
Figura No.1: Buscar Logic App en Azure Portal. 

Se mostrará la opción que le va a permitir crear una aplicación lógica de Azure. Seleccione “Create”. 

Captura de pantalla de un celular

Descripción generada automáticamente
Figura No.2: Presionar “Create”. 

Para la creación del recurso en Azure, seleccione la subscripción en la cual planea crear la aplicación, así como el contenedor del grupo de recursos, o puede crear uno nuevo si así lo prefiere. También debe ingresar el nombre lógico de la aplicación y la localización geográfica. De momento la opción de Log Analytics no es necesaria. Presione el botón de “Review + Create” y luego “Create” si la información esta correcta. 

Figura No.3: Configuración de la creación del “Logic App”. 

Espere unos segundos para la creación y publicación del recurso. Una vez creado, presione la opción de “Go to resource”. 

Figura No.4: Publicación del recurso. Cuando este completo ir al recurso mediante “Go to resource”. 

Al ir al recurso, Azure lo va a dirigir directamente a la pantalla para iniciar a diseñar la aplicación lógica. En esta pantalla podrá seleccionar entre tipos de plantillas ya predeterminados, o también da la opción de crear una aplicación en blanco. Para nuestro caso, seleccione “Blank Logic App”. La pantalla de inicio tiene un video que le recomiendo observar para darse una idea más amplia de los usos que se le puede dar a este tipo de aplicaciones de Azure, así como que posteriormente navegue entre las distintas opciones para que conozca más de las posibilidades que le ofrecen las aplicaciones lógicas y como le podrían ayudar a procesos de integración de su negocio. 

Figura No.5: Publicación del recurso. Cuando este completo ir al recurso mediante “Go to resource”. 

En el diseñador, navegue al conector debajo de la pestaña que dice: “Standard”, luego seleccione el conectar que se llama “RSS”. 

Figura No.6: Seleccionando conector del RSS. 

Posteriormente, debe escoger el trigger llamado “When a feed item is published”, el cual permite escuchar las actualizaciones RSS de un sitio web. 

Figura No.7: Escoger el trigger “When a feed item is published”. 

Una vez seleccionado, se debe realizar la configuración para escuchar el evento. En el campo del “The RSS feed URL”, debe ingresar el enlace que provee el sitio web para actualizaciones RSS, en nuestro caso, el sitio CNN en inglés provee el siguiente vínculo: 

http://rss.cnn.com/rss/edition.rss 

Si desea realizar el ejemplo con otro sitio de su interés, puede buscar entre sus preferencias y utilizarlo para el ejemplo. En Costa Rica, el vínculo para seguir las últimos comunicados del Ministerio de Salud es: https://www.ministeriodesalud.go.cr/index.php?format=feed&type=rss

El ejemplo provisto de CNN tiene la ventaja que esta en constante actualización, puede que existan sitios que no realicen publicaciones continuamente, y el resultado de la ejecución podría durar algún tiempo en darse. 

En esta sección, también se configura el tiempo que se desea para la calendarización del evento de escucha, en este caso, vamos a configurarlo para que dispare cada hora. No vamos a indicar parámetros (pero es importante notar que existe la posibilidad de definirlos) y procedemos a guardar el avance mediante “Save”. 

Figura No.8: Configurar dirección URL a escuchar y calendarización. 

Una vez guardado, procedemos a configurar el paso que nos permite para este ejemplo enviar un correo con información relacionada al evento del RSS. Se debe presionar el botón de “+ New step”. 

En el panel para seleccionar la acción, busque en la sección de “Standard” y marque “Office 365 Outook”. 

Figura No.9: Escoger en la acción usando Office 365 Outlook. 

Posteriormente, en las acciones disponibles, seleccione “Send an email”. Esto va a permitir enviar un correo con la información recopilada en el evento del RSS. 

Figura No.10: Escoger en la acción “Send an email” de Office 365 Outlook. 

Para la configuración del correo que se va a enviar como notificación, se tiene disponible el panel mostrado a la izquierda con el contenido que se puede seleccionar del RSS. En la sección del correo del destinatario (“To:”), ingrese la dirección del correo a quién va dirigido el correo. En la parte del asunto o “Subject:”, coloque el texto del encabezado que se desea enviar, por ejemplo: “Nueva Noticia de la OMS:” y se le agrega el contenido dinámico para incluir el título que viene del evento del RSS llamado “Feed title”. 

Figura No.11: Configuración del destinatario y encabezado del correo a enviar. 

Si no se le muestra el panel de contenidos del lado izquierdo de las opciones del contenido dinámico de RSS, presione la opción de “See more” para poder visualizarlo tal y como se muestra a continuación: 

Captura de pantalla de un celular

Descripción generada automáticamente

Figura No.12: Presionar “See more” para ver las opciones dinámicas del RSS. 

Para configurar el cuerpo del correo, en la sección de “Body” puede digitar “Título:” e ingresar el contenido dinámico de “Feed title” que corresponde al título en este caso de la noticia. Para dejar un espacio entre líneas, debe seleccionar al mismo tiempo “SHIFT + ENTER”. Luego, se va a agregar una línea para visualizar el resumen provisto para la noticia indicando “Resumen:”, agregando el contenido de “Feed summary”. Algunas actualizaciones RSS contienen el resumen, pero otras no. Si no viene, en este caso en el correo lo que sucederá es que aparecerá el resumen en blanco. Seguidamente, se va a agregar un campo para “Fecha publicación:”, agregue “Feed published on”. Finalmente, se va agregar el enlace url de la noticia para poder navegarlo directamente en el correo de la forma “Enlace:” agregando el contenido “Primary feed link”. 

Figura No.13: Diseño del cuerpo del correo combinando texto y contenidos dinámicos. 

Una vez configurada la acción, se procede a guardar mediante “Save” y a ejecutar presionando la opción de “Run” la aplicación para escuchar una próxima actualización RSS. 

Figura No.14: Guardar mediante “Save” y ejecute la aplicación mediante “Run”. 

Posteriormente, si desea modificar el diseño de la aplicación lógica, lo puede realizar ingresando al sitio el Azure Portal, y seleccionando la aplicación, seguido de la opción de “Logic app designer”, tal y como se muestra en el menú de lado izquierdo. 

Figura No.15: Edite la aplicación por medio de la opción del menú de “Logic app designer”. 

Una vez realizada la configuración y cuando la aplicación Azure detecta actualización del RSS, un ejemplo del correo enviado se podría ver de la siguiente forma: 

Captura de pantalla de un celular con texto

Descripción generada automáticamente
Figura No.16: Ejemplo de un correo enviado por la aplicación lógica diseñada. 

Al presionar el enlace de la noticia, se podrá navegar directamente el sitio del proveedor del artículo: 

Captura de pantalla de un celular

Descripción generada automáticamente
Figura No.17: Navegación el enlace que provee el RSS. 

Con las aplicaciones lógicas de Azure se paga por consumo. Más detalles de estimados de precios los puede encontrar en https://azure.microsoft.com/en-us/pricing/details/logic-apps/?amp%3Bclcid=0x409 

Si desea conocer el estado de los costos en la cuenta de Azure, puede ir al menú principal y seleccionar “Cost Management + Billing” y en la opción de “Overview”, marcar “Current Cost” e ir navegando para conocer los rubros por grupo de recursos e irlo detallando. 

En la pantalla del “Overview” puede ver el resumen de la aplicación, como la frecuencia de ejecución, cuántas veces ha sido ejecutada en las últimas 24 horas, un enlace al historial de los eventos disparados por la aplicación o clonar la aplicación.  

Una vez terminado el ejemplo, se aconseja hacer una limpieza de los recursos creados ya que en caso contrario continuara generando costos conforme se ejecuta. Puede ir a la aplicación lógica y seleccionar “Delete” para borrarla, o “Disable”. También podría borrar el grupo de recursos si el contenedor fue creado solamente para desarrollar este ejercicio. 

Figura No.18: Recordar liberar recursos. 

Espero les sea útil la demostración de como implementar flujos utilizando las Aplicaciones Lógicas de Azure.

¡Nos vemos pronto!

Azure: ¿Qué es U-SQL?

Azure: ¿Qué es U-SQL?

Photo by Ben Mack on Pexels.com

Hace algún tiempo atrás, cuando inicie a laborar en el área de tecnologías de información, tuve la oportunidad de participar en proyectos de desarrollo de páginas web en arquitecturas cliente-servidor, utilizando C# para el código de “Back-end” y al mismo tiempo, una capa de acceso a datos con llamados a procedimientos almacenados en T-SQL. Prácticamente dicha arquitectura requería conocer de ambos lenguajes, pero desarrollados en capas independientes. Pues justamente por ese motivo me asombró mucho conocer que hoy en día existe un lenguaje de Microsoft que entrelaza a ambos mundos: U-SQL. 

Utilizar U-SQL es el equivalente de combinar un lenguaje declarativo similar a T-SQL (pero que no es ANSI SQL), con la programación imperativa en C#. Es uno de los lenguajes nuevos que ha traído consigo Azure, y en este caso, específicamente para el uso del servicio Azure Data Lake Analytics para consultas de “big data”. U-SQL es un lenguaje que permite realizar consultas y combinar datos originados en distintos tipos de almacenamiento. Si desea conocer un poco más de estos tipos de almacenamientos, le invito a visitar la publicación “Azure: ¿Cómo clasificar datos y elegir almacenamiento?”.: Algunas fuentes de almacenamiento que permiten manipular U-SQL pueden ser por ejemplo: Azure Data Lake Storage, Azure Blob Storage, bases de datos Azure SQL, SQL Synapse o instancias de SQL que corran sobre máquinas virtuales de Azure. 

Los scripts escritos en U-SQL se pueden presentar de distintas maneras, por ejemplo, utilizando Azure Data Lake Tools para Visual Studio (se baja la versión del complemento según sea la versión del Visual Studio – Microsoft Download), desde el portal de Azure o mediante el uso de Azure Powershell. 

Los scripts se pueden ejecutar de manera local, esto si los datos a leer o escribir residen en la máquina local, donde esta opción tiene la ventaja que no tiene costo. O bien, puede ser una ejecución en la nube, usando una cuenta de Azure Data Lake Analytics. En este caso si tiene un costo cada cálculo y almacenamiento de datos que se realice en la nube. 

La unidad principal de un programa U-SQL es un script, que consiste en una secuencia de declaraciones: 

Script:= Statement_List 
Statement_List := {[Statement]’;’} 

Cada sentencia debe terminar con el símbolo de punto y coma (;). Lo cual, ya de todas maneras es una buena práctica, incluso en T-SQL regular. Las declaraciones que se pueden utilizar en U-SQL son las siguientes: 

  • Bloques IF…ELSE 
  • Declaración de VARIABLES 
  • Referencias a un ASSEMBLY 
  • Data Definition Language (DDL) 
  • Consultas 
  • Procedimientos almacenados de U-SQL 
  • Importación de paquetes (assemblies) 
  • Data Modification Language (DML: INSERT) 
  • Escritura a un flujo de datos por medio de OUTPUT 

Veamos un ejemplo de código en U-SQL. Supongamos que tenemos el siguiente archivo de formato csv como se muestra a continuación: 

Figura No.1: formato del archivo csv de territorios

Posteriormente se crea un script en un proyecto local de tipo “U-SQL Project” donde definimos una entrada de datos como un archivo llamado “Territorios.csv”, así como una salida de datos con el nombre de archivo “AreasFiltradas.csv”. En este ejemplo vamos a utilizar la clase que provee U-SQL llamada “Extractors” que permite generar un conjunto de filas a partir de un archivo. De manera nativa U-SQL provee las clases para los tipos de archivos “Text”, “Csv” y “Tsv”. En este ejemplo vamos a utilizar el extractor para un tipo de archivo csv

@entrada =  
    EXTRACT Pais            string,  
            Ciudad          string,  
            Latitud         string,  
            Longitud        string,  
            Poblacion       int,  
            Elevacion       decimal,  
            Alcalde         string, 
            Fundacion       int, 
            WebSite         string, 
            Extension       int 
    FROM "/Demos/Territorios.csv" 
    USING Extractors.Csv(skipFirstNRows : 1); 
  
@salida = 
    SELECT Pais 
           , Ciudad 
           , String.Concat(Latitud, " ", Longitud) AS Coordenadas 
           , Poblacion 
           , Elevacion 
           , Elevacion > 1000? "Si" : "No" AS EsElevacionMayorMil 
           , Alcalde.ToUpper() AS Alcalde 
           , Fundacion 
           , WebSite.Trim() AS WebSite 
           , Extension 
           //Texto comentado, puede invocar su propia clase 
    FROM @entrada 
    WHERE Extension<5000; 
  
OUTPUT @salida 
    TO "/Demos/AreasFiltradas.csv" 
    USING Outputters.Csv(outputHeader:true); 

Nótese como palabras claves como SELECTFROM WHEREdeben ir en mayúscula, porque el U-SQL es sensible a Mayúsculas (Case Sensitive). Al extraer los datos se indica el nombre y el tipo de datos que contiene (se especifica el esquema de datos esperado), así como la indicación que no lea la primera fila del encabezado del archivo (skipFirstNRows igual a 1 fila). Luego de leer el archivo, se utiliza el refinamiento del resultado, conocido como un “RowSet” el cuál tiene el nombre de “@salida”. En el flujo del SELECT se pueden utilizar construcciones como “String.Concat” para concatenar columnas en este caso de texto, “ToUpper” para pasar a mayúscula, “Trim” para eliminar espacios en blanco. En el “WHERE”, se filtró las áreas de extensión menores a cinco mil. También se utilizó el condicional bajo la forma “?:” para evaluar una condición de falso o verdadero de manera que si la condición se cumple (Extension>1000), se retorna la primera expresión, de lo contrario, se retorna la segunda expresión.  

Luego de ejecutar el script U-SQL, la salida se ve de la siguiente manera: 

Figura No.2: resultado de la ejecución de la consulta

Casos de posibles usos

  • Los scripts de U-SQL siguen el patrón de extracción, transformación y carga (lo que hacemos en ETLs), por lo cual se pueden utilizar para tareas de este tipo por ejemplo para pasar datos en un Azure Data Lake de la zona de datos de ingesta a la zona de datos de curados 
  • Permite interacción para realizar consultas en múltiples fuentes de datos de Azure sin tener que mover los datos, por ejemplo, Azure Data Lake StorageAzure Storage BlobsAzure SQL DBAzure SQL Synapse 
  • Capacidades para implementación de análisis cognitivos para imágenes o texto complementado con Phyton R 

Beneficios

  • Escalable a procesar volúmenes de información de tera o peta bytes 
  • Lenguaje simple de consulta para todos los datos siguiendo la estructura “SELECT – FROM  – WHERE” 
  • Escoger la opción de diseño según la necesidad: si se opta por lenguajes como pertenecientes a la familia .NetPhyton R 
  • Utilización de “assemblies”  o “ddl’s” que permiten la posibilidad de encapsular lógica compleja que puede ser invocada desde la construcción del script en U-SQL 

Posteriormente en otras publicaciones se irán desarrollando otros temas relacionados a U-SQL con ejemplos de paso a paso de cómo ejecutar scripts en Azure y también como ejecutarlos de manera local. 

Recursos: 

https://docs.microsoft.com/en-us/u-sql/

Azure: ¿Cómo clasificar datos y elegir almacenamiento?

Azure: ¿Cómo clasificar datos y elegir almacenamiento?

Photo by Kaboompics .com on Pexels.com

El mar de documentos digitales que existen actualmente proviene de muchas y diversas fuentes de información, los cuales pueden ser clasificados dependiendo de las características que posean. Los datos pueden ser clasificados como:

  • Estructurados 
  • Semiestructurados 
  • Sin estructura 
  • Transmisión automática también conocidos como “streaming”. 

Les adjunto acá un infográfico donde puede visualizar la clasificación de los tipos de datos y las opciones para almacenamiento.

Quienes tengan experiencia en el desarrollo de sistemas de software, que usen aplicaciones para dar mantenimiento a bases de datos relacionales como SQL posiblemente tengan un mayor acercamiento con los datos estructurados, conocidos como datos relacionales; estos forman parte del mundo que se adhiere a un esquema estricto, almacenado por medio de tablas donde las tuplas o registros de datos tienen los mismos campos o propiedades, usualmente están almacenados como tablas con filas, columnas, llaves y relaciones de unas tablas con otras para garantizar la integridad referencial. Se procura mantener buenas prácticas en la organización de la base de datos implementando reglas para la protección de los datos, buscando organizar la base de datos al menos a la tercera forma normal de Codd.

Con la evolución de SQL se han agregado funcionalidades para otros formatos que han crecido en popularidad como por ejemplo, los formatos de marcado XMLJSON o YAML. Estos datos pertenecen a la categoría de datos semiestructurados, los cuales son más flexibles que los datos relacionales y se conforman de etiquetas que se encargan de presentar la organización y jerarquía de los datos utilizando pares ordenados de llave y valor. También se les conoce como no relacionales o “Non-SQL”. Son muy utilizados para intercambio de datos entre sistemas. JSON recientemente se ha vuelto muy popular por ser un formato más legible para el usuario que XML. En Azure, es muy común encontrar archivos para la automatización de configuraciones en formatos como JSON o YAML. 

Los datos de trasmisión automática es otro conjunto que en la actualidad genera gran cantidad de datos a nivel mundial, se caracteriza porque continuamente fluyen de un lugar a otro. Este tipo de flujo es una oportunidad para consumir datos y realizar análisis más fácilmente. Algunas fuentes conocidas de ”streaming” son por ejemplo los dispositivos IOT como sensores de temperatura o dispositivos de automatización de manufactura, datos enviados por satélites de GPS o tan comunes como smartphones o pulseras inteligentes. 

Existe otro conjunto de datos que son conocidos por simplemente no tener estructura tales como: tweets, correos y sus adjuntos, archivos de texto, bitácoras, fotos, videos, música o audios por mencionar algunos. 

Buscando almacenamiento adecuado según la necesidad operacional

Una vez identificado la clasificación de los datos, se puede ubicar el tipo de destino que puede servir de almacenamiento según las necesidades de operación que tenga la organización, con la posibilidad de utilizarse inclusive múltiples fuentes según el caso del tratamiento que se le desea dar a los datos: 

  • Azure Blob Storage: es un objeto de almacenamiento optimizado para almacenar montos masivos de datos sin estructura como textos o archivos binarios. Sirven para almacenar datos transmitidos o “streaming” de video y/o audio. Se pueden acceder desde cualquier ubicación por medio de los protocolos HTTP o HTTPS. También las aplicaciones los pueden acceder mediante API, Azure PowerShell o Azure CLI (Command Line Interface). El bajo costo es un factor para considerar, así como si se tratan de datos que solamente se requieren almacenar, pero que de momento a nivel de negocio no se tiene planeado analizar ni aplicarle consultas, o sea, datos en reposo, los cuales son aquellos que no son consultados de manera frecuente. En Azure se le llaman “Cool Storage”, tienen un bajo costo de almacenamiento, pero se paga un poco más al recuperar el archivo o los datos. Por lo contrario, los datos calientes son llamados “Hot storage”, los cuales están siempre disponibles para ser accedidos. 
  • Azure Data Lake Storage Gen1: es un repositorio para análisis de cargas de big data y es construido sobre Azure Blog Storage. Permite capturar datos de cualquier tamaño, tipo y de rápida ingesta en un solo lugar para análisis operacionales y exploratorios. 
  • Azure Data Lake Storage Gen2: es un conjunto de capacidades dedicada al análisis de “big data”. Este se construye sobre Azure Data Lake Storage Gen1 que permiten la creación de espacios de nombre jerárquicos usando directorios y subdirectorios por su compatibilidad con Hadoop. Se usa cuando los datos no son estructurados, pero se requieren para análisis de datos y de “bigdata”, brindando capacidad para montos masivos de datos. Se puede también usar para albergar gran variedad de datos. 
  • Azure Cosmos DB: es el servicio de base de datos Microsoft multimodal distribuido globalmente. Soporta datos “Non-SQL”. El nombre “Cosmos” está directamente relacionado a que permite replicar datos en cualquier lugar del mundo, dando la posibilidad de replicar a centros de datos que estén cerca de los clientes para reducir los tiempos de latencia de las aplicaciones. Ofrece distintas interfaces y protocolos para trabajar con bases de datos de código libre tales como Cassandra, MongoDB, Gremlin o las propias tablas de Azure Table Storage. 
  • Azure SQL Database: es el servicio de Azure para el manejo de bases de datos relacionales en la nube. Se usa cuando se debe dar soporte a sistemas OTLP, soporta la conexión de gran cantidad de usuarios, se puede acoplar con Machine Learning y es escalable. El manejo de Azure SQL Database como servicio (PaaS) incluye funciones de administración tales como actualizaciones, aplicación de parches, respaldo y monitoreo sin involucrar al usuario. Tiene la ventaja que la base de datos siempre corre en la última versión del motor de la base de datos y bajo una disponibilidad del 99.99%. 
  • SQL Synapse Analytics: es la solución en la nube que ofrece Microsoft para “data warehouse” de índole empresarial. Tiene la capacidad de escalar a nivel de “Petabytes”, usa procesamiento masivo paralelo (MPP), con capacidad de tener nodos independientes para cálculos y para almacenamiento, coordinando el transporte de datos como sea necesario. Su uso va relacionado a resolver cálculos complejos, se tiene gran cantidad de datos y pocos usuarios, se ocupa procesamiento masivo para análisis de “big data” y ofrece integración para machine Learning y Power BI. El costo por procesamiento de cálculo y el almacenamiento se generan de forma independiente entre ellos. 
  • Azure Streaming Analytics: examina y analiza eventos de transmisión de datos de múltiples fuentes par IOT. Las fuentes de entrada puede ser dispositivos, sensores, redes sociales o aplicaciones. Puede dar inicio a flujos de trabajo para iniciar, por ejemplo, alertas antes patrones anómalos en los datos.  
  • HDInsight: provee herramientas para ingesta, procesamiento y análisis de big data. Permite procesar datos masivos. Admite el uso de marcos de trabajo de código libre como lo son Hadoop, Spark, Hive, Kafka y R entre otros. Se puede usar en escenarios de datos para extracción y homogenización de datos estructurados y no estructurados en escenarios de ETL, Data Warehousing o IOT entre otros.
  • Azure Databricks: es una plataforma optimizada basada en Apache Spark. El diseño incluye espacios de trabajo para permitir la colaboración entre científicos de datos, ingenieros de datos y analistas de negocio. Dado que posee librerías nativas de Machine Learning tiene la capacidad de generar conocimiento innovador a partir de los datos que utilice como fuente. Apache Spark es un motor de análisis unificado para el procesamiento de datos a gran escala que permite combinar datos, machine learning e inteligencia artificial en un mismo marco de trabajo.e inteligencia artificial en un mismo marco de trabajo. 

Recomendaciones

Si en su organización se está planteando una solución basada en Azure tome en cuenta lo siguiente: 

  • Elabore un inventario de los tipos de datos que se generan o que se intercambian en las aplicaciones que tiene la organización. Identifique la fuente de datos y clasifique en estructurados, semiestructurados, streaming o sin estructura. 
  • Ubique, según la clasificación de los datos, la necesidad operacional que requiere la gestión de los datos para asignarle un tipo de almacenamiento según los descritos previamente. 
  • Realice una cotización de costos de cada tipo de almacenamiento para tener un criterio comparativo entre las opciones existentes. De esta manera podría evaluar y analizar criterios de viabilidad y costos para su organización de una eventual migración. Existen almacenamiento de bajo costo, como Azure Blog Storage, pero algunas otras opciones son de mayor costo, como Synapse o Databricks, por mencionar algunos escenarios. Mucho de la inversión va a depender de la cantidad de datos a almacenar y del tipo de procesamiento, así como los cálculos que se desea aplicar sobre los datos.