La función Table.Sort devuelve una tabla tras ordenarla según uno o más campos.
Table.Sort(
table as table,
comparisonCriteria as any
) as table
- table: tabla a ordenar
- comparisonCriteria: criterios de ordenación
El parámetro comparisonCriteria puede tomar tres formas:
Nombre de un campo
Si el criterio de ordenación se reduce a un único campo, el parámetro comparisonCriteria puede ser simplemente el nombre de dicho campo:
Table.Sort(
nombre-de-tabla,
"nombre-de-campo"
)
Lista conteniendo el nombre de un campo y el orden
El nombre del campo mencionado en el apartado anterior puede complementarse con el orden de ordenación (ascendente o desdencente). En este caso el parámetro comparisonCriteria será una lista conteniendo ambos valores:
Table.Sort(
nombre-de-tabla,
{"nombre-de-campo", criterio-de-ordenación}
)
Lista de criterios
Por último, si se desea ordenar la tabla según más de un campo, el parámetro comparisonCriteria será una lista cuyos elementos serán, o bien nombres de campos, o listas conteniendo pares de valores: nombres de campos y el orden:
Table.Sort(
nombre-de-tabla,
{
"nombre-de-campo",
{"nombre-de-campo", criterio-de-ordenación},
{"nombre-de-campo", criterio-de-ordenación},
"nombre-de-campo"
}
)
En este ejemplo partimos de la siguiente tabla conteniendo productos y sus precios, ordenada inicialmente según el identificador del producto:
let
table = Table.FromRecords(
{
[id = 1, name = "glasses", price = 250],
[id = 2, name = "computer", price = 800],
[id = 3, name = "pen", price = 6],
[id = 4, name = "mouse", price = 12]
}
)
in
table
Podemos ordenarla según el campo "price" con el siguiente código:
let
table = Table.FromRecords(
{
[id = 1, name = "glasses", price = 250],
[id = 2, name = "computer", price = 800],
[id = 3, name = "pen", price = 6],
[id = 4, name = "mouse", price = 12]
}
)
in
Table.Sort(
table,
"price"
)
Siguiendo con el mismo ejemplo, podemos ordenar la tabla según el mismo campo pero en sentido descendente con el siguiente código:
let
table = Table.FromRecords(
{
[id = 1, name = "glasses", price = 250],
[id = 2, name = "computer", price = 800],
[id = 3, name = "pen", price = 6],
[id = 4, name = "mouse", price = 12]
}
)
in
Table.Sort(
table,
{
{"price", Order.Descending}
}
)
Es posible ordenar la tabla según dos o más campos. Por ejemplo, la siguiente tabla incluye el nombre del producto, su color y el precio:
let
table = Table.FromRecords(
{
[id = 1, name = "mouse", color = "blue", price = 12],
[id = 2, name = "glasses", color = "red", price = 250],
[id = 3, name = "pen", color = "green", price = 6],
[id = 4, name = "glasses", color = "blue", price = 250],
[id = 5, name = "pen", color = "red", price = 6],
[id = 6, name = "computer", color = "black", price = 800]
}
)
in
table
Podemos ordenarla según el nombre y, en caso de igualdad, según el color con el siguiente código:
let
table = Table.FromRecords(
{
[id = 1, name = "mouse", color = "blue", price = 12],
[id = 2, name = "glasses", color = "red", price = 250],
[id = 3, name = "pen", color = "green", price = 6],
[id = 4, name = "glasses", color = "blue", price = 250],
[id = 5, name = "pen", color = "red", price = 6],
[id = 6, name = "computer", color = "black", price = 800]
}
)
in
Table.Sort(
table,
{"price", "color"}
)
Obsérvese que, por ejemplo, el producto "glasses" aparece en la tabla original primero con el color "red" y después con el color "blue", mientras que, en la tabla ordenada, aparece primero la fila con el color "blue" pues el criterio de ordenación es alfabético y, por defecto, ascendente.
Si quisiéramos que el campo "color" se ordenase (a igualdad del campo "price") en sentido descendente, podríamos conseguirlo con el siguiente código:
let
table = Table.FromRecords(
{
[id = 1, name = "mouse", color = "blue", price = 12],
[id = 2, name = "glasses", color = "red", price = 250],
[id = 3, name = "pen", color = "green", price = 6],
[id = 4, name = "glasses", color = "blue", price = 250],
[id = 5, name = "pen", color = "red", price = 6],
[id = 6, name = "computer", color = "black", price = 800]
}
)
in
Table.Sort(
table,
{
"price",
{"color", Order.Descending}
}
)