Categoría en #Power BI Tips

Webinar: Simulación de Seguridad a Nivel de Página con formato condicional y RLS

El pasado martes 28 de julio tuve el placer de impartir un webinar para el PUG de Barcelona en el que profundicé en la simulación de seguridad a nivel de página aplicando tanto RLS como el formato condicional en la navegación. Como insistí en el webinar no es seguridad a nivel de página, ya que si se tiene la URL de la página cualquier usuario puede acceder, pero se ocultan de la navegación la posibilidad de ir a las páginas a las que no se tiene permiso y como no es fácil disponer de la URL de las páginas, pues se puede considerar que cumple la función de que ciertos usuarios puedan no acceder a partes de un informe.

Os dejo el enlace al video que el PUG de Barcelona ha subido a Youtube para que podáis verlo.

Considero muy interesante la opción que planteo de crear la tabla de páginas automáticamente utilizando como origen el archivo layout del propio pbix.

La verdad es que estoy muy contento con el resultado final del webinar y el encuentro con posterior ciberquedada que contó con la presencia de Ana María Bisbé fue muy gratificante.

Os dejo también un enlace a los materiales:

https://github.com/PUG-Barcelona/general/tree/master/Eventos/20200728_RLS_Seguridad_P%C3%A1ginas

Tip Excel: Crear una tabla plana a partir de una visualización de tabla de power BI conectandonos al modelo en el servicio

¿Cuantas veces no os ha pedido un cliente o un usuario de negocio que le saquéis un informe en Excel? Por más que le expliques que Power BI no es excel y que tiene muchísimas más ventajas que excel, él quiere su informe en excel.

Le enseñas a exportarse los datos desde el servicio y dentro de dos días te llama para decirte que el excel no está actualizado, que lo exportó antes de ayer y ya faltan datos, que el quiere ver en el excel la tabla que tiene en Power BI hoy.

Como sabeis, excel te permite conectarte al servicio para crear una tabla dinámica conectada al modelo, pero en el siguiente video, voy más allá y os voy a enseñar un pequeño truco para reproducir la tabla con todos los datos tal cual realiza la exportación desde el servicio, pero con la ventaja de que no será una foto estática de los datos sino que la podremos actualizar.

Sin más preámbulos, dentro vídeo.

Excel Tip. Crear tabla plana conectada a Power BI

Conectar un informe realizado sobre el conjunto de datos a un conjunto de datos del Servicio de Power BI

Es curioso muchas veces como tendemos a complicarnos la vida y las soluciones más sencillas se nos escapan a la vista.

Hace mucho tiempo ya que Power BI permite conectar un informe al Servicio de Power BI. Esto nos permite, crear un modelo y a partir de ese modelo poder hacer diferentes informes sobre el mismo. Es más, es una buena práctica que evita que cuando se hacen cambios en el modelo pueda eliminarnos accidentalmente algún informe.

Hace mucho tiempo también que publiqué sobre ello en mi anterior blog y como mediante la modificación de la estructura del archivo pbix comprimido se podía cambiar un informe que estuviera armado sobre el modelo, a un informe conectado al servicio.

Esta práctica últimamente me estaba dando muchos quebraderos de cabeza. Imágenes que no se registraban y aparecían en negro, cambios en los archivos que estructuran el pbix y un sin fin más de problemas que me hicieron abandonar esta práctica y hace poco en el PUG Spain un usuario contestó sobre el asunto con una manera sencilla pero que me hacía dudar si funcionaría:

«Elimina todas las tablas y crea la conexión».

Hoy tenía necesidad de convertir un modelo a informe conectado al servicio y era buen momento de probarlo.

He eliminado todas las tablas del pbix

Todas las visualizaciones se han roto por completo

He creado la conexión al servicio:

Conjunto de Datos de Power BI

Y mi informe vuelve a contener todas las visuales correctamente y como podéis ver en la parte izquierda del informe no contiene el modelo de datos, sino que está conectado a un modelo de datos en el servicio

Por supuesto no puedo dejar de mencionar a la persona que expuso la idea en el foro que fue Josep M PuigDollers, yo simplemente he probado que funcionara y la he reflejado en este post por si es de utilidad.

Configurar mediante un tema personalizado los encabezados de objetos visuales

De vez en cuando me da por trastear las entrañas de power bi para descubrir cosas nuevas. Hoy me planteaban una duda, ¿de qué manera se pueden configurar los encabezados de objeto visual para que no aparezca ningún icono pero no se impida al usuario exportar los datos a excel, por ejemplo.

En cualquier objeto visual, existe la opción de Activar o desactivar el encabezado del objeto visual

Y una vez activa, se pueden habilitar unos u otros encabezados según convenga:

Puedo desactivar todos y dejar activo el Icono Más opciones.

Pero si quiero automatizar este proceso, en todos los objetos visuales es tremendamente laborioso.

Lo primero que pensé fue en el generador de temas de powerbitips.com pero ellos contemplan la posibilidad de activar o desactivar el Encabezado completo, pero no unos iconos sí y otros no.

Busqué a ver si encontraba la solución por algún lado y no la encontré, hasta que recordé como descubrí los nombres de los iconos cuando salió el formato condicional y que Matt Allington mencionó en su blog:

https://exceleratorbi.com.au/power-bi-icon-names/

Seguro que en mi querido layout estaba la solución. Puse mis encabezados como activos, desactivé todos los iconos y comencé a bucear en el layout del pbix con el que estaba trabajando para descubrir como generar el código y efectivamente, logré que funcionara.

