Home

#Novedades Power BI Octubre’19. Archivos PBIDS

Una de las novedades aparecidas en la última actualización de octubre es la inclusión de un nuevo tipo de archivo soportado por Power BI Desktop: .pbids

El archivo (.pbids) no es más que una estructura de conexión creada como un json que nos va a permitir, al ejecutarla, conectarnos directamente a un origen de datos previamente configurado en el propio json.

El objetivo es simplificar la experiencia de obtención de datos, pudiendo crear un archivo de conexión para las conexiones de uso común en la organización.

Cuando se abre un archivo PBIDS con Power BI Desktop, se solicitarán (si no están cacheadas en memoria) las credenciales de autentificación que fueran necesarias y luego aparecerá el cuadro de diálogo de navegación en el que el usuario deberá seleccionar la tabla o tablas que desea cargar al modelo.

Os muestro algunos ejemplos que aparecen en la documentación de los json de conexiones:

1º Conexión a una carpeta:

{

  «version»: «0.1»,

  «connections»: [

    {

      «details»: {

        «protocol»: «folder»,

        «address»: {

            «path»: «folder-path-here»

        }       }     }   ] }

https://docs.microsoft.com/en-us/power-bi/desktop-data-sources#using-pbids-files-to-get-data

2º Conexión a un archivo:

{

  «version»: «0.1»,

  «connections»: [

    {

      «details»: {

        «protocol»: «file»,

        «address»: {

            «path»: «path-here»

        }       }     }   ] }

https://docs.microsoft.com/en-us/power-bi/desktop-data-sources#using-pbids-files-to-get-data

Aunque en la documentación viene como ejemplo de archivos txt, admite cualquier origen de archivo como por ejemplo Excel.

3º Conexión a sql server:

{

  “version”: “0.1”,

  “connections”: [

    {

      “details”: {

        “protocol”: “tds”,

        “address”: {

          “server”: “server-name-here”,

          “database”: “db-name-here (optional)”

        }

      },

      “options”: {},

      “mode”: “Import”

    }   ] } }

https://docs.microsoft.com/en-us/power-bi/desktop-data-sources#using-pbids-files-to-get-data

En la línea de “options” puede incluirse una query de la siguiente forma: “options”: {Query: “select * from tabla”},

Incluyendo en el modelo directamente la tabla seleccionada.


OJO!! Hay que tener en cuenta que cuando pongamos la ruta de la carpeta o de un archivo, cada vez que utilicemos la barra “\” hay que sustitirla por doble barra “\\”

Vamos a poner un ejemplo concreto. Quiero acceder a un Excel de mi escritorio que se llama “prueba.xls”. Para crear el archivo .PBIDS abro el notepad , copio el código de la conexión de protocolo file y sustituyo el path-here por la ruta completa del Excel y lo guardo como .PBIDS

Fíjense en la doble barra al introducir la ruta

Al abrir el archivo prueba.pbids directamente me abre el navegador con la estructura de tablas del Excel:

Entre las limitaciones que encuentro actualmente al uso de los pbids, es que no se pueden configurar más de un origen de datos, de momento. Pero es no obstante una vía más de automatización de las conexiones que puede resultar interesante.

#Mini PowerBI consejos: sustituir blank() por 0

Todos los días se aprende algo nuevo. Y muchas veces en la simplicidad reside el buen gusto.

Seguro que más de una vez os habéis encontrado la molesta tarjetita con el valor (blank) o (en blanco) . !!Horrorosa!!

Hasta hace unos días yo utilizaba la siguiente fórmula para evitarlo:

If ( [Ventas Internet]; [Ventas Internet] ; VALUE(0))

Hasta que llego a mi nuevo trabajo y me encuentro una forma mucho más simple y sencilla de solventar el problema:

[Ventas Internet] + 0

Sencillo, elegante y adiós al (en blanco).

*** Ojo a la utilización de esta medida ya que hay que tener en cuenta que si se utiliza en una tabla devolverá todos los valores para cada dimensión del contexto, salvo que filtremos la no aparición de los valores (0,00)

#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.