Búsqueda con ReportM
Como se mencionó anteriormente, ReportM admite 3 tipos de búsqueda para obtener datos, que se utilizan posteriormente para rellenar hojas de Excel.
- Búsqueda por Definición. Es una búsqueda de texto libre sobre una definición.
- Búsqueda por Dominio. Es una búsqueda de texto libre sobre las definiciones de un dominio, aplicando la búsqueda a las distintas definiciones del dominio. Las instancias encontradas en cada definición se concatenan en un único listado.
- Búsqueda Elasticsearch. Es una búsqueda Elasticsearch estructurada (que puede contener agregaciones) sobre el índice de una definición.
Búsqueda por Definición
La Búsqueda por Definición ejecuta una query sobre una definición, utilizando las instancias devueltas como datos del informe. Esta query se escribe utilizando búsqueda libre. Cada instancia se convertirá en una fila del informe, donde los campos seleccionados serán las columnas.
En una búsqueda por definición, los siguientes parámetros en COB_SHEETS significan:
| Parámetro | Significado |
|---|---|
Target | Nombre de la definición en la que buscar |
search | La consulta de búsqueda libre que desea utilizar |
Ejemplo
Para crear un informe con la lista de todos los países que utilizan el Euro como moneda, podríamos usar un cob_config_v2 como:

Y una hoja Countries con el siguiente aspecto:

Y el resultado final sería:

Búsqueda por Dominio
La Búsqueda por Dominio funciona de la misma forma que la Búsqueda por Definición, pero el Target es el nombre de un dominio.
En una búsqueda por dominio, los siguientes parámetros en COB_SHEETS significan:
| Parámetro | Significado |
|---|---|
Target | Nombre del dominio al que pertenecen las definiciones que se van a buscar |
search | La query a ejecutar sobre todas las definiciones del dominio |
Por ejemplo, el dominio @ELRD E-learning Demo tiene las siguientes definiciones:
- Countries
- Countries Series
- Country Events
- Country Trip Ideas
Si nuestro cob_config_v2 tiene el siguiente aspecto:

Y Countries tiene las siguientes columnas:

TIP
La columna definitionName queda disponible para cada instancia, indicando la definición a la que pertenece.
Produciría:

Tenga en cuenta que las definiciones que no tienen el campo dejan esa columna vacía.
WARNING
Si una definición no tiene un campo especificado en el encabezado de una Target Sheet, esa columna estará vacía para todas las instancias de esa definición.
Búsqueda Elasticsearch
La Búsqueda Elasticsearch ejecuta una query Elasticsearch sobre el índice de una definición.
En una búsqueda Elasticsearch, los siguientes parámetros en COB_SHEETS significan:
| Parámetro | Significado |
|---|---|
Target | Índice de la definición. Los índices tienen el siguiente nombre: recordm-<id de la definición> |
search | La query Elasticsearch que desea utilizar. Puede incluir agregaciones. |
Datos del Informe en Informes Elasticsearch
Los campos que especificamos en el informe — en la Target Sheet — afectan al tipo de datos devueltos por la búsqueda Elasticsearch. Considere, por ejemplo, la siguiente query, ejecutada sobre la definición Countries, que incluye una agregación:
{
"query": {
"match_all": {}
},
"aggs" : {
"per_currency" : { // Nombre del bucket, elegido por nosotros
"terms": {
"field": "currency_unit.raw",
"size": 100
},
"aggs": {
"count": { // Nombre del sub-bucket, elegido por nosotros
"cardinality": {
"field": "id.raw"
}
}
}
}
}
}Esta consulta cuenta el número de países que tienen cada tipo de moneda.
- Si usamos
per_currencyocountcomo nombres de campos en nuestro informe, ReportM utilizará los datos de agregación para rellenar esas columnas. - Si usamos algunos de los nombres de campos de la definición, como
long_name, ReportM utilizará las instancias.
Esto significa que, al consultar Elasticsearch directamente, podemos realizar una búsqueda sobre instancias y aprovechar toda la potencia de consulta de Elasticsearch. Sin embargo, debemos tener cuidado de no mezclar diferentes tipos de datos (agregados vs. no agregados), ya que esto probablemente generará informes no deseados.
NOTE
En las consultas Elasticsearch, los campos deben referenciarse en su formato de búsqueda (sin espacios, todo en minúsculas).
En las agregaciones, debemos utilizar siempre el .raw de un campo, ya que es en ese campo donde almacenamos el valor de un campo como keyword, lo que permite a Elasticsearch utilizarlo en agregaciones.
Buckets en los informes
Si usamos nombres de buckets en nuestro informe, cada bucket generará una fila para sus sub-buckets (o una única fila si no tiene sub-buckets). Considere, por ejemplo, la siguiente consulta:
{
"query": {
"match_all": {}
},
"aggs" : {
"per_currency" : {
"terms": {
"field": "currency_unit.raw",
"size": 100
},
"aggs": {
"per_income": {
"terms": {
"field": "income_group.raw"
},
"aggs": {
"count": {
"cardinality": {
"field": "id.raw"
}
}
}
}
}
}
}
}En este caso, dividimos los países por sus grupos de ingresos para cada unidad monetaria. Esto significa que tendremos una fila para cada combinación de per_currency y per_income presente en nuestros datos.
Ejemplo
Vamos a ejemplificar cómo utilizar búsquedas Elasticsearch con la query anterior, en la que contamos cuántos países de cada grupo de ingresos existen para cada moneda.
Así pues, nuestro cob_config_v2 tendría el siguiente aspecto:

TIP
Se recomienda encarecidamente escribir la query Elasticsearch en otro programa y pegarla en Excel.
Para ayudar a escribir estas consultas, Kibana suele ser un buen punto de partida. Nos permite hacer "Inspect" de la query detrás de un gráfico y utilizarla aquí.
Mientras que nuestra hoja Countries tiene el siguiente aspecto:

Produciría:

