La función Table.PositionOfAny devuelve la posición de la primera aparición de cualquiera de las filas indicadas.
Table.PositionOfAny(
table as table,
rows as list,
optional occurrence as nullable number,
optional equationCriteria as any
) as any
- table: tabla en la que realizar la búsqueda
- rows: filas a buscar
- occurrence: (opcional) tipo de ocurrencia
- equationCriteria: (opcional) criterio de comparación de valores
Si no se encuentra ninguna fila, la función devuelve el valor -1.
La primera fila recibe el índice 0.
El tipo de ocurrencia puede ser:
En este último caso la función devuelve una lista con los índices de las ocurrencias. Si no se encontrase ninguna ocurrencia, la función devolvería una lista vacía.
En este primer ejemplo buscamos la primera ocurrencia de dos filas que no se encuentran en la tabla:
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 13, name = "Diego"],
[id = 24, name = "Lucía"]
}
)
Comprobamos que la función devuelve el valor -1.
Siguiendo con el mismo ejemplo, si añadimos en la lista de filas a buscar alguna que sí se encuentre en la tabla, la función devuelve su índice:
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 13, name = "Diego"],
[id = 21, name = "Alfonso"]
}
)
1
Con el parámetro occurrence podemos controlar la ocurrencia a devolver: la primera, la última o todas. En este ejemplo una de las filas buscadas -la única que aparece en la tabla- aparece dos veces, en las posiciones (índices) 3 y 5:
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"],
[id = 17, name = "Ángeles"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 13, name = "Diego"],
[id = 8, name = "Paul"]
},
Occurrence.All
)
Si, en el caso anterior, la tabla incluye ocurrencias de más de una fila, la función devolverá todos los índices. En el siguiente ejemplo la tabla incluye las dos filas buscadas (y una de ellas aparece dos veces):
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"],
[id = 17, name = "Ángeles"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 15, name = "John"],
[id = 8, name = "Paul"]
},
Occurrence.All
)
El parámetro equationCriteria nos permite determinar el criterio de igualdad. Por ejemplo, las mayúsculas y minúsculas son consideradas, por defecto, letras diferentes, de ahí que no se encuentre la aparición de la fila conteniendo el texto "paul":
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"],
[id = 17, name = "Ángeles"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 35, name = "Diego"],
[id = 8, name = "paul"]
}
)
-1
Si añadimos como cuarto parámetro la función Comparer.OrdinalIgnoreCase, la búsqueda ya devuelve un valor diferente de -1:
let
table = Table.FromRecords(
{
[id = 15, name = "John"],
[id = 21, name = "Alfonso"],
[id = 33, name = "Marta"],
[id = 8, name = "Paul"],
[id = 17, name = "Ángeles"],
[id = 8, name = "Paul"]
}
)
in
Table.PositionOfAny(
table,
{
[id = 35, name = "Diego"],
[id = 8, name = "paul"]
},
null,
Comparer.OrdinalIgnoreCase
)
3