Documentación · Guías

Referencia de Probara Query Language (PQL)

Probara Query Language (PQL) hace preguntas sobre tus datos de prueba. Una consulta indica una entidad, como casos o resultados, filtra sus filas con WHERE, y puede agruparlas y agregarlas. Escribe PQL en Consultas o envíalo a la API de PQL.

Inicio rápido

  1. Indica la entidad: FROM cases.
  2. Filtra las filas: WHERE priority = "High".
  3. Elige el tamaño de página: LIMIT 50.
FROM cases WHERE priority = "High" AND status = "Active" ORDER BY title LIMIT 50

Los ejemplos usan los nombres en inglés de las opciones predeterminadas, como High o Active. Si tu organización usa otros nombres, escribe los suyos.

Forma de la consulta

CláusulaPara qué sirveNotas
SELECTColumnas y agregadosOpcional. Sin ella, la consulta devuelve las columnas predeterminadas de la entidad.
FROMLa entidadObligatoria. Una de las nueve entidades de Entidades.
WHERECondiciones sobre cada filaSe aplica antes de agrupar.
GROUP BYGruposCampos, expresiones o posiciones, como GROUP BY 1.
HAVINGCondiciones sobre los gruposUsa agregados, como HAVING count() > 5.
ORDER BYOrdenCampos, alias, posiciones o agregados. Agrega DESC para orden descendente.
LIMIT y OFFSETTamaño de página y punto de inicioLIMIT vale 50 por defecto y admite hasta 500. OFFSET va después de LIMIT.

Reglas:

  • Las palabras clave, los nombres de función, de entidad y de campo no distinguen mayúsculas de minúsculas.
  • Un comentario de línea empieza con --.
  • Los saltos de línea y los espacios extra no importan.
  • Una consulta con SELECT y un agregado devuelve filas agrupadas. Cualquier otra consulta devuelve filas.
  • Un elemento de SELECT que no está agregado debe aparecer en GROUP BY.

Literales

TipoCómo se escribeEjemplo
TextoEntre comillas dobles o simples.title ~ "login"
NúmeroUn entero o un decimal.steps >= 3
Booleanotrue o false.archived = false
ListaValores entre paréntesis, separados por comas. Como máximo 200 valores.priority in ("High", "Critical")
Duración fijaUn número y una unidad: m minutos, h horas, d días, w semanas.duration > 30m
Duración relativaUna duración con signo dentro de una función de tiempo. Las unidades también incluyen mo (meses), q (trimestres) e y (años).now(-3mo), startOf(month, -1mo)
Fecha"YYYY-MM-DD" o "YYYY-MM-DD HH:mm", entre comillas.created > "2026-10-01"
Valor de enumeración u opciónUna palabra suelta o un valor entre comillas. La comparación no distingue mayúsculas.status = failed, priority = "High"

Notas:

  • Los valores de texto deben ir entre comillas. title = Login es un error, y title = "Login" funciona.
  • Los nombres de hitos, suites, entornos, etiquetas y proyectos son texto. Ponlos entre comillas cuando tengan espacios: milestone = "Release 1.4".
  • Los campos de duración fija, como runs.duration, aceptan solo m, h, d y w. Usa mo, q e y solo en el tiempo relativo.

Operadores

OperadorQué haceTipos de campo
=, !=Igual, o distintoTodos los campos, excepto lastResult
<, <=, >, >=Menor, menor o igual, mayor, mayor o igualNúmero, duración, fecha
between a and bDesde a hasta bNúmero, duración, fecha
~, !~Contiene, o no contiene, sin distinguir mayúsculasTexto
startsWithEmpieza por el textoTexto
in (...), not in (...)Uno de una lista, o ninguno de ellaTodos los campos, excepto booleano y lastResult
in query("Nombre")Coincide con las filas de una consulta guardada. Ver Referencias con in query().Solo id
is empty, is not emptySin valor, o con valorCampos marcados como opcionales en las tablas de entidades
under "Suite"La suite y todas las suites que dependen de ellaReferencias a suites: cases.suite, suites.parent
exists(...), count(...) <op> nRegistros relacionados. Ver Relaciones.Entidades con relaciones
was, changedHistorial de cambios. Ver Historial.Campos con historial

Los campos booleanos solo aceptan = y !=, así que escribe archived = true, no archived.

Entidades

Cada entidad tiene un id, que es su ID visible, y un project. Las tablas listan los campos que puedes usar. Un campo marcado como Opcional puede estar vacío, así que is empty se aplica a él. Un campo marcado como Historial admite was y changed.

Casos

Columnas predeterminadas: id, title, suite, priority, status.

CampoTipoSignificadoHistorial
idIDEl ID visible del caso
projectReferenciaEl proyecto
titleTextoEl título
descriptionTexto, opcionalLa descripción
suiteReferencia, opcionalLa suite. Usa under para su árbol.
milestoneReferencia, opcionalEl hito
tagsEtiquetas, opcionalLas etiquetas. Un caso cuenta en el grupo de cada una de sus etiquetas.
authorUsuarioQuién creó el caso
updatedByUsuario, opcionalQuién actualizó el caso por última vez
createdFechaCuándo se creó el caso
updatedFechaCuándo se actualizó el caso por última vez
archivedBooleanoSi el caso está archivado. Ver Casos archivados.
automationKeyTexto, opcionalLa clave de automatización
automatedBooleanoSi el caso tiene una clave de automatización
stepsNúmeroEl número de pasos
revisionNúmeroEl número de revisión
reviewStatusEnumnot_reviewed, in_review o approved. Consulta Revisión de casos de prueba.
jiraTexto, opcionalLa primera clave de incidencia de Jira vinculada
priorityOpción, opcionalLa prioridad, de las opciones de tu organizaciónSí
severityOpción, opcionalLa severidad, de las opciones de tu organizaciónSí
statusOpción, opcionalEl estado, de las opciones de tu organizaciónSí
typeOpción, opcionalEl tipo, de las opciones de tu organizaciónSí
layerOpción, opcionalLa capa, de las opciones de tu organizaciónSí
behaviorOpción, opcionalEl comportamiento, de las opciones de tu organizaciónSí
isFlakyBooleanoSi el caso está marcado como inestable
lastResultResultadoEl resultado más reciente. Usa lastResult.campo. Ver lastResult.

Relaciones: results, runCases, defects, jira. Campos personalizados: cf[...].

Suites

Columnas predeterminadas: id, name, parent, cases.

CampoTipoSignificado
idIDEl ID visible de la suite
projectReferenciaEl proyecto
nameTextoEl nombre
parentReferencia, opcionalLa suite padre. Usa under para su árbol.
pathTextoLa ruta de la suite
casesNúmeroEl número de casos que no están archivados
createdFechaCuándo se creó la suite
updatedFechaCuándo se actualizó la suite por última vez

Relaciones: cases.

Ejecuciones

Columnas predeterminadas: id, name, state, status, milestone, passRate.

CampoTipoSignificado
idIDEl ID visible de la ejecución
projectReferenciaEl proyecto
nameTextoEl nombre
stateEnumeraciónopen o closed
statusEnumeraciónin_progress, passed, failed o aborted. Una ejecución abierta está en progreso, y una abortada está abortada.
environmentReferencia, opcionalEl entorno
milestoneReferencia, opcionalEl hito
planReferencia, opcionalEl plan de pruebas
authorUsuarioQuién creó la ejecución
tagsEtiquetas, opcionalLas etiquetas
started, finished, closed, abortedFecha, opcionalCuándo empezó, terminó, se cerró o se abortó la ejecución
durationDuración, opcionalEl tiempo total de la ejecución
passed, failed, blocked, skipped, untestedNúmeroEl número de casos con cada resultado
passRateNúmeroLa proporción de casos ejecutados que aprobaron, como porcentaje de 0 a 100, redondeado a un decimal. No se puede promediar ni sumar. Usa passRate() en una consulta agregada.
branchTexto, opcionalLa rama
commitTexto, opcionalEl commit

