Acabo de terminar de pasar de HubSpot a ActiveCampaign.
Si bien HubSpot parece ser una plataforma increíble para cualquiera en el análisis de datos, simplemente no fue rentable para mi negocio, sin mencionar que algunas de sus características parecen realmente limitadas hasta el punto en que ni siquiera las estaba usando.
La migración de HubSpot a ActiveCampaign no fue una tarea fácil, pero el equipo de ActiveCampaign tiene bastante experiencia en situaciones como la mía y parece que no he sido el único cliente que abandonó HubSpot por AC.
Se encargaron de la mayor parte de la migración, pero al final tuve que limpiar un poco mis listas, exportar las listas de contactos de HubSpot y luego cargarlas en ActiveCampaign. Tengo varias listas en inglés y español y coincidir con los nombres de las columnas en HubSpot y ActiveCampaign fue una pesadilla.
¡Solo echa un vistazo a esta exportación de HubSpot que tiene 272 columnas!
De esas 272 columnas, realmente solo necesitaba 10. Pero aquí está el detalle, también tengo un montón de otras exportaciones de HubSpot que pueden tener de 80 a 300 columnas y siempre necesito solo 10 columnas específicas.
¡Aquí es donde Power Query viene al rescate!
Mis tareas: seleccionar / mantener y cambiar el nombre de las columnas
Mis tareas son simples:
- Necesito reducir el número de columnas a las que necesito específicamente
- Cambie el nombre de las columnas seleccionadas a los nombres que uso en ActiveCampaign para facilitar la importación
Esto suena bastante simple y tengo 2 opciones:
- Realiza manualmente estos pasos en Power Query seleccionando las columnas dentro de la consulta y luego cambia el nombre.
- Usa una mesa auxiliar para hacer las cosas un poco más flexibles en caso de que lo necesites
Voy con la opción 2. Comencemos. Puedes seguir descargando el archivo desde el siguiente botón:
Usar una tabla auxiliar para impulsar transformaciones
Creé la tabla de arriba donde verás 2 columnas:
- KeepColumn: el nombre de la columna de la exportación original que me gustaría conservar
- RenameTo: el nuevo nombre de la columna que quiero mantener
Paso 1: mantener columnas
Lo primero que debemos hacer es tener ambas tablas dentro del Editor de Power Query. Notarás que el archivo ya los tiene a ambos para simplificar el proceso, pero recuerda que puedes conectarte a casi cualquier fuente con Power Query.
Las consultas que tenemos como consultas de origen son:
- HubSpotData: la exportación real desde HubSpot
- HelperTable: la tabla que creé
Creé una consulta de referencia desde HubSpotData para crear una nueva consulta que estoy nombrando Salida («Output»).
Lo siguiente que haré es simplemente hacer clic derecho en cualquier columna de la tabla y presionar la opción «Remove Other Column»:
Mira cómo se ve el resultado de esta operación:
En la barra de fórmulas verás que utiliza una función con el nombre de Table.SelectColumns que requiere una tabla y luego una lista con los nombres de las columnas a mantener. Como solo quiero mantener una columna, solo tiene un nombre, pero puede tener tantos como desees.
Volvamos a la consulta HelperTable y creemos una referencia a partir de ella simplemente haciendo clic derecho y presionando el botón de Reference:
Aquí es donde las cosas se ponen muy interesantes. Cambiemos el nombre de esta nueva consulta a ColumnsToKeep.
Haz clic derecho en la columna KeepColumn y presione la opción Drill Down:
Esto extraerá la columna de la tabla y la transformará en una lista como se muestra a continuación:
Ahora, regresemos a la consulta Salida («Output») y reemplacemos el segundo argumento de la función Table.SelectColumns con el nombre de la consulta que acabamos de crear: ColumnsToKeep. Así es como se verá:
Ahora podemos pasar al paso 2, donde podremos cambiar el nombre de estas columnas.
Paso 2: renombrar columnas
Avancemos y cambiemos el nombre de cualquiera de las columnas dentro de esta consulta y veamos el resultado que nos muestra en la barra de fórmulas:
Observa que esta función (Table.RenameColumns) usa argumentos similares. Primero necesitas la Tabla (#»Removed Other Columns») y luego necesitas una lista de listas con valores emparejados, donde la primera es el nombre actual y el segundo valor es el nuevo nombre de la columna. Es por eso que vemos «Email» como la primera cadena de texto y «ok» como la segunda.
Similar a lo que hicimos antes, creemos una consulta de referencia a partir de la consulta HelperTable y nombremos a esta nueva consulta RenameColumns.
Ahora podemos seguir adelante y simplemente crear un paso personalizado haciendo clic en el ícono fx en la barra de fórmulas y usamos la siguiente fórmula:
= List.Zip( Table.ToColumns( Source ) )
La cual se debería ver así:
¿Qué hizo esta fórmula?
- Primero transformó la tabla en una lista de listas (usando Table.ToColumns)
- Y luego «comprimió» o emparejó los valores de esas listas en varias listas dentro de una lista (usando List.Zip)
Ahora podemos volver a la consulta Salida («Output») y reemplazar el segundo argumento de esa función Table.RenameColumns para que sea así:
= Table.RenameColumns(#»Removed Other Columns»,RenameColumns)
¡Y voilá! Tenemos nuestra solución lista
¿Cuándo deberías usar esto?
¡Siempre que sientas la necesidad de hacerlo!
Utilicé esto porque estaba volviendo y comprobando qué campos personalizados tenía y qué campos me faltaban, por lo que me fue más fácil cambiar los valores de la tabla auxiliar que ir al Editor de consultas y cambiarlos manualmente.
Se recomienda para la «exploración» o esta solución única en la que tuve que hacer una limpieza simple y usar el resultado para importarlo a otro sistema, pero si planeas publicar tu solución en el servicio Power BI, entonces es recomendable que definas explícitamente estas transformaciones en tu consulta de salida sin usar una tabla de Ayuda, solo seleccionando las columnas y luego renombrando manualmente cada columna ya que usar una columna auxiliar podría traer algunos problemas dependiendo de los niveles de privacidad de tus fuentes de datos y cómo planeas combinarlos
Fuera de eso, esto me ahorró tantas horas de trabajo en el pasado que tuve que compartirlo.
Consejo extra: re-ordenar tus columnas
¿Sabías que cuando intentas re-ordenar las columnas de tu tabla utilizas la función Table.Reorder Columns?
Similar a las funciones mostradas anteriormente, también necesitas una tabla como primer argumento y el segundo es una lista con los nombres de las columnas en el orden en que deberían aparecer.
Aquí puedes reemplazar ese segundo argumento como lo desees en el caso de que necesites que tu tabla de salida también tenga un orden o columnas en particular. Puedes usar una técnica similar a la que acabamos de hacer, un desglose simple sobre una columna y usar esa lista de nombres de columna.
Hay muchas otras funciones que trabajan de esta manera y una vez que comiences a comprender cómo funcionan las tablas y listas en Power Query, podrás aprovechar al máximo Power Query.
Gracias Miguel, que talento tiene usted. Voy a digerirlo poniendo en práctica. Saludos.
Genial Miguel, gracias por compartir.
Gracias por compartir esta maravillosa solución usando M. Saludos Miguel
ok! y por qué cuando reordenamos columnas, si luego nos vamos al modelo de datos de tablas no nos cambia el orden de las mismas?
Esto me parece una liada bastante gorda por parte de pBI.. me ha pasado en varias ocasiones.
Fantástica solución, lástima no haberla conocido antes, se me ocurren decenas de proyectos donde lo debería haber aplicado. A partir de ahora será un paso imprescindible en todos mis proyectos.
Para rizar el rizo, va una pregunta. Habría alguna forma de también tener parametrizados en una tabla los tipos de datos de cada columna? Asi se haría tres cosas: eliminar columnas, reordenar y también poner el tipo de datos
Creo que se podría, pero necesitarías de otras lógicas para poder transformar el valor tipo «texto» que viene de la tabla de Excel para transformarlo en un valor tipo «type» que es el que defina el tipo de datos de un valor / campo / columna.
Realmente no es algo trivial y sí depende mucho de cómo deseas hacer la implementación. Usualmente ese tipo de casos donde es necesario definir un esquema de tabla completo (inclusive los tipos de datos) lo he visto a nivel de conectores personalizados de Power BI donde sí creo una tabla en código puro de M que contiene el tipo de datos.
Mi idea es poner el tipo en una tabla de Excel y que power query lo transforme en type. Intentaré darle una vuelto a ver si me sale
probablemente lo más sencillo sea que tengas otra tabla en M puro que traduzca el texto que tienes de Excel al tipo de datos en Power Query.
Algo como:
#table({«Valor de Excel», «Tipo de datos»}, {{«Texto», type text}, {«Número», type number}})
Pueden existir otras implementaciones, pero es lo más sencillo que me viene a la mente.
Saludos y suerte!
Hola buenas tardes, espero me pueda ayudar, necesito realizar una tabla con los dìas de 0-30, 31-60, etc, espero me puedan ayudar a realizarlo ya que quiero llenar eso para poder llenar los datos
Hola Teodoro!
Realmente el contenido de este artículo no habla sobre los temas que planteas, por lo que no creo que te podrían ayudar. Realmente no estoy seguro de entender bien lo que estás buscando, por lo que tampoco te podría recomendar otro artículo dentro de este sitio.
Te recomiendo publicar tu consulta con lujo de detalles en el foro oficial de Power BI en español y así obtener la ayuda de la comunidad en general:
https://community.powerbi.com/t5/Translated-Spanish-Desktop/bd-p/pbi_spanish_desktop