Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Power Query: Trabajar con Records

Deberíamos empezar por definir, lo mejor posible este concepto tan amplio y vago, un Record es un conjunto de valores... pero es mucho más.
Incluso podríamos categorizarlos en dos grandes conjuntos:
- originales: esto es, sin ningún tratamiento, datos puros (aaa, 123, 12/1/21, FALSE, etc)
- elaborados: construidos a partir de estos originales, o incluso otros previamente elaborados
Lo más importante es que cualquier Record se debe escribir entre corchetes [ ... ] (si revisas la entrada donde explcamos cómo crear tablas verás varios ejemplos de Records).
Por ejemplo: [País="ES", Importe=400]

¿Por qué es importante aprender algo más de un Record?.. bueno, básicamente por dos motivos:
1- acceder o trabajar con filas de nuestras tablas
2- para pasarlo como parámetro a una función M
y muchos más, claro :-)

Yendo al 'meollo' del asunto.. ¿cómo podemos crear Records?
Como mencioné antes, siempre detallando las partes del registro entre corchetes [...].
Un ejemplo más elaborado que el previo sería el siguiente, donde podemos ver que un registro/Record admite diferentes formatos de dato. Escribimos en nuestro editor avanzado dentro de Power Query:
[Nombre= "Ismael",
Ciudad_País="Madrid - España",
Antigüedad=10,
Activo= true,
Ranking dos años={2,5},
Ventas=[a20=1200,a19=1100,a18=900],
Comerciales=#table({"Región", "Comercial"},{{"ES","Juan"},{"PT","Ana"}}),
Cálculo= (IPC)=>1+IPC]


Vemos el aspecto de nuestro registro/Record

Comprobamos como cada parte de nuestro registro contiene un tipo de dato distinto: Table, Function, List, texto, número, fecha...

Otra forma de crear registros/Records es empleando funciones M. Dos de las más relevantes:
- Record.FromList(list as list, fields as any) as record
que crea un record a partir de una lista de valores y una lista de nombres. Incluso podemos definir el tipo de dato asociado a cada campo:
Record.FromList({1, "ES", 123}, type [ID = number, País = text, Ventas = number])
- Record.FromTable(table as table) as record
de forma similar, a partir de una tabla, construimos un registro.

Existe un mundo de funciones M nativas vinculadas con el uso de los registros; de hecho tienen su propia categoría.

Finalmente, un uso interesante de los registros es obtener un Record de la fila de una tabla
, sencillamente refiriéndonos a una de las filas de nuestra tabla (recuerda que empleamos las llaves {} para esto - y que la numeración tiene base cero).
Table{número fila en base 0}
Por ejemplo
let
Origen = Table.FromRecords({[País="ES",Importe=1],
[País="ES",Importe=20],
[País="PT",Importe=300],
[País="PT",Importe=4],
[País="FR",Importe=50]},
type table[País = Text.Type, Importe = Currency.Type]){1} //obtenemos la segunda fila de la Tabla!
in
Origen

Dato interesante!!. Para referirnos a la fila corriente, al crear una columna personalizada, empleamos el guión bajo '_', que equivale de alguna manera al registro correspondiente.
Por ejemplo, para sumar datos de dos columnas empleando este truco, podríamos hacer:
let
Origen = #table({"Año 2020","Año 2019"},{{100,200},{110,190},{150,150}}),
Add_Suma = Table.AddColumn(Origen, "Total Ventas", each List.Sum(Record.ToList(_)))
in
Add_Suma


En este caso nos hemos referido a todos los elementos de la fila corriente, esto es, del registro... el cual, con Record.ToList convertimos en una 'lista' para luego poder operar sobre todos sus elementos con List.Sum.

Un último apunte que nos servirá para recuperar un elemento de nuestro registro.
Para obtener un dato concreto bastará referirnos a la columna deseada, indicándola entre corchetes []. Por ejemplo, del registro:
[País="ES", UDS=100, Ventas=2568]
para recuperar las Unidades, nos referiremos a ese campo, como:
[País="ES", UDS=100, Ventas=2568][UDS]

Alternativamente podríamos hacer uso de la función M:
Record.SelectFields(record as record, fields as any, optional missingField as nullable number) as record
que nos devuelve un registro solo con el/los campos indicados!.
Por ejemplo
let
MiRegistro=[País="ES", UDS=100, Ventas=2568],
Calc=Record.SelectFields(MiRegistro,{"UDS","Ventas"})
in
Calc

O también para recuperar el registro completo...
let
MiRegistro=[País="ES", UDS=100, Ventas=2568],
// o haciendo uso de Record.FieldNames para todos los campos
Calc=Record.SelectFields(MiRegistro,Record.FieldNames(MiRegistro))
in
Calc

Y esta podría ser una introducción al fascinante mundo de los registros en Power Query ;-)


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

Power Query: Trabajar con Records

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×