Relaciones: results, runCases, defects. Campos personalizados: cf[...].

Casos de ejecución

Los casos de ejecución son los casos dentro de una ejecución, incluidos los que aún no se han probado. Columnas predeterminadas: run, case, status, assignee, elapsed.

CampoTipoSignificado
idIDEl ID visible
projectReferenciaEl proyecto
runReferenciaLa ejecución. Usa run.campo para sus campos.
caseReferenciaEl caso. Usa case.campo para sus campos.
statusEnumeraciónuntested, retested, passed, failed, skipped o blocked
assigneeUsuario, opcionalA quién está asignado el caso
elapsedDuración, opcionalEl tiempo dedicado al caso
parametersTexto, opcionalLa combinación del caso de ejecución como pares nombre=valor unidos con ”, ”. ~ coincide con un par o con un valor, por ejemplo FROM runCases WHERE parameters ~ "Browser=Firefox". Un caso de ejecución sin parámetros no tiene ninguno.

Sin relaciones.

Un caso de ejecución de un caso parametrizado es una instancia: un caso con dos parámetros de tres valores cada uno tiene nueve casos de ejecución en una ejecución. Cuéntalos con count() sobre los casos de ejecución, y consulta Casos de prueba parametrizados.

Resultados

Columnas predeterminadas: id, run, case, status, executedBy, executed.

CampoTipoSignificado
idIDEl ID visible, como RES-42
projectReferenciaEl proyecto
caseReferenciaEl caso. Usa case.campo para sus campos.
runReferenciaLa ejecución. Usa run.campo para sus campos.
statusEnumeraciónpassed, failed, skipped o blocked
durationDuración, opcionalCuánto duró la ejecución
executedByUsuario, opcionalQuién ejecutó el caso
executedFechaCuándo se ejecutó el caso
commentTexto, opcionalEl comentario

Sin relaciones. Campos personalizados: ninguno.

Defectos

Columnas predeterminadas: id, title, status, severity, priority, assignee.

CampoTipoSignificadoHistorial
idIDEl ID visible
projectReferenciaEl proyecto
titleTextoEl título
statusEnumeraciónopen, in_progress, resolved o closedSí
resolutionEnumeración, opcionalfixed, wont_fix, duplicate o cannot_reproduce
severityOpción, opcionalLa severidad, de las opciones de tu organizaciónSí
priorityOpción, opcionalLa prioridad, de las opciones de tu organizaciónSí
reporterUsuarioQuién reportó el defecto
assigneeUsuario, opcionalA quién está asignado el defectoSí
milestoneReferencia, opcionalEl hito
tagsEtiquetas, opcionalLas etiquetas
createdFechaCuándo se creó el defecto
updatedFechaCuándo se actualizó el defecto por última vez
resolvedFecha, opcionalCuándo se resolvió el defecto
closedFecha, opcionalCuándo se cerró el defecto
jiraTexto, opcionalLa clave de incidencia de Jira vinculada

Relaciones: cases, results. Campos personalizados: cf[...].

Hitos

Columnas predeterminadas: id, name, status, due.

CampoTipoSignificado
idIDEl ID visible
projectReferenciaEl proyecto
nameTextoEl nombre
statusEnumeraciónupcoming, active o completed
parentReferencia, opcionalEl hito padre
startFecha, opcionalLa fecha de inicio
dueFecha, opcionalLa fecha límite
completedFecha, opcionalCuándo se completó el hito

Relaciones: runs, cases, defects.

Planes

Columnas predeterminadas: id, name, status, milestone.

CampoTipoSignificado
idIDEl ID visible
projectReferenciaEl proyecto
nameTextoEl nombre
statusEnumeracióndraft, active o completed
milestoneReferencia, opcionalEl hito
createdFechaCuándo se creó el plan
updatedFechaCuándo se actualizó el plan

Relaciones: runs, cases.

Pasos compartidos

