Table.TransformRows Table.Transformcolumns
- Jaime Franco Jimenez

- 16 jun 2023
- 5 Min. de lectura
Vamos a hablar de las funciones Table.TransformRows, y, Table.Transformcolumns.
La función Table.TransformRows crea una lista aplicando una operación a cada fila de la tabla.
Sintaxis
Table.TransformRows(table as table, transform as function) as list
Esta función tiene el argumento table, que es la tabla con la que vamos a trabajar, el siguiente argumento es transform, que es la transformación que vamos a realizar con cada fila.
La función nos va a devolver una lista.
Vamos a ver un ejemplo, vamos a la pestaña de datos, dentro de obtener y transformar datos, desplegamos obtener datos, desplegamos de otras fuentes, y, seleccionamos consulta en blanco.
Hacemos clic con botón alternativo de ratón sobre la consulta, y, seleccionamos editor avanzado.

Borramos las dobles comillas dobles después de Origen.
Después de Origen ponemos la función Table.TransformRows, y, abrimos un paréntesis.

Pulsamos enter.
Vamos a crear una tabla de tres registros con tres columnas, para ello, ponemos la función Table.FromRecords, abrimos un paréntesis, y, unas llaves, porque debemos de proporcionar una lista.

Pulsamos enter.
Abrimos un corchete, para dar de alta el primer registro, como nombre de la primera columna, ponemos Producto, ponemos el signo igual, ponemos, por ejemplo, Lavadora entre comillas dobles, ponemos coma, la siguiente columna se va a llamar Cantidad, ponemos el signo igual, y, una cantidad, coma, la siguiente columna se va a llamar Precio, ponemos el signo igual, y, ponemos un precio, cerramos corchete, y, ponemos coma.

Enter, repetimos la operación anterior, y, damos de alta dos registros más, en el último registro, no debemos de poner coma, porque no vamos a dar de alta más registros.
Cerramos llaves, cerramos paréntesis.
Ponemos coma.

Este es el argumento tabla de Table.TransformRows.
Ahora, viene el argumento transform, vamos a crear una variable, o, parámetro, por ejemplo, se va a llamar fila, debe de ir entre paréntesis, ponemos la palabra as, dejamos un espacio, ponemos la palabra record, es decir, que nos devuelva un registro, ponemos el signo igual, seguido del operador de comparación mayor, abrimos un corchete, declaramos otra variable, o, parámetro, ponemos el signo igual, vamos a pasar los valores de la columna cantidad a texto, para ello, después del signo igual, ponemos la función Number.ToText, que pasa un formato de numero a texto, abrimos un paréntesis, ponemos la variable fila, que tiene almacenada las columnas producto, cantidad, y, precio, abrimos corchete, ponemos la columna Cantidad, cerramos corchete, cerramos paréntesis de Number.ToText, cerramos corchete, cerramos paréntesis de Table.TransformRows.

Dentro de in, ponemos la variable Origen.

Hacemos clic en listo, y, tenemos una columna, donde en cada fila, tenemos un registro (record).

Si hacemos clic, por ejemplo, en el primer registro, en la ventana inferior, vemos el numero alineado a la izquierda, quiere decir que esta en formato de texto.

Pero, queremos ver los datos, para ello, vamos a usar la función Table.FromRecords, que convierte registros en una tabla, vamos a usar el primer argumento que es registros, donde ponemos la variable, o, parámetro Origen, cerramos paréntesis.

Hacemos clic en listo, y, vemos los valores de la columna cantidad, alineados a la izquierda.

Ahora, tenemos el siguiente modelo ya cargado en Power Query.

Vemos que por error aparece Sevillas en vez de Sevilla, queremos sustituir Sevillas por Sevilla, para ello, vamos a agregar un nuevo paso, para ello, hacemos clic en el siguiente icono:

Vemos que aparece el último paso.

Después del signo igual, ponemos la función Table.TransformRows, abrimos un paréntesis, como argumento tabla, es el paso que nos aparece.

