Power BITutoriales

Tutorial Power BI: Gráficos con imágenes en Deneb

Ya hemos visto en tutoriales anteriores el potencial del custom visual de Deneb en Power BI. Desde un primer tutorial para iniciarse en Deneb, pasando por el uso de tooltips o un ejemplo mas complejo por capas. Si no has visto estos tutoriales previos, te aconsejo completarlos antes de enfrentarse a este nuevo tutorial de Deneb con imágenes.

Como trabajar con Imágenes con Deneb

Lo primero que debéis saber, es que si habéis descargado el custom visual de Deneb desde el AppSource, es una versión certificada que tiene ciertas limitaciones para poder cumplir con los estándares marcados por Microsoft. Una de esas limitaciones es acceder a recursos web por http/s:

Limitaciones Deneb Certificado de la AppSource
Limitaciones Deneb Certificado de la AppSource

Como en este tutorial queremos poder acceder a imágenes desde url de internet, tendremos que descargar la versión ZIP no certificada desde el repositorio de GitHub.

Instalar la versión standalone de Deneb

Una vez descargado el fichero ZIP del link anterior debemos crear un informe nuevo en el Desktop para iniciar nuestro tutorial. Pulsamos en los 3 puntos al final de la lista de visuales y marcamos la opción de menú “Importar objeto visual de un archivo”:

Importar visual personalizada desde un fichero
Importar visual personalizada desde un fichero

Una vez instalado, veréis el icono de la visual de Deneb (igual que si lo hubieseis hecho con la opción de AppSource, pero sin las limitaciones antes mencionadas):

Icono del custom visual de Deneb instalado
Icono del custom visual de Deneb instalado

Nuestro conjunto de datos para este tutorial

Para este ejemplo, hemos usado un conjunto de datos de Kaggle sobre la facturación de las principales cadenas de Fast-Food en Estados Unidos en 2019.

En el archivo plano de este conjunto de datos podemos ver datos de ventas, número de franquicias y locales propios, etc. sobre el TOP 50 de cadenas de comida rápida en USA en 2019:

Conjunto de datos de nuestro tutorial
Conjunto de datos de nuestro tutorial

En este caso no tenemos ninguna columna con urls de imágenes, pero para eso os he creado una versión especial del fichero con dos columnas adicionales:

  • logo url: con la url del logotipo de cada franquicia.
  • category url: con un icono para cada categoría de comida rápida a la que pertenece la franquicia.

Os podéis descargar esta versión “enriquecida” del csv en este link.

Para nuestro tutorial nos quedaremos con el TOP 30 de las franquicias.

Nuestro primer gráfico Deneb con imágenes

Las imágenes son un tipo de marcador en Vega Lite (el lenguaje en el que se basa la visual de Deneb). De igual manera que podemos representar los datos por puntos, triángulos, barras, círculos, etc. podemos hacerlo con una imagen.

En primer lugar, vamos a hacer un gráfico con barras, círculos e imágenes como el siguiente:

Primera visual con imágenes que realizaremos en Deneb
Primera visual con imágenes que realizaremos en Deneb

El código Vega Lite detrás de esta visual es el siguiente (pondré un código de colores para ayudar a la explicación detallada de este código):

{
  "data": {"name": "dataset"},
  "encoding": {
    "x": {
      "field": "company",
      "type": "nominal",
      "title": false,
      "axis": {"labels": false},
      "sort": "-y"
    },
    "y": {
      "field": "Suma de sales_in_millions_2019",
      "type": "quantitative",
      "title": false,
      "axis": {"labelColor": "#E6E6E6"},
      "aggregate": "max"
    },
    "url": {
      "field": "logo url",
      "type": "nominal"
    }
  },
  "layer": [
    {
      "mark": {
        "type": "bar",
        "opacity": 1,
        "tooltip": true,
        "color": "#ffffff",
        "width": 2
      }
    },
    {
      "mark": {
        "type": "circle",
        "size": 1200,
        "color": "#ffffff",
        "tooltip": true
      }
    },
    {
      "mark": {
        "type": "image",
        "width": 24,
        "height": 24,
        "baseline": "middle",
        "align": "center",
        "tooltip": true
      }
    }
  ]
}

