Como puede ver, estos datos ya se han transformado en un formato de tableta adecuado para el análisis. Ese proceso, aunque es muy importante, no se cubrirá aquí, pero repasaremos brevemente cada paso.
En el paso de origen, vemos una repetición constante de los pares de valores, que son las horas y los contactos para cada uno de los atributos enumerados anteriormente.
En los Pasos Aplicados , puedes ver el resto de pasos. Eliminamos algunas filas superiores, eliminamos las columnas vacías, limpiamos nuestros valores de texto y los llenamos. Luego, transpusimos nuestros datos, eliminamos el registro vacío, fusionamos las columnas uno y dos, limpiamos nuestros valores de texto nuevamente y transponemos nuestros datos nuevamente.
Creamos un paso personalizado, que examinaremos con más detalle más adelante, extrajimos valores de nuestra lista y finalmente cambiamos el tipo.
Veamos el código completo. Lo que nos interesa aquí es la función List.Zip . Breve resumen, toma una sola lista como parámetro y luego devuelve una lista. Como resultado, vemos que esta lista única en este caso contiene tres listas separadas.
Si examinamos la primera lista, contiene nombres de atributos codificados, solo valores de texto que se ingresaron. La segunda lista contiene referencias de columnas codificadas para los valores de hora. La lista final contiene referencias de columna codificadas para los valores de contacto.
List.Zip luego toma un elemento de cada una de estas tres listas y los combina según su posición en una nueva lista. Por ejemplo, cada primer elemento de esas listas se combina en una nueva lista. Lo mismo ocurre con todos los valores enumerados en segundo lugar en esa lista, y así sucesivamente.
Los valores codificados de forma rígida pueden estar preocupados si es poco probable que los atributos cambien con el tiempo. Entonces, si la próxima vez, no todos los elementos están presentes o existen nuevos elementos, puede tener problemas.
Alteración del código para deshacer el pivote de múltiples columnas dinámicamente
Entonces, ¿cómo hacemos esta dinámica?
Lo primero que hago es revisar el código para ver si hay un lugar donde podamos recoger esos valores de atributo sin tener que diseñar un paso separado para lograrlo. Así que vamos a dar un paso atrás en el código, y este paso RemoveNull es perfecto.
Puede ver que enumera todos los valores de atributo aquí en la columna uno. Podemos usar la interfaz de usuario para extraerlos.
Así que haga clic con el botón derecho en ese encabezado y, debajo, seleccione Agregar como nueva consulta .
Obtenemos esta lista y eso es una buena noticia porque queremos reemplazar esa lista codificada que vimos anteriormente con la dinámica. Todo lo que tenemos que hacer es ordenar los valores.
Comencemos eliminando esos valores nulos. Entonces, dentro de la barra de fórmulas, agregaremos List.RemoveNulls . Como puede ver ahora, todos los elementos se repiten y eso se debe a los pares de valores. Se enumera una vez para las horas.
Y nuevamente, para los contactos, para eliminar esos duplicados, podemos agregar un List.Distinct . Ahora hemos creado esta lógica y todo lo que tenemos que hacer es copiarla y pegarla nuevamente en nuestra consulta de muestra.
En la Consulta de muestra , abra el Editor avanzado y cree un nuevo nombre de variable. Llamémoslo, AttributeList . Luego pegamos el código y ponemos una coma.
Ahora volvamos a nuestro paso personalizado. Dentro de List.Zip, podemos reemplazar esa primera lista por nuestro nombre de variable (AttributeList).
Ahora echemos un vistazo más de cerca a la segunda lista. Sabemos que hace referencia a nombres de columnas, y cada uno de esos nombres de columnas comienza con el mismo atributo que ya tenemos en esa lista seguido de un espacio y un texto "horas".
Solo necesitamos agregar un sufijo a cada elemento. Así que retrocedamos un paso y agreguemos una columna personalizada para crear algo de lógica.
Deshacer el pivote de múltiples columnas dinámicamente: Agregar lógica de columna personalizada
Es solo una columna temporal, por lo que no es necesario que le demos un nombre propio. Lo eliminaremos una vez que hayamos terminado.
Para cambiar los valores de una lista, podemos usar la función List.Transform . Necesitamos transformar los valores en nuestra AttributeList , así que voy a pegar eso.
Aquí en los encabezados, vemos que los valores de texto comienzan con una letra mayúscula y luego el resto es minúscula. Nuestro atributo contiene solo una palabra en mayúscula, por lo que también debemos transformar ese valor de texto. Y podemos usar el guión bajo para acceder a cada elemento de la lista y agregaremos ese sufijo.
Con eso, obtenemos un valor de lista en nuestra columna. No importa cuál seleccione, simplemente haga clic en el lado en el espacio en blanco en cualquiera de ellos aquí.
Debajo de la página, vemos una vista previa de esa lista que hemos creado. Entonces, verá que tenemos esos encabezados de columna que ahora están correctamente enmarcados para que coincidan con los encabezados de columna que vemos aquí con esta lista.
Ahora tenemos los medios para identificar los campos de nuestro registro a los que queremos acceder. Así que abramos nuestro cuadro de diálogo de columna personalizada nuevamente y agreguemos Record.SelectFields . Quiere un registro como registro, por lo que podemos usar ese guión bajo para acceder al registro actual en el que estamos. Y luego le hemos dado una lista con todos esos nombres de campo, así que agregue un paréntesis de cierre y presione OK .
Así que ya no tenemos una lista, pero ahora tenemos un registro. Hagamos clic en el lateral del espacio en blanco nuevamente para ver el contenido de ese registro. Aquí vemos que enumera los nombres de los campos de registro y los valores de los campos de registro.
Pero solo estamos interesados en los valores del campo de registro, por lo que necesitamos extraer eso. Volvamos a nuestro cuadro de diálogo de columna personalizada y agreguemos Record.FieldsValues .
Ahora obtenemos una lista nuevamente y ya no es un registro. Volvemos a hacer clic en el lado del espacio en blanco y verá que ahora tenemos una lista con solo esos valores. Eso se ve bien.
Copiemos la lógica completa que hemos creado, excepto por los últimos paréntesis de cierre. Y ahora podemos eliminar nuestra columna temporal porque ya no la necesitamos.
En nuestra barra de fórmulas, seleccionamos nuestra segunda lista y la reemplazamos con nuestra lógica.
Para crear una lista con los valores de los campos de registro para los contactos, todo lo que necesitamos cambiar es el sufijo. Así que también podemos seleccionar esa última lista y pegarla en nuestra lógica.
Luego, en lugar de hours , cambiemos esto a contactos .
No hay errores y se ve bien. Esta es ahora una solución dinámica para deshacer el pivote de varias columnas.
Así es como elimina dinámicamente varias columnas en mediante List.Zip.
Si aparece un nuevo atributo, AttributeList lo recogerá automáticamente. Y cuando un elemento ya no existe, no estará presente en esa lista.
Espero que hayas disfrutado este. Mire el video completo a continuación para obtener más detalles sobre este tutorial y consulte los vínculos a continuación para obtener más contenido sobre cómo deshacer el pivote de varias columnas en LuckyTemplates.