Ponemos coma, ahora viene el argumento transform, es decir, la transformación que vamos a hacer, en este caso, es sustituir Sevillas por Sevilla, ponemos la palabra each (para cada), vamos a usar la función Text.Replace, que es igual que la función SUSTITUIR en Excel, además, tiene los mismos argumentos.

El primer argumento es el texto con el que vamos a trabajar, entre corchetes, ponemos la columna con la que trabajar.

Coma, el siguiente argumento es texto antiguo, entre comillas dobles, ponemos Sevilla.

Coma, el siguiente argumento es texto nuevo, entre comillas dobles, ponemos Sevilla.

Cerramos paréntesis, y, tenemos una columna, que es una lista, donde vemos que Sevillas ha sido reemplazado por Sevilla.

Pero esta lista queremos que forme parte de la tabla, no como una lista única, vamos a duplicar la consulta ventas, y, borramos el último paso.
Agregamos un nuevo paso.
Después del signo igual, vamos a usar la función Table.TransformColumns, como argumento tabla es el paso anterior.

Coma, como argumento operación de transformación, debemos de proporcionar una lista, por lo que abrimos unas llaves.

Dentro de las llaves, debemos de proporcionar el nombre de la columna, entre comillas dobles, con la que vamos a trabajar

Aceptamos, y, vemos como ha sido sustituida Sevillas por Sevilla.

Volvamos a duplicar la consulta, y, borramos el último paso.
Vemos que la columna de cantidad tiene decimales, y, queremos redondear al número más próximo hacia arriba.

Agregamos un nuevo paso.
Ponemos la función Table.TransformColumns, como argumento tabla, es el ultimo paso, ponemos coma, como argumento transform, abrimos unas llaves, dentro de las llaves, entre comillas dobles, ponemos la columna provincia, ponemos la palabra each, ponemos la función Number.RoundUp, como argumento ponemos un guion bajo (_), quiere decir cada valor de la columna provincia, cerramos llaves, cerramos paréntesis.

Aceptamos, y, vemos como ya no aparecen los decimales en la columna de cantidad.

Ahora, tenemos el mismo modelo, en la columna cantidad, por error, algunos números están en formato de texto.

Solo queremos saber aquellos valores de número que estén en formato de texto.

Agregamos un nuevo paso, ponemos la función Table.TransformColumns, como argumento tabla, es el ultimo paso, abrimos unas llaves, dentro de las llaves, entre comillas dobles, ponemos la columna de cantidad.

Coma, ponemos la palabra each, debemos de averiguar si es número, entonces, es válido, ponemos la función Value.Type, que nos devuelve el tipo de valor de cada fila, solo tiene un argumento, que es el valor con el que trabajar, como argumento ponemos el guion bajo (_).
Cerramos paréntesis.

Aceptamos, y, en la columna cantidad aparece Type, si hacemos clic en uno, o, varios de ellos, veremos el tipo de valor.

Vamos a igualar la función Value.Type a Number.Type, esto nos devolverá un valor booleano, VERDADERO donde es número, y, FALSO donde no lo es.


Aquellos valores FALSOS son aquellos números que están en formato de texto.
Podemos cambiar mas de una columna, vamos a duplicar la consulta, y, borramos el último paso.
Usamos Table.TransformColumns, vamos a cambiar Sevilla por España, esta expresión es igual a la que hemos usado en ejemplos anteriores, para añadir mas de una columna, en el argumento transform, sabemos que debe de ser una lista, pues, ahora, es una lista dentro de otra, entonces, abrimos unas llaves, dentro de las llaves, abrimos otras llaves, y, ponemos la expresión anterior, y, cerramos las llaves.

Ponemos coma, abrimos otras llaves, entre comillas dobles, ponemos la columna de producto, volvemos a usar Text.Replace, y, sustituimos aspiradora por Alemania.
Cerramos las llaves de esta columna, cerramos las llaves primeras que abrimos.
Cerramos paréntesis.

Aceptamos, y, vemos como Sevilla ha sido sustituida por España, y, Aspiradora por Alemania.

Miguel Angel Franco




Comentarios