Vamos a conocer la función Record.Field.
La sintaxis de esta función es registro que es el valor con el que vamos a trabajar, y, campo que es el campo que vamos a recuperar.
Vamos a ver algunos ejemplos, para comprender esta función.
Tenemos una tabla donde tenemos el idproducto, el producto, y, el precio de cada producto en las provincias de Sevilla, Cádiz, y, Córdoba.
El modelo está en formato de tabla, y, se llama ventas.
Tenemos otra tabla, donde tenemos el idproducto, provincia, y, unidades vendidas, esta tabla se llama ventas.
Con una celda dentro de la tabla ventas, vamos a la pestaña de datos, dentro de obtener y transformar, hacemos clic en de una tabla o rango.
Volvemos a cerrar y cargar como una conexión, vamos a la pestaña de datos, dentro de obtener y transformar, desplegamos obtener datos - de otras fuentes. consulta en blanco.
Desde la pestaña de inicio, dentro del grupo consulta, hacemos clic en editor avanzado.
Ponemos la siguiente línea, en la cual hemos creado un registro con los campos IDproducto, nombre, y, teléfono, y, como argumento campo, hemos dicho que nos devuelva el campo IDproducto.
let
Origen =
Record.Field([IDproducto = 1, Nombre = "Aspiradora", Telefono = "123-4567"], "IDproducto")
in
Origen
Nos devuelve 1.
Vamos a ver otro ejemplo, con las tabla de productos, y, ventas.
Volvemos a Power Query.
Voy a duplicar la consulta productos, haciendo clic con botón alternativo de ratón sobre la consulta, y, seleccionamos duplicar.
Agregamos un nuevo paso, para ello, hacemos clic en el siguiente icono.
Aparece el último paso.
Vamos a usar la función Table.AddColumn para agregar una nueva columna.
= Table.AddColumn(#"Tipo cambiado"
Coma, el siguiente argumento es el nombre que le vamos a dar a la columna, voy a poner registro.
= Table.AddColumn(#"Tipo cambiado", "Registros"
Coma, ponemos la palabra each, que significa para cada.
= Table.AddColumn(#"Tipo cambiado", "Registros", each
Ponemos el nombre de la tabla productos, cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado", "Registros", each Productos)
Obtenemos una columna con tablas, todas las tablas en cada fila es la misma.
Si hacemos clic en cualquier celda donde tenemos table, vemos en la parte inferior la tabla productos, en todas las celdas, aparece dicha tabla.
Con la función Record.Field, debemos de trabajar con un registro, por lo que después del nombre de la tabla, abro unas llaves (índice posicional), y, pongo el valor cero, es decir, el primer registro.
= Table.AddColumn(#"Tipo cambiado", "Registros", each Productos{0})
Vemos que ahora aparece la palabra registro (record).
En todas las filas tenemos el registro 1, podemos verlo en la parte inferior.
Esto esta bien, pero me gustaría que, en cada fila, o, cada celda, aparezca cada producto, ya sabemos que Power Query, trabaja en base cero, es decir, que el primer elemento tiene el valor de cero, si entre las llaves (índice posicional), entre corchetes, pongo la columna Idproducto.
= Table.AddColumn(#"Tipo cambiado","Registros", each Productos{[Idproducto]})
Me devuelve una columna con la palabra record, pero empezando desde el registro 2, porque para Power Query, el índice 1, es el registro dos, por eso el ultimo registro nos devuelve error, porque no existe.
Simplemente, vamos a restar uno a la columna Idproducto.
= Table.AddColumn(#"Tipo cambiado","Registros", each Productos{[Idproducto]-1})
Y, ya lo tenemos.
Pero, queremos traernos el campo producto, para ello, voy a agregar un nuevo paso, después del signo igual, usamos la función Table.AddColumn, y, como argumento tabla, es el nombre del paso.
= Table.AddColumn(Personalizado1
Coma, ahora, ponemos el nombre que le vamos a dar a la columna.
= Table.AddColumn(Personalizado1, "Campo.Producto"
Coma, ponemos la palabra each (para cada).
= Table.AddColumn(Personalizado1, "Campo.Producto", each
Ponemos la función Record.Field, y, abrimos un paréntesis.
= Table.AddColumn(Personalizado1, "Campo.Producto", each Record.Field(
Entre corchetes, ponemos el nombre de la columna con la que vamos a trabajar, que es el argumento registros.
= Table.AddColumn(Personalizado1, "Campo.Producto", each Record.Field([Registros]
Coma, y, entre comillas dobles, ponemos el nombre del campo a recuperar, que es el argumento campo.
= Table.AddColumn(#"Tipo cambiado","Registros", each Record.Field([Registros], “Producto”)
Cerramos paréntesis de Record.Field, y, de Table.AddColumn.
Aceptamos.
= Table.AddColumn(Personalizado1, "Campo.Producto", each Record.Field([Registros], "Producto"))
Vemos que obtenemos una columna llamada Campo.Producto, con cada producto para cada fila.
Si queremos que aparezcan los productos en la columna de registros, sin la columna Campo.Producto, seleccionamos el paso personalizado1, y, hacemos la siguiente modificación.
= Table.AddColumn(#"Tipo cambiado","Registros", each Record.Field(Productos{[Idproducto]-1},"Producto"))
Eliminamos el último paso.
Veamos otro ejemplo.
Vamos a usar el modelo que suelo usar frecuentemente, ventas de productos en diferentes centros comerciales, provincias, y, fechas, pero no tenemos la columna de precio.
El modelo está en formato de tabla, y, se llama ventas.
Tenemos otra tabla, llamada precios, donde tenemos el producto, y, el precio de cada producto.
Queremos obtener el precio de cada producto en la tabla ventas, para ello, con una celda dentro de la tabla ventas, vamos a la pestaña de datos, dentro de obtener y transformar, hacemos clic en de una tabla o rango.
Cerramos y cargamos como una conexión, y, nos llevamos la tabla precios.
Agregamos un nuevo paso, para ello, hacemos clic en el siguiente icono:
Aparece el último paso, después del signo igual, ponemos la función Table.AddColumn, abrimos un paréntesis, y, dejamos el ultimo paso como argumento tabla.
= Table.AddColumn(#"Tipo cambiado"
Coma, el siguiente argumento es el nombre que le vamos a dar a la columna, voy a poner precios.
= Table.AddColumn(#"Tipo cambiado","Precios"
Coma, ponemos la palabra each (para cada).
= Table.AddColumn(#"Tipo cambiado","Precios", each
Ponemos el nombre de la consulta precios, cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado","Precios", each Precios)
Obtenemos una columna rellena de tablas, la tabla precios, todas las tablas en cada fila son las mismas, lo podemos ver señalando una celda, en la parte inferior.
Pero, para comparar producto de la tabla precios con producto de la tabla ventas, tengo que acceder a la columna producto de la tabla ventas, para ello, en la barra de fórmulas, después del nombre de la consulta precios, uso el índice posicional, y, como valor pongo cero, para que me devuelva el primer registro.
Ahora, aparece la palabra record (registro), en todos los registros aparece el producto 1, porque estamos accediendo al primer registro, podemos verlo en la parte inferior.
Lo siguiente es comparar la columna productos de la tabla precios, con la columna producto de la tabla ventas, y, en caso de haber coincidencia, que nos devuelva el precio, para ello, vamos a usar la función Recorf.Field, que la ponemos después de la palabra each, y, abrimos un paréntesis.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(
Como argumento registro, es la expresión que había antes de esta función, es decir, la tabla precios, junto con el índice posicional.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{0}
Pero, ahora debemos de referirnos a toda la columna productos de la tabla precios, para ello, borramos el valor cero dentro del índice posicional, y, entre corchetes, ponemos la columna de productos.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{[Productos]}
Nos colocamos antes del cierre de corchetes de la columna de productos, ponemos el signo igual, y, ponemos la columna de producto de la tabla ventas entre corchetes, cerramos el corchete de la columna productos.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{[Productos=[Producto]]}, "Precios") )
Después de la llave de cierre, ponemos coma, y, en el argumento campo, ponemos entre comillas dobles la columna Precios.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{[Productos=[Producto]]}, "Precios"
Cerramos paréntesis de Record.Field, y, de Table.AddColumn.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{[Productos=[Producto]]}, "Precios") )
Aceptamos, y, tenemos el precio para cada producto.
Ahora, después del cierre de paréntesis de la función Record.Field, multiplicamos por la columna cantidad para obtener el total.
= Table.AddColumn(#"Tipo cambiado","Precios", each Record.Field(Precios{[Productos=[Producto]]}, "Precios" )*[Cantidad] )
Ya tenemos el total.
Volvemos a las tablas del primer ejemplo, ventas y productos.
Queremos añadir una nueva columna, donde tenemos que calcular el precio del producto por provincia.
Pues, decir que la expresión a usar es la misma que hemos usado en el ejemplo anterior, la diferencia es que el argumento campo de Record.Field, en provincia.
= Table.AddColumn(#"Tipo cambiado","Precio", each Record.Field(Productos{[Idproducto=[Idproducto]]}, [Provincia]))
En este caso, para cada producto que sea igual a producto de la tabla ventas, va a rescatar la provincia, vuelve a la tabla de productos, y, selecciona dicha provincia, devolviéndonos el valor.
Agregamos una columna personalizada, desde la pestaña agregar columna, como nombre, le ponemos total, y, multiplicamos unidades por precio.
Aceptamos.
Ponemos la columna precio, y, total en formato de número.
Cerramos y cargamos como una conexión.
En la ventana de consultas y conexiones, a la derecha, hacemos clic con botón alternativo de ratón sobre la consulta ventas, y, seleccionamos cargar en.
Se abre la ventana de importar datos, marcamos tabla, y, en una hoja de cálculo nueva.
Aceptamos.
Ya tenemos nuestra tabla en nuestra hoja de cálculo.
Comments