Traer como origen una tabla de un conjunto de datos de Power BI y limpiar nombres de columnas.

Traer como origen una tabla de un conjunto de datos de Power BI y limpiar nombres de columnas.

Una pregunta tremendamente habitual: ¿Cómo puedo acceder los datos de mi modelo?

¿Sabíais que podemos conectarnos desde un flujo de datos a un conjunto de datos? Esto no está muy extendido ni documentado, pero se puede utilizar la conexión al cubo de analysis services que se crea en el servicio de Power BI desde cualquier Power Query, bien desde el desktop, bien desde power Query online o incluso desde Excel.

            Para ello simplemente tenemos que copiar la url de conexión que nos encontramos en la configuración del área de trabajo. Sólo la muestra en áreas Premium per user, pero, aunque no se tenga licencia ppu se puede marcar el área como Premium per user un momento para copiar la url. O más fácil todavía, siempre tienen el siguiente esquema: powerbi://api.powerbi.com/v1.0/myorg/[NOMBRE AREA TRABAJO] Luego simplemente nos vamos a nuestro flujo de datos y creamos una nueva consulta con el conector de Analysis Services, que por desgracia no encontrareis, (al menos a día de hoy 20/10/2021). Sin embargo, si se admite la función de M para conectarse por lo que, donde no llega la interfaz… llega M. El conector es Analysis.Services.Database y requiere un servidor, que tenemos, un database, que es el nombre del modelo y en las options es necesario elevar una Query nativa

Pues bien, voy a extraer con esta función dimFechas de un dataset que tengo en ese área de trabajo


let
  Consulta1 = AnalysisServices.Database("powerbi://api.powerbi.com/v1.0/myorg/Prueba Eliminacion", "Prueba Eliminacion", [Query="evaluate dimFechas", Implementation="2.0"])

in 
Consulta1


donde 



let
  Consulta1 = AnalysisServices.Database("powerbi://api.powerbi.com/v1.0/myorg/
Prueba Eliminacion", //Este es el nombre del área de trabajo
 "Prueba Eliminacion",  // Este es el nombre del conjunto de datos
[Query="evaluate dimFechas", //Este es el nombre de la tabla que queremos importar, precedida de evaluate ya que debe ser una expresión DAX
Implementation="2.0"])

in 
Consulta1

El resultado, nuestra tabla del dataset en nuestro Dataflow.

El pequeño problema que nos encontramos es el nombre de la columna que en este tipo de orígenes devuelve el nombre de la tabla y entre corchetes el nombre de la columna. Son un total de 28 columnas esa tabla así que podemos ir una a una cambiando los nombres o seguir haciendo magia con M:

Paso1_ExtraerNombres= Table.Columnames(Consulta1)

Este paso nos crea una lista con todos los nombres de las columnas.

Paso2_Reemplazar1=  List.ReplaceValue( Paso1_ExtraerNombres, “dimFechas[“,”” Replacer.ReplacerText),

En este paso estamos reemplazando DimFechas[ por “”  

Paso3_Reemplazar2=  List.ReplaceValue( Paso2_Reemplazar1, “]“,”” Replacer.ReplacerText),

En este paso estamos reemplazando el ultimo corchete ] por “”  

De esta manera ya tenemos nuestra lista de columnas limpia y sólo falta devolverla a su sitio:

En el último paso de cambiar nombres, Cambiamos los nombres de la columna de la tabla original que era Consulta 1 y mediante List.Zip extraemos los nombres de las columnas existentes en ese momento cambiándolas por la lista definitiva del Paso3 Reemplazar2

Este es el código final resultante:

let
  Consulta1 = AnalysisServices.Database("powerbi://api.powerbi.com/v1.0/myorg/Prueba Eliminacion", "Prueba Eliminacion", [Query="evaluate dimFechas", Implementation="2.0"]),
  Paso1_ExtraerNombres = Table.ColumnNames(Consulta1),
  Paso2_Reemplazar1 = List.ReplaceValue(Paso1_ExtraerNombres, "dimFechas[", "", Replacer.ReplaceText),
  Paso3_Reemplazar2 = List.ReplaceValue(Paso2_Reemplazar1, "]", "", Replacer.ReplaceText),
  CambiarNombres = Table.RenameColumns(Consulta1 , List.Zip({Table.ColumnNames(Consulta1), Paso3_Reemplazar2}))
in
  CambiarNombres

Este ejercicio lo he hecho en Dataflows, pero también podemos conectarnos a cualquier tabla de nuestro conjunto de datos de power bi desde otro archivo de power bi o desde Power Query en Excel.

De verdad seguís exportando tablas del modelo con dax studio o copiando directamente desde el desktop tablas estáticas sin conectaros directamente al modelo.

Insisto esta capacidad no es exclusiva del licenciamiento premium, se puede realizar esta conexión con licencia pro.

Todos estos tips y muchos más en mi próximo libro:

Power BI Dataflows.

15% de descuento preinscribiéndose en el siguiente formulario:

forms.office.com

Francisco Mullor Cabrera

3 comentarios

Raul Publicado el8:17 am - 26/10/2021

Siempre aportando sabiduría! Gracias!
Te recomiendo este código para renombrar las columnas…
= Table.TransformColumnNames( Origen,each Text.BetweenDelimiters(_, «[«, «]»))

    Francisco Mullor Publicado el6:03 pm - 26/10/2021

    Cierto muchas veces damos vueltas innecesarias para llecar a lo mismo. Se me pasó la función Table.TransformColumnNames

Jose Maldonado Publicado el7:06 am - 27/10/2021

Magnifico como siempre Francisco. Gracias por tus aportes.

Deja una respuesta