Personalizando el visual header desde power bi tips conseguí el siguiente código:

{"name":"theme created by powerbi.tips https://themes.powerbi.tips",
"visualStyles":
{"": {"":{"visualHeader":[{"show":true]}}}}
}

Sólo me quedaba descubrir cómo desactivar unos u otros iconos a mi antojo y en el layout estaban sus nombres.

{"name":"personalizado","dataColors":["#c1a131","#374649","#FD625E","#F2C80F","#5F6B6D","#8AD4EB","#FE9666","#A66999",
"#3599B8","#DFBFBF","#4AC5BB","#5F6B6D","#FB8281","#F4D25A","#7F898A","#A4DDEE","#FDAB89","#B687AC","#28738A","#A78F8F",
"#168980","#293537","#BB4A4A","#B59525","#475052","#6A9FB0","#BD7150","#7B4F71","#1B4D5C","#706060","#0F5C55","#1C2325"],
"visualStyles":
{"*":{"*":
{"visualHeader":[{"show":true,
"showVisualInformationButton":false,
"showVisualWarningButton":false,
"showVisualErrorButton":false,
"showDrillRoleSelector":false,
"showDrillUpButton":false,
"showDrillToggleButton":false,
"showDrillDownLevelButton":false,
"showDrillDownExpandButton":false,
"showPinButton":false,
"showFocusModeButton":false,
"showSeeDataLayoutToggleButton":false,
"showFilterRestatementButton":false,
"showOptionsMenu":true}]}}}}

Con este código, poniendo true o false según nos interese, podemos ocultar o mostrar programáticamente vía tema personalizado los encabezados de los objetos visuales, actuando sobre todos por defecto de esa manera o, si solo queremos que actúe en un objeto visual concreto, simplemente debemos sustituir el segundo asterisco por el nombre que la visual tiene en inglés (p. ej. Pie Chart)

El tema aparece con extensión .pdf pero es un .json, sólo hay que cambiarle la extensión y funciona.

#PowerBI tips: Crear una visualización en la que el eje sea dinámico.

En todos los cursos de #PowerBI que imparto yo también aprendo algo. Siempre reto a mis alumnos a que me pregunten algo que no hayan visto resuelto en ningún sitio y en este último curso no podía ser menos.

Me planteó un alumno lo siguiente: «Quiero poder elegir el atributo dimensional que yo quiera, familia o subfamilia que están en la tabla de productos o país que está en la tabla de clientes, o cualquier otro y simplemente con elegir ese atributo, que tendré en una slicer, debe representarme en cualquier visual las ventas teniendo como eje ese atributo dimensional».

En un principio mi respuesta fue obvia, utilizamos tres tablas diferentes y las mostramos u ocultamos a nuestro antojo con marcadores a lo que él me dijo, eso ya sé que se puede hacer, quiero saber si se puede hacer con cálculos DAX, sin usar marcadores.

Justo ese día estábamos viendo la función TREATAS y me pareció una vía para poder hacerlo, ya que no quería darle una respuesta compleja de crear la dimensión usando CROSSJOIN ni relaciones muchos a muchos, esas vías las había visto en algunos blogs, se podían conseguir pero no acababan de convencerme. Busqué algo más sencillo. Así que me puse manos a la obra. 1º necesitaba mi tabla de selección de la dimensión. Muy simple:

No hay texto alternativo para esta imagen

En segundo lugar, un poco más complejo, necesitaba mi tabla en la que unir todos mis valores únicos de cada una de los atributos dimensionales propuestos, pero con la unión de las columnas con sus elementos únicos con VALUES en una misma tabla estaba conseguido:

Crear tabla:

Dimension =

FILTER(

UNION(

VALUES(dProductos[Familia]);

VALUES(dProductos[SubFamilia]);

VALUES(dClientes[Pais]));

NOT(ISBLANK(dProductos[Familia])))

El FILTER simplemente es para cargarme a mi amigo el elemento desconocido que devuelve el blanco como uno de los valores únicos de una columna ya que existen productos sin Familia o sin Subfamilia y podrían existir, aunque no es el caso, clientes en los que no estuviera informado el País.

El nombre del campo de la tabla resultante lo cambiamos por «Nombre»

* Nótese que ni siguiera voy a necesitar clasificar los diferentes elementos de la dimensión en su nivel.

Y por último, faltaba crear mi medida de ventas dimensional, que mostrará un eje u otro dependiendo del slicer seleccionado:

VentasDimension =

var DimensionX=SELECTEDVALUE(‘dDimensión'[Dimension])

return

SWITCH(TRUE();

DimensionX=»Familia» ; CALCULATE([Ventas];TREATAS(VALUES(‘Dimension'[Nombre]);dProductos[Familia]));

DimensionX=»Subfamilia»; CALCULATE([Ventas];TREATAS(VALUES(‘Dimension'[Nombre]);dProductos[SubFamilia]));

DimensionX=»Pais»;CALCULATE([Ventas];TREATAS(VALUES(‘Dimension'[Nombre]);dClientes[Pais]));

BLANK())

Y el resultado, tan sorprendente como esperado:

No hay texto alternativo para esta imagen
No hay texto alternativo para esta imagen
No hay texto alternativo para esta imagen

Gracias @Eduardo Hernanz Moreno por el reto, que creo que queda sobradamente resuelto.