Uso del Filter Query

Si trabajas con Power Automate, sabes que el rendimiento es el rey. Traer 5,000 filas de SharePoint o Dataverse para luego filtrarlas con una acción de «Filtrar matriz» es como pedir todo el menú de un restaurante para solo comerte una aceituna: ineficiente y lento.

Hoy aprenderás a dominar el Filter Query, la herramienta que ejecuta el filtrado directamente en el servidor.

🏗️ 1. Anatomía de una consulta OData.

Una consulta de filtro se compone de tres elementos:

  1. Nombre de la columna: (Ojo: siempre el nombre interno).
  2. Operador lógico: El puente de la condición.
  3. Valor: El dato que buscas (entre comillas simples para texto/fechas).

🛠️ 2. Diccionario Completo de Operadores

A. Operadores de Comparación Relacional

Para comparar valores numéricos, de fecha o de texto exacto.

Operador Significado Ejemplo
eq Equal (Igual a) Status eq 'Active'
ne Not Equal (No es igual a) Priority ne 'Low'
gt Greater Than (Mayor que) Price gt 100
lt Less Than (Menor que) Stock lt 10
le Less or Equal (Menor o igual) Created le '2023-12-31'
ge Greater or Equal (Mayor o igual) Total ge 500

 

B. Operadores Lógicos de Combinación

Para crear filtros complejos con múltiples variables.

  • and: Se deben cumplir todas las condiciones.
    • Country eq 'Spain' and City eq 'Madrid'
  • or: Se debe cumplir al menos una.
    • Category eq 'IT' or Category eq 'RRHH'
  • not: Niega la expresión siguiente.
    • not (Status eq 'Archived')

 

🔍 3. Funciones de Texto Avanzadas

No todo es «igual a». A veces necesitas buscar patrones.

  • startswith(columna, ‘texto’): Registros que empiezan por algo específico.
    • startswith(Title, 'INV-') -> Traerá todas las facturas.
  • endswith(columna, ‘texto’): Registros que terminan por…
    • endswith(Email, '@gmail.com')
  • substringof(‘texto’, columna): El famoso «contiene».
    • substringof('Urgent', Subject) -> Busca la palabra «Urgent» en cualquier parte del asunto.
    • Nota: En Dataverse se suele usar contains(columna, 'texto').

📅 4. El Master en Fechas

El mayor dolor de cabeza de los desarrolladores. Para que funcionen, debes usar expresiones de Power Automate encerradas en comillas simples.

Filtrar por «Hoy»

FechaEntrega eq ‘@{utcNow(‘yyyy-MM-dd’)}’

Elementos de los últimos 30 días

Created ge ‘@{addDays(utcNow(), -30, ‘yyyy-MM-ddTHH:mm:ssZ’)}’

Filtrar por un año específico

year(Fecha) eq 2024

🏆 5. Casos de Uso Reales

Caso A: Filtrar valores nulos (vacíos)

Útil para limpiar reportes antes de enviarlos.

Email ne null o Responsable_Id ne null

Caso B: Filtrar opciones de selección múltiple (Choices)

Si usas Dataverse, recuerda que el filtro suele ir sobre el valor numérico de la opción, no el texto.

statuscode eq 1

Caso C: Búsqueda de IDs en listas de SharePoint

ID eq 45 (Nota: Los IDs son números, no llevan comillas).

🛑 6. Los 3 Errores Prohibidos

  1. Nombres con espacios: Si tu columna en SharePoint se llama «Fecha de Inicio», el OData fallará. Debes buscar el nombre interno en la configuración de la lista. Se verá algo como: Fecha_x0020_de_x0020_Inicio.
  2. El formato de fecha ISO: OData es muy estricto. Asegúrate de que tus fechas siempre tengan el formato yyyy-MM-ddTHH:mm:ssZ.
  3. Límites de delegación: Si tu filtro es demasiado complejo o la columna no está indexada (en SharePoint), el servidor podría ignorar el filtro y devolverte solo los primeros 100-500 registros. ¡Indexa tus columnas!

✅ CASOS PRÁCTICOS

Coincidencia exacta

Solo trae registros de un departamento específico.

Department eq ‘Ventas’
Diferente de

Excluye a los usuarios que ya están desactivados.

Status ne ‘Inactive’
Empieza con (Prefix)

Ideal para códigos de inventario o facturas.

startswith(Title, ‘INV-2024’)
Contiene (Subcadena):

Busca una palabra clave en el asunto (SharePoint).

substringof(‘Urgente’, Subject)
Varias opciones de texto (OR)

Trae registros de dos ciudades a la vez.

City eq ‘Madrid’ or City eq ‘Barcelona’
Mayor que

Filtra ventas que superen un monto para una alerta.

TotalAmount gt 1000
Rango numérico

Registros que estén entre dos valores (ej. stock crítico).

StockAmount ge 10 and StockAmount le 50
Diferente de cero

Para evitar errores de división o cálculos vacíos.

Quantity ne 0
Menor o igual que

Control de presupuesto.

EstimatedCost le 500.50

Nota: Recuerda que las expresiones @{...} se insertan desde el editor dinámico de Power Automate.

Creados hoy

Te permite filtrar bloques donde la fecha de creación es hoy.

Created eq ‘@{utcNow(‘yyyy-MM-dd’)}’
Vencidos (Antes de hoy)

Muy útil para tareas atrasadas.

DueDate lt ‘@{utcNow()}’
Modificados en la última semana

Ideal para filtrar las cosas que estan retrasadas (sin contar el dia de hoy).

Modified ge ‘@{addDays(utcNow(), -7)}’
Fecha fija específica

Te permite filtrar bloques donde la fecha de creación es un dia específico.

ArrivalDate eq ‘2024-12-25’
Registros de un año específico (Dataverse)

Util para filtrar los registros por años especificos.

year(cr6a4_fechadeentrega) eq 2024
El «Filtro de Seguridad»

Trae elementos de «Prioridad Alta» que NO estén «Cerrados» y sean de «Hoy».

Priority eq ‘High’ and Status ne ‘Closed’ and Created ge ‘@{startOfDay(utcNow())}’
Búsqueda por coincidencia y exclusión:

La expresión sirve para obtener una lista de todos los tickets, tareas o usuarios que pertenecen al área de Tecnología (IT) y que ya tienen a alguien responsable asignado.

startswith(Category, ‘IT’) and assigned_to ne null

Nota: Recuerda que las expresiones @{...} se insertan desde el editor dinámico de Power Automate.

Por ID de Usuario (SharePoint)

Filtrar por el autor (usando el ID numérico).

AuthorId eq 15
Por Email de Usuario (Dataverse)

Filtrar por el gmail (usando el correo).

internalemailaddress eq ‘usuario@empresa.com’
Valores Booleanos (Sí/No)

Solo registros marcados como «Completado».

IsFinished eq true
Filtrar por Nulos (Vacíos)

Trae filas donde falta el número de teléfono.

PhoneNumber eq null

Descubre más desde TeAyudoConM365

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo