top of page
Foto del escritorJaime Franco Jimenez

List.ContainsAny, List.Contains, Record.ToList, Table.SelectRows

Tenemos el siguiente modelo, que es el que suelo usar frecuentemente.

El modelo esta en formato de tabla, y, se llama Ventas.


Con una celda dentro del modelo, vamos a la pestaña datos, dentro del grupo obtener y transformar datos, hacemos clic en de una tabla o rango.

Queremos filtrar por la provincia de Sevilla.


Agregamos un nuevo paso.

Ponemos el signo igual y la funcion Table.SelectRows, que devuelve de una tabla las filas que coinciden con la condición.


El primer argumento es table, vemos que aparece el ultimo paso, pues, es la tabla con la que vamos a trabajar.


=Table.SelectRows(#"Tipo cambiado"


El siguiente argumento es la condición, ponemos coma, la palabra each (para cada), entre corchetes ponemos Provincia, haciendo referencia a la columna de provincia, igualamos entre comillas dobles a Sevilla, cerramos paréntesis.


= Table.SelectRows(#"Tipo cambiado", each [Provincia]="Sevilla")

 

Tenemos una tabla con la provincia de Sevilla.

También, queremos filtrar por la provincia de Huelva, pues, después de Sevilla, ponemos or, entre corchetes ponemos Provincia e igualamos entre comillas dobles a Huelva.


= Table.SelectRows(#"Tipo cambiado", each [Provincia]="Sevilla" or [Provincia]="Huelva")

 

Tenemos la tabla filtrada por la provincia de Sevilla y Huelva.

También, podríamos usar la funcion List.Contains, que devuelve un valor en una lista, devuelve TRUE si el valor es encontrado, y, FALSE si no ha sido encontrado.


Agregamos un nuevo paso.


Ponemos el signo igual, y, la funcion Table.SelectRows, abrimos paréntesis, el primer argumento es table, vemos que aparece el último paso.


= Table.SelectRows(#"Tipo cambiado"

 

Coma, ponemos la palabra each, ponemos la funcion List.Contains, el primer argumento es lista, pues, entre corchetes ponemos Provincia, el siguiente argumento es value, entre comillas dobles ponemos Sevilla, cerramos paréntesis.


= Table.SelectRows(#"Tipo cambiado", each List.Contains([Provincia],"Sevilla"))


La funcion List.Contains, devuelve un valor booleano, devuelve TRUE si hay coincidencia, y, FALSE si no la hay.


Aceptamos y nos devuelve un error.

Este error es debido a que en el argumento lista se espera una lista, y, estamos pasando una tabla, pues, encerramos entre llaves [Provincia], y, será convertida en una lista.


= Table.SelectRows(#"Tipo cambiado", each List.Contains({[Provincia]},"Sevilla"))

 

Aceptamos y ya solo vemos la tabla con la provincia de Sevilla.

Pero, si queremos que nos devuelva también la provincia de Huelva, la funcion List.Contains no nos vale, porque en esta funcion solo ponemos poner una condición, para ello, debemos de usar funcion List.ContainsAny, que indica si el argumento list incluye alguno de los valores de otra lista.


Los argumentos son los mismos que para List.Contains, pero, en el argumento values debemos de indicar una lista.


Entonces, cambiamos List.Contains por List.ContainsAny, borramos la condición, abrimos llaves, entre comillas dobles ponemos Sevilla, ponemos coma, entre comillas dobles, ponemos Huelva, cerramos llaves.


= Table.SelectRows(#"Tipo cambiado", each List.ContainsAny({[Provincia]},{"Sevilla","Huelva"}))

 

Tenemos el modelo filtrado por las provincias de Sevilla y Huelva.

Seguimos…


Cerramos y cargamos como una conexón.


Nos traemos la tabla de Ejemplo2.


Ahora, tenemos el mismo modelo pero hay dos columnas con provincias, e, igual que antes vamos a filtrar por la provincia de Sevilla.


Si en vez de dos columnas, tenemos mas de dos columnas con provincias, deberíamos de especificar cada columna, pero, lo vamos a realizar refiriéndonos a todas las columnas.


Tenemos una funcion llamada Record.ToList, que solo tiene un argumento que es record (registro), y, devuelve una lista de valores que contienen los valores de record, esta funcion devuelve una lista.


Agregamos una columna personalizada.


En la ventana formula de columna personalizada, ponemos Record.ToList, abrimos paréntesis, como argumento record, ponemos un guion bajo, haciendo referencia a todas las columnas.

Aceptamos, y, tenemos una columna más con List.

En cada lista, tenemos cada registro, lo podemos ver en la parte inferior.


Vamos a pasos aplicados, y, hacemos clic en la rueda dentada.

Después del signo igual usamos List.Contains, el primer argumento es lista, que es la funcion Record.ToList, como argumento value, entre comillas dobles ponemos entre comillas dobles Sevilla.

Es decir, va a buscar entre todas las columnas un valor que sea Sevilla.


Aceptamos.


Se ha añadido una columna con TRUE donde hay coincidencia, y, FALSE donde no la hay.

Vamos a añadir la provincia de Huelva, para ello, igual que antes, hacemos clic en la rueda dentada del paso Personalizada agrega, cambiamos List.Contains por List.ContainsAny, abrimos unas llaves antes de Sevilla, después de Sevilla, ponemos coma, entre comillas dobles ponemos Huelva, cerramos llaves.


Aceptamos, y, tenemos TRUE donde la provincia es Sevilla o Huelva, y, FALSE donde no hay coincidencia.


Vamos a la barra de fórmulas, después del signo ponemos Table.SelectRows, como argumento table es la funcion que tenemos, ponemos coma, la palabra each, como condición entre corchetes ponemos Personalizado, cerramos paréntesis.


= Table.SelectRows(Table.AddColumn(#"Tipo cambiado", "Personalizado", each List.ContainsAny(Record.ToList(_),{"Sevilla","Huelva"})), each [Personalizado])

 

Aceptamos, y, tenemos el modelo filtrado por las provincias de Sevilla, y, Huelva.

Quitamos la columna Personalizado.


Miguel Angel Franco Garcia

2 visualizaciones0 comentarios

コメント


bottom of page