Vayamos describiendo el código por partes gracias a los colores que hemos utilizado:

  • Rojo: En esta parte definimos que valores queremos mostrar en el eje X (campo “Company” que se refiere al nombre de la franquicia) y en el eje Y (campo “Suma de sales_in_millions_2019” que muestra la facturación de esa franquicia). Aparte, indicamos en la etiqueta “url” en campo que contiene la url de las imágenes a mostrar (campo “logo url”)
  • Etiqueta “Layer”: como vamos a mostrar varios marcadores o formas necesitamos incluirlos en una etiqueta Layer para crear las diferentes capas.
  • Azul: Aquí definimos el marcador tipo barra vertical y le damos un ancho de 2 (para que se muestre como una línea en vez de una barra más gruesa) y le asignamos el color blanco.
  • Verde: En este caso definimos el marcador tipo círculo con un tamaño de 1.200 y color blanco. Este círculo se mostrará a la altura del eje Y del valor del campo “Suma de sales_in_millions_2019”, por lo que lo veremos en la punta de la barra anterior. De este modo, creamos un gráfico tipo “Lollypop” o “Piruleta“.
  • Naranja: en esta última capa indicamos el marcador tipo imagen con el logo de la franquicia. Lo alineamos con el círculo anterior y le damos un tamaño de 24×24 px.

En nuestro ejemplo hemos puesto como color de fondo de página un color azul y a la visual de Deneb la hemos desmarcado el formato “fondo” para que tenga fondo transparente y muestre el azul de la página.

Aparte el título superior y el título inferior del eje X son textos insertados manualmente.

Añadir un Tooltip para dar más información sobre cada franquicia

Como habéis podido observar en el código anterior, en cada marcador hemos puesto la etiqueta “Tooltip” a “true” para que ese marcador permita el uso de tooltips en Power BI.

Ahora vamos a crear una pestaña nueva en nuestro informe con alguna info adicional (diseñaremos una especie de tarjeta con varias visuales):

Tooltip diseñado en una pestaña adicional
Tooltip diseñado en una pestaña adicional

En este caso hemos incluido en el tooltip:

  • Una visual de Tabla con el logo y Nombre de la franquicia (poniendo los títulos de columnas del mismo color que el fondo para que no se vean).
  • Una visual Tarjeta con el valor de la categoría a la que pertenece la franquicia justo debajo.
  • Una visual de Tarjeta de varias filas con los datos de Ventas, Nº Locales, Nº Locales propios y Nº Locales Nuevos creados en 2019.
  • Aparte he incluido debajo una forma rectangular blanca de esquinas redondeadas y he puesto el mismo color de fondo que en nuestra pagina con el gráfico Deneb. Así dará la sensación de que el Tooltip es redondeado 😉

Ocultamos esta pestaña y la marcamos como Tooltip en nuestro gráfico Deneb (si no sabes como hacelo, puedes revisar el proceso en este tutorial de Deneb con Tooltips)

Al pasar el ratón por cada logo del gráfico Deneb nos mostrará el tooltip con los datos de esa franquicia:

Deneb con imágenes
Deneb con imágenes

BONUS TRACK: ¿Se podrían poner imágenes en un gráfico circular?

Hemos podido incluir imágenes en un gráfico basado en ejes X e Y para posicionar los logos donde nosotros necesitábamos, pero…. ¿Y si quiero hacerlo en un gráfico de donut o tarta?

Pues, lamentablemente, los marcadores tipo “image” solo admiten coordenadas X e Y y no coordenadas radiales o “theta” como se conocen en Vega Lite. Pero que la documentación diga que no se puede nunca nos ha detenido antes para intentarlo ¿no?

Dándole vueltas a cómo hacerlo apareció en mi mente un concepto que tenía olvidado desde la época escolar…TRIGONOMETRÍA!!!! Recordaba que con el seno, coseno y tangente de un ángulo podía relacionar el ángulo de un triángulo con sus lados. En este caso, a partir del ángulo que debe ocupar en el gráfico radial, puedo obtener el valor del eje X e Y en los que debo situar la imagen.