Columnas predeterminadas: id, title, folder, updated.

CampoTipoSignificado
idIDEl ID visible
projectReferencia, opcionalEl proyecto. Si está vacío, el paso compartido es de toda la organización.
titleTextoEl título
folderReferencia, opcionalLa carpeta
createdFechaCuándo se creó el paso compartido
updatedFechaCuándo se actualizó el paso compartido por última vez

Sin relaciones.

Campos personalizados

Los casos, las ejecuciones y los defectos tienen los campos personalizados de tu organización. Escribe el título del campo entre corchetes:

FROM cases WHERE cf["Risk"] = "High"

El título se compara sin distinguir mayúsculas y sin los espacios de los extremos. Un título que ningún campo personalizado de esa entidad tiene devuelve unknown_custom_field.

Tipo de campo personalizadoFunciona comoOperadores
NúmeroNúmeroComparaciones, between, listas
Texto corto, párrafo, URLTexto~, !~, startsWith, listas, =
Casilla de verificaciónBooleano=, !=
Selector de fechaFechaComparaciones, between, listas
Selector de usuarioUsuario=, listas y las funciones de miembros
Selección, selección múltiple, radioOpción=, listas. Una selección múltiple cuenta una fila en cada uno de sus valores.

Rutas a registros relacionados

Los resultados y los casos de ejecución apuntan a una ejecución y a un caso. Accede a sus campos con una ruta de puntos:

FROM results WHERE run.environment = "staging" AND case.priority = "Critical" AND status = failed

Las rutas funcionan en WHERE y en GROUP BY, por ejemplo GROUP BY run.environment.

lastResult

lastResult es el resultado más reciente de un caso, por fecha de ejecución y después por ID. Está disponible en cases en el nivel superior de una consulta.

  • lastResult.status lee el estado del resultado más reciente.
  • lastResult(environment = "staging").status lee el resultado más reciente entre las ejecuciones que cumplen la condición. La condición usa campos de ejecución, como environment, milestone y plan.
  • Un caso sin resultado coincidente no tiene valor, así que = no lo encuentra.
FROM cases WHERE lastResult(environment = "staging").status = failed ORDER BY title

lastResult no se puede comparar directamente, y no tiene historial.

Relaciones

exists y count miran los registros relacionados de cada fila.

EntidadRelaciones
casesresults, runCases, defects, jira
suitescases
runsresults, runCases, defects
milestonesruns, cases, defects
plansruns, cases
defectscases, results
OtrasNinguna
FROM cases WHERE exists(results where status = failed)
FROM cases WHERE NOT exists(results)
FROM cases WHERE count(results where status = failed) >= 3

Reglas:

  • Usa exists y count en WHERE. exists en HAVING devuelve relation_placement.
  • Compara count(relación) con un número.
  • Las subconsultas se anidan como máximo dos niveles. FROM suites WHERE exists(cases where exists(results where status = failed)) tiene dos niveles.
  • Los registros relacionados cuentan solo en los proyectos a los que tienes acceso, y cada registro relacionado cuenta una vez.
  • Los casos archivados se dejan fuera de una condición de registros relacionados sobre casos, salvo que la condición nombre archived. Ver Casos archivados.

Funciones

FunciónDevuelveNotas
currentUser()El usuario que ha iniciado sesiónÚsala en campos de usuario y en by.
membersOf("Grupo")Los miembros de un grupoÚsala dentro de in (...) en un campo de usuario.
activeMembers()Los miembros actuales de la organizaciónÚsala dentro de in (...) en un campo de usuario.
formerMembers()Los antiguos miembros de la organizaciónÚsala dentro de in (...) en un campo de usuario.
now([offset])La hora actual, desplazada si se indicaEl desplazamiento es una duración con signo, como now(-7d).
startOf(unit[, offset])El inicio de la hora, el día, la semana, el mes, el trimestre o el año actualstartOf(week), startOf(month, -1mo)
endOf(unit[, offset])El final de las mismas unidadesendOf(day)
count()El número de filas de cada grupocount(*) también funciona.
count(distinct campo)El número de valores distintoscount(distinct executedBy)
sum(campo), avg(campo)La suma, o el promedio, de un número o una duraciónavg(duration)
min(campo), max(campo)El valor más pequeño, o el más grandeNúmeros, duraciones y fechas.
passRate()El porcentaje de resultados aprobadosSolo en resultados y ejecuciones. De 0 a 100, redondeado a un decimal. Vacío si no se ejecutó nada.
bucket(campoDeFecha, unit)El inicio del intervalo de tiempo en el que cae una fechaUnidades: hour, day, week, month, quarter, year. Las semanas empiezan el lunes.

passRate() cuenta así:

  • En resultados, los resultados aprobados divididos entre todos los resultados.
  • En ejecuciones, los casos aprobados divididos entre los casos aprobados, fallidos, bloqueados y omitidos. Es la misma cifra que runs.passRate.
SELECT bucket(executed, week) AS period, passRate() AS rate, count() AS results FROM results GROUP BY 1 ORDER BY 1

Tiempo y zonas horarias

Las fechas y los tiempos relativos se leen en la Zona horaria de tu perfil. Con Detectado automáticamente, se usa UTC. now, startOf, endOf, bucket y las comparaciones de fechas siguen esta zona.

El tiempo relativo admite todas las unidades: m, h, d, w, mo, q e y. Los campos de duración fija admiten m, h, d y w.

Reglas de agregación

  • GROUP BY acepta campos, expresiones y posiciones, como GROUP BY 1. No acepta alias de SELECT. Repite la expresión, o usa su posición.
  • HAVING filtra grupos con agregados, como HAVING count() > 5. No acepta alias, así que HAVING n > 5 falla.
  • ORDER BY acepta alias (ORDER BY n DESC), posiciones contadas desde 1 (ORDER BY 2) y agregados (ORDER BY count() DESC). Los agregados necesitan un grupo, o un agregado en SELECT. Los campos de usuario y de etiquetas no se pueden ordenar.
  • La agrupación funciona en campos de número, booleano, enumeración, opción, usuario, referencia y etiquetas. El texto y las fechas no se agrupan directamente. Agrupa una fecha con bucket().
  • Las etiquetas y los campos de selección múltiple cuentan una fila en el grupo de cada uno de sus valores. Si agrupas dos de estos campos a la vez, hay un grupo por cada combinación, así que los grupos pueden sumar más que el número de filas.
  • Sin valor. Las filas sin valor forman un grupo llamado Sin valor. Aparece primero.
  • count(campo) cuenta las filas en las que el campo tiene valor.
  • HAVING sobre una etiqueta o un campo de selección múltiple se rechaza. Filtra en WHERE.
  • Sin GROUP BY, un agregado devuelve una fila para todas las filas que coinciden.
  • Los intervalos de tiempo empiezan al inicio de la unidad en tu zona horaria. Los intervalos vacíos no se devuelven.
  • Los selectores de fecha comparan por día local.
  • Los grupos se muestran hasta 1.000 por página. El resultado lo indica cuando hay más.

Historial

El historial de cambios registra los cambios de algunos campos. Dos operadores lo leen:

  • status was in_progress es verdadero cuando el valor es el actual, o era uno de los valores registrados en el historial.
  • status changed es verdadero cuando el historial tiene al menos un cambio. Agrega modificadores para acotarlo:
ModificadorSignificado
from vEl cambio partió de v.
to vEl cambio terminó en v.
by usuarioEl cambio lo hizo currentUser(), o un miembro de membersOf(...).
after tEl cambio ocurrió después de t.
before tEl cambio ocurrió antes de t.

Todos los modificadores que escribas deben cumplirse en el mismo cambio. t es una fecha o un tiempo relativo, que se lee en tu zona horaria.

FROM defects WHERE status changed from resolved to open after now(-14d)
FROM cases WHERE priority changed by currentUser() after now(-7d)

Campos con historial

EntidadCampos
casespriority, severity, status, type, layer, behavior
defectsstatus, assignee, severity, priority

El historial de cambios no está disponible para el estado de las ejecuciones, los movimientos entre hitos y suites, los campos personalizados (cf[...]) ni los campos vinculados. Una consulta que los use devuelve history_not_available.

Reglas:

  • Usa was y changed en WHERE. En HAVING devuelven history_placement.
  • El historial de cambios guarda registros durante la ventana de retención de historial de tu plan. Consulta Retención de datos.
  • Los cambios hechos antes de que el registro fuera auditado no se conocen, así que un valor puede faltar en su historial.

Referencias con in query()

id in query("Nombre de la consulta") conserva las filas que devuelve una consulta guardada:

FROM cases WHERE id in query("Critical failures")
  • La consulta guardada debe devolver la misma entidad, y en modo de filas.
  • Se ignoran su ORDER BY y su LIMIT.
  • Una consulta guardada puede referirse a otra hasta tres niveles de profundidad. Un ciclo se rechaza.
  • Solo puedes referirte a consultas que puedes ver. Un nombre desconocido u oculto devuelve unknown_saved_query.

Casos archivados

Una consulta sobre casos deja fuera los casos archivados, salvo que la consulta nombre archived en su propio nivel. La misma regla se aplica a una condición de registros relacionados sobre casos, como exists(cases ...).

FROM cases WHERE title ~ "login" -- los casos archivados quedan fuera
FROM cases WHERE archived = true -- la condición decide

Una consulta sobre resultados es distinta. Archivar conserva el historial de ejecución de un caso, así que FROM results (y FROM runCases) incluye los resultados de los casos archivados. Para dejarlos fuera, indica que el caso está activo:

FROM results WHERE case.archived = false -- los resultados de los casos archivados quedan fuera

Límites

LímiteValor
Texto de la consulta4.000 caracteres
Valores en una lista in (...)200
LIMIT (filas por página)50 por defecto, 500 como máximo
OFFSET10.000 como máximo
Filas contadasExacto hasta 10.000; después 10.000+
Grupos por página1.000 como máximo
Anidamiento de relaciones (exists y count)Dos niveles
Referencias en in query()Tres niveles. Los ciclos se rechazan.
Exportación CSV10.000 filas, o 1.000 grupos en una consulta agregada
Nombre de una consulta guardada120 caracteres, único en la organización
Descripción de una consulta guardada2.000 caracteres

Errores

Cada error tiene un código, un mensaje y el lugar de la consulta donde ocurre. A través de la API, cada error aparece en details.errors con el mismo código. Consulta Errores.

Errores de sintaxis

CódigoQué significaQué hacer
unexpected_characterLa consulta tiene un carácter que PQL no usa, como #.Quítalo, o ponlo entre comillas si es texto.
unterminated_stringUna comilla no está cerrada.Añade la comilla de cierre.
missing_fromLa consulta no empieza con FROM.Empieza la consulta con FROM y una entidad.
unexpected_tokenUna palabra o un símbolo está en un lugar incorrecto. También aparece si una cláusula se repite, o si LIMIT u OFFSET son decimales.Revisa el orden de las cláusulas, y usa números enteros.
unexpected_end_of_queryLa consulta termina antes de tiempo, a menudo después de AND.Termina la condición.
expected_expressionFalta un valor, como en in ().Añade el valor o el campo.
unclosed_parenthesisUn ( no tiene su ).Añade el ).
nesting_too_deepLos paréntesis están anidados demasiado.Simplifica la condición.
invalid_durationUna duración usa una unidad que PQL no tiene, como 3x.Usa m, h, d, w, mo, q o y.
number_out_of_rangeUn número es demasiado grande o no es finito.Usa un número más pequeño.
query_too_longLa consulta tiene más de 4.000 caracteres.Acórtala, o mueve una parte a una consulta guardada.

Nombres y funciones

CódigoQué significaQué hacer
unknown_entityEl nombre después de FROM no es una entidad.Usa una de las nueve entidades.
unknown_fieldEl campo no existe en esta entidad. El mensaje puede sugerir el nombre más parecido.Revisa la tabla de la entidad en Entidades.
unknown_custom_fieldNingún campo personalizado de esta entidad tiene ese título.Revisa el título en los ajustes de campos personalizados.
unknown_functionEl nombre no es una función de PQL.Revisa la tabla de funciones.
not_a_functionSe escribió un campo como si fuera una función.Quita los paréntesis.
function_arityLa función tiene un número incorrecto de argumentos.Revisa la forma de la función en la tabla.
invalid_argumentUn argumento tiene una forma incorrecta, como un desplazamiento de startOf sin unidad.Usa una duración con signo, como -1mo.
function_not_availableLa función no se aplica a esta entidad, como passRate() en casos.Usa passRate() en resultados o ejecuciones.
unknown_time_unitPQL no conoce la unidad de tiempo.Usa hour, day, week, month, quarter o year.
unknown_groupNingún grupo de la organización tiene ese nombre.Revisa el nombre del grupo.
set_function_placementmembersOf(), activeMembers() o formerMembers() se usa fuera de in (...).Ponla dentro de in (...) en un campo de usuario.
unknown_relationLa relación no existe en esta entidad.Revisa la tabla de relaciones.
relation_nesting_too_deepLas subconsultas se anidan más de dos niveles.Aplana la consulta.
relation_count_placementcount(relación) se usa sin comparación.Compáralo con un número, como count(results) >= 1.
relation_placementexists se usa en HAVING.Muévelo a WHERE.
unknown_saved_queryNinguna consulta guardada que puedas ver tiene ese nombre.Revisa el nombre. Solo ves las consultas a las que tienes acceso.
history_not_availableNo se guarda historial de cambios para este campo.Consulta Campos con historial.
history_placementwas o changed se usa en HAVING.Muévelo a WHERE.

Valores y operadores

CódigoQué significaQué hacer
operator_not_allowedEl operador no se aplica a este campo.Revisa la tabla de operadores.
not_nullableis empty se usa en un campo que siempre tiene valor.Quítalo.
type_mismatchEl tipo del valor no coincide con el campo, como texto para un número.Usa un valor del tipo correcto.
left_side_must_be_fieldEl lado izquierdo de una comparación no es un campo.Pon el campo a la izquierda.
not_booleanUn campo se usa como condición, pero no es de sí o no.Compáralo, como archived = true.
unquoted_text_valueUn valor de texto no tiene comillas.Ponlo entre comillas.
unknown_valueEl valor no es una de las opciones, miembros o nombres que admite el campo.Usa uno de los valores que indica el mensaje.
invalid_date_formatUna fecha no es YYYY-MM-DD ni YYYY-MM-DD HH:mm.Escribe la fecha en una de esas formas.
invalid_dateLa fecha no existe, como 2026-02-30.Usa una fecha real.
relative_duration_in_dateUna duración se usa como fecha, como 7d.Usa una función de tiempo, como now(-7d).
invalid_duration_unitSe usa mes, trimestre o año en un campo de duración fija.Usa m, h, d o w en los campos de duración.
in_list_too_longUna lista in (...) tiene más de 200 valores.Divide la lista.

Agregados, agrupación y paginación

CódigoQué significaQué hacer
aggregate_not_allowedUn agregado se usa en WHERE o en GROUP BY.Muévelo a SELECT o a HAVING.
not_aggregatableLa función no se aplica a este campo, como sum(title) o avg(passRate).Usa un número, una duración o una fecha, o passRate().
not_groupableEl campo no se puede agrupar, como el texto.Agrupa por otro campo, o usa bucket() para una fecha.
not_groupedUn elemento de SELECT no está agrupado ni agregado.Añádelo a GROUP BY, o envuélvelo en un agregado.
group_by_requires_selectGROUP BY no tiene una lista en SELECT.Indica los campos agrupados y los agregados en SELECT.
having_requires_group_byHAVING se usa sin grupo ni agregado.Añade GROUP BY, o un agregado en SELECT.
multi_valued_havingHAVING filtra una etiqueta o un campo de selección múltiple.Filtra en WHERE.
order_requires_group_byORDER BY ordena por un agregado sin grupo.Añade GROUP BY, o un agregado en SELECT.
position_out_of_rangeUna posición no corresponde a un elemento de SELECT.Usa un número del 1 al número de elementos de SELECT.
not_sortableEl campo no se puede ordenar, como un campo de usuario o de etiquetas.Ordena por otro campo.
invalid_select_itemUn elemento de SELECT no es un campo ni un agregado.Usa un campo, o un agregado como count().
invalid_bucketbucket() no tiene un campo de fecha, o no tiene unidad.Usa bucket(created, day).
duplicate_aliasEl alias ya se usa en SELECT.Elige otro nombre.
limit_out_of_rangeLIMIT está fuera de 1 a 500.Usa un número del 1 al 500.
offset_out_of_rangeOFFSET es mayor que 10.000.Usa un número de hasta 10.000.

Cuando el servidor todavía no admite una construcción, la consulta muestra Todavía no disponible en el editor, con la construcción indicada. Quita esa parte de la consulta por ahora.

Ejemplos resueltos

Cada ejemplo responde a una pregunta frecuente. Sustituye los nombres por tus suites, hitos y entornos.

PreguntaConsulta
¿Qué casos fallaron en su última ejecución en staging?FROM cases WHERE lastResult(environment = "staging").status = failed ORDER BY title
¿Qué casos críticos fallaron en su última ejecución en staging?FROM cases WHERE priority = "Critical" AND lastResult(environment = "staging").status = failed ORDER BY title
¿Qué defectos se reabrieron en los últimos 14 días?FROM defects WHERE status changed from resolved to open after now(-14d)
¿Qué defectos asignados a mí se reabrieron en 30 días?FROM defects WHERE assignee = currentUser() AND status changed from resolved to open after now(-30d)
¿Qué casos inestables no tienen ningún aprobado en 30 días?FROM cases WHERE isFlaky = true AND NOT exists(results where status = passed AND executed > now(-30d))
¿Qué casos nunca se han ejecutado?FROM cases WHERE NOT exists(results)
¿Cuál es la tasa de aprobación por semana?SELECT bucket(executed, week) AS period, passRate() AS rate, count() AS results FROM results GROUP BY 1 ORDER BY 1
¿Cómo se reparten los resultados de este mes por estado?SELECT status, count() AS n FROM results WHERE executed >= startOf(month) GROUP BY status ORDER BY n DESC
¿Cuántos defectos abiertos hay por severidad?SELECT severity, count() AS n FROM defects WHERE status != closed GROUP BY severity ORDER BY n DESC
¿Cuántas ejecuciones fallidas tuvo cada entorno el mes pasado?SELECT environment, count() AS n FROM runs WHERE status = failed AND closed > startOf(month, -1mo) AND closed < startOf(month) GROUP BY environment
¿Quién ejecutó más resultados esta semana?SELECT executedBy, count() AS n FROM results WHERE executed > now(-7d) GROUP BY executedBy ORDER BY n DESC
¿Qué ejecuciones cerradas este trimestre tienen la mejor tasa de aprobación?FROM runs WHERE state = closed AND closed > startOf(quarter) ORDER BY passRate DESC
¿Qué casos del árbol de Checkout cambiaron de prioridad esta semana?FROM cases WHERE suite under "Checkout" AND priority changed after startOf(week)
¿Qué casos tienen Risk en High en la suite Login?FROM cases WHERE cf["Risk"] = "High" AND suite under "Login"
¿Qué hitos están activos y pasaron su fecha límite?FROM milestones WHERE status = active AND due < now()

Siguiente paso

  • Escribe y ejecuta consultas en Consultas.
  • Pon una consulta guardada en un dashboard en Dashboards.
  • Envía consultas desde código con la API de PQL.