¡Ya lo se, ya lo se! Estáis flipando con que hablemos de trigonometría ahora en este blog, pero seguro que recordáis que el profe os decía “¡Pues claro que la trigonometría os servirá en la vida!”… Pues ha llegado el momento 😀

Nuestra gráfica circular

En este caso quiero mostrar en una visual tipo donut la facturación por categorías de franquicia de comida rápida (hamburguesas, pizzas, bocadillos, ….):

Grafico circular que queremos implementar con Deneb con imágenes
Grafico circular que queremos implementar con Deneb con imágenes

Como veis tendremos que usar un marcador tipo circular para el donut y luego uno tipo texto para las cifras y otro tipo imagen para los iconos de cada categoría.

Nueva tabla en nuestro modelo de datos

Como queremos agregar la información a nivel de categoría, voy a crear con DAX una tabla agregada de la original por categorías. Además le añadiré unas columnas adicionales con los campos trigonométricos que necesito para situar las imágenes:

Categorias_Acumuladas = 
var _maxcategory = max(top_50_fast_food_US[category])
var _categories = SUMMARIZE(top_50_fast_food_US,top_50_fast_food_US[category],top_50_fast_food_US[category url],"sales_in_millions_2019", [Sales])
var _categories2 = ADDCOLUMNS(_categories,
"cum",var _category= [category] return SUMX(FILTER(_categories,[category]<=_category),[Sales]),
"total",Calculate([Sales],ALL(top_50_fast_food_US)))
return ADDCOLUMNS(_categories2,
"special measure",([cum]-[sales_in_millions_2019]/2)/[total],
"special measure x", SIN(2*PI()*([cum]-[sales_in_millions_2019]/2)/[total]),
"special measure y", COS(2*PI()*([cum]-[sales_in_millions_2019]/2)/[total])) 

Vamos a explicar esta nueva tabla creada con DAX paso a paso:

  • Primero declaro la variable var _maxcategory que me indica la categoría en la que estoy.
  • Segundo declaro una variable var _categories tipo tabla donde agrego la tabla original por categorías, sumando las ventas de los restaurantes de cada categoría.
  • En el tercer paso declaro la variable var _categories2 que parte de la tabla anterior y le añade el campo “cum” con las ventas acumuladas de esa categoria y las anteriores y el campo “total” con las ventas de todas las categorías.
  • Por ultimo devuelvo con la función return una última tabla que incluye 3 columnas adicionales con las fórmulas trigonométricas que me dan el valor del eje X e Y (la primera columna me servía solo como comprobación).

La tabla resultante sería:

Tabla agrupada por categoria y con datos trigonométricos
Tabla agrupada por categoria y con datos trigonométricos

Se que es un poco lioso, pero una vez hecha esta tabla todo es mucho más fácil.

Creamos la visual con Deneb

A continuación os pongo el código Vega Lite de la visual Deneb:

{
  "data": {"name": "dataset"},
  "encoding": {
    "theta": {
      "field": "Suma de sales_in_millions_2019",
      "type": "quantitative"
    },
    "color": {
      "field": "category",
      "type": "nominal",
      "legend": {
        "labelColor": "white",
        "title": false
      }
    }
  },
  "layer": [
    {
      "mark": {
        "type": "arc",
        "innerRadius": 100
      }
    },
    {
      "mark": {
        "type": "image",
        "width": 50,
        "height": 50
      },
      "encoding": {
        "url": {
          "field": "category url"
        },
        "x": {
          "field": "special measure x",
          "type": "quantitative",
          "axis": {
            "labels": false,
            "grid": false,
            "title": false
          }
        },
        "y": {
          "field": "special measure y",
          "type": "quantitative",
          "axis": {
            "labels": false,
            "grid": false,
            "title": false
          }
        }
      }
    },
    {
      "mark": {
        "type": "text",
        "fontSize": 20,
        "baseline": "top",
        "align": "center",
        "dy": 30
      },
      "encoding": {
        "text": {
          "field": "Suma de sales_in_millions_2019",
          "type": "nominal",
          "format": ","
        },
        "color": {
          "condition": {
            "test": "datum['Suma de sales_in_millions_2019']>=0",
            "value": "white"
          }
        },
        "x": {
          "field": "special measure x",
          "type": "quantitative",
          "axis": {
            "labels": false,
            "grid": false,
            "title": false
          }
        },
        "y": {
          "field": "special measure y",
          "type": "quantitative",
          "axis": {
            "labels": false,
            "grid": false,
            "title": false
          }
        }
      }
    }
  ]
}

Vamos explicando pro pasos y colores :

  • Rojo: a través de una etiqueta “encoding”, que relaciona datos del modelo con parámetros del gráfico, asociamos el valor radial de la visual de donut al campo “Suma de sales_in_millions_2019” y el color o desglose del gráfico al campo “category”. Aparte le añadimos a este campo una leyenda.
  • Layer: Como en el caso anterior mostraremos varias marcas o formas en esta visual, por lo que tenemos que organizarlas en capas a través de la etiqueta “Layer”
  • Azul: La primera marca será tipo “Arc” y es la que genera el donut. Si ponemos un “InnerRadius” = 0 obtenemos un gráfico de tarta y si ponemos, como es el caso, un “InnerRadius” = 100 será un donut.
  • Verde: Aquí incluimos la marca tipo imagen con un tamaño de 50×50 px. Le indicamos que debe obtener la imagen del campo “category url”. Como no podemos situar las imágenes de manera radial con la etiqueta “theta” del apartado rojo, debemos indicarle aquí las coordenadas X e Y que debe usar. Por ello, usamos “encoding” para indicarle que debe usar los campos “special measure X” y “special measure Y” para situar los iconos.
  • Naranja: En este caso usamos la marca tipo “Texto” para mostrar el valor de las ventas de esa categoría a través del campo “Suma de sales_in_millions_2019”. Nos pasa igual que la imagen y usamos los campos especiales para situarlos según un eje X e Y.

Es un poco complicado, pero finalmente conseguimos tener nuestro gráfico radial en Deneb con imágenes.

El informe final

Normalmente os dejo acceso al informe final para que podáis interactuar con él.

Como veis en este caso, al usar la versión “standalone” de la visual de Deneb (no certificada) se puede publicar en powerbi.com y compartirlo con otros usuarios de la organización sin problemas, pero no se puede compartir en Web Pública (veis que no aparece parte de las visuales):

De todos modos, recordad que si os dais de alta en nuestra newsletter (es gratis) podréis descargar el fichero pbix original de éste y del resto de tutoriales de nuestro blog y revisar todos los pasos.

Conclusiones

Deneb sigue demostrándonos ese gran potencial como creador de visuales imposibles en Power BI. El poder incluir imágenes en nuestros gráficos lleva nuestros informes a otro nivel y facilita el entendimiento de la información por parte del usuario.

¿Qué opináis vosotros?¿Usáis imágenes en vuestros informes?¿OS lo estáis planteando? ¡Esperamos vuestras dudas y comentarios!

¡SUSCRÍBETE YA!
Doy mi consentimiento para almacenar mis datos para envío de newsletters.
Si te suscribes a la newsletter tendrás acceso a los <b><u>ficheros Power BI originales</u></b> de nuestros tutoriales y post. <br><br>Además tendrás derecho a participar en sorteos periódicos que realizaremos en el blog.
We hate spam. Your email address will not be sold or shared with anyone else.
Mostrar más

Iván Arribas

Llevamos siglos generando, relacionando, modificando y almacenando datos....es hora de que les echemos un vistazo. Espero que este blog sirva de ayuda a los que quieran introducirse en este mundo de la Analítica de Datos, igual que me está sirviendo a mi.

Publicaciones relacionadas

6 comentarios

    1. Hola Alberto,

      ¡Gracias por suscribirte a la newsletter! Revisa en tu carpeta de SPAM del correo. Debería haberte llegado un mail donde confirmar tu suscripción. Una vez confirmado, te llegará un mail de bienvenida con la clave para acceder a los ficheros.

      Un saludo,

    1. Hola Nestor,

      Si ge suscribes a nuestra newsletter ( es gratis) recibirás la contraseña para poder descargarte todos los ficheros pbix de todos nuestros tutoriales.

      Un saludo y gracias por seguirnos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Iván Arribas Delgado.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Bluehost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Botón volver arriba
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad