Fórmulas

Tabulae ofrece a los usuarios la posibilidad de definir nuevas columnas como resultado de aplicar fórmulas sobre columnas ya existentes mediante el uso de un sencillo lenguaje de fórmulas.

Las fórmulas se pueden añadir a nivel de dataset o a nivel de un widget en una app. En el primer caso quedan disponibles como una columna más del dataset, y por tanto se puede usar en cualquier Widget en cualquier app. Por el contrario si una fórmula sólo es relevante para un único Widget se puede crear directamente en el diálogo de construcción de la consulta asociada al Widget, incluyendo la fórmula en un bloque Seleccionar.

Cada una de los campos en Tabulae tiene asociado un tipo de dato básico (Número, Texto, Fecha ó Booleano) que limita el conjunto de funciones y operadores que se pueden aplicar a dicha columna. Por ejemplo, las funciones de fechas sólo se pueden aplicar sobre campos de tipo fecha, o la multiplicación solo se puede usar entre valores de tipo numérico. Por ello los nuevos campos generados mediante el uso de fórmulas tienen un tipo de retorno que Tabulae infiere automáticamente. Para el usuario este proceso es transparente, ya que al final el campo fórmula se podrá usar en función de su naturaleza como dimensión y medida .

Diálogo de creación de fórmulas

El diálogo de creación de fórmulas permite definir la expresión que indica como calcular los valores de las fórmulas. Para ello se dispone de una caja de texto donde definir la expresion y una serie de botones que facilitan su creación. Hay 5 pestañas que engloban las diferentes partes de generación de una fórmula:

  • Componentes: Campos disponibles (columnas de un dataset u otras fórmulas precedentes).

  • Operadores: Operaciones básicas que aplican a variables numéricas y números.

  • Funciones: Funciones de transformación de datos variadas.

  • Variables: Variables globales "predefinidas".

  • Subqueries: Variables globales calculadas a partir de subconsultas.

En cualquier momento se puede utilizar el botón de comprobar (en la parte inferior izquierda del diálogo) para verificar que la fórmula que se está implementando es sintácticamente correcta.

Diálogo de creación de fórmulas
Imagen - Diálogo de creación de fórmulas

Componentes

Para hacer referencia en las fórmulas a un campo ya existente se utiliza el identificador del campo entre corchetes: [columId]. Los campos que estarán disponibles para usar en una fórmula son:

  • Columnas del dataset seleccionado

  • Otras fórmulas ya creadas anteriormente

Aunque en la fórmula aparece el Id del componente no hay que conocerlos, los botones en la parte izquierda del diálogo muestran el nombre de cada campo (así como el Id y el tipo de dato), por lo que situando el cursor en el lugar de la fórmula donde se quier poner ese componente, y después haciendo clic en el botón del campo deseado de forma automática se escribe el Id.

Info En el caso de haber fórmulas con referencias circulares se muestra un mensaje de error en el propio diálogo de creación de la fórmula.

Operadores

En esta pestaña se incluyen operaciones aplicables unicamente a variables numéricas, que incluyen:

Operaciones aritméticas

Suma Resta Multiplicación División Potencia Resto de la división
+ - * / ^ %
· Operador suma (+)

Sintaxis: Expresion1 + Expresion2

Calcula la suma de dos números o de un número y una fecha. Si una de las expresiones es de tipo fecha la otra expresión se trata como el número de milisegundos a añadir a la fecha.

El tipo de retorno de la fórmula es un Número si las dos expresiones son de tipo Número o Fecha si una de las expresiones es de tipo Fecha.

Ejemplos:

Ejemplo Resultado
7 + 3 10
$now + 60000 Devuelve una fecha, un minuto sobre la fecha actual.
· Operador resta (-)

Sintaxis: Expresion1 - Expresion2

Calcula la resta de dos números, de una fecha menos un número o de dos fechas. Cuando se resta un número de una fecha el número se interpreta en milisegundos.

El tipo de retorno de la fórmula es Número si tanto Expresion1 como Expresion2 son de tipo Número o si las dos expresiones son de tipo Fecha. En este último caso el resultado es la diferencia en milisegundos entre las dos fechas. Si Expresion1 es de tipo Fecha y Expresion2 de tipo Número la operación devuelve una Fecha.

Ejemplos:

Ejemplo Resultado
7 – 3 4
[colFechaId] – 60000 Devuelve una Fecha, un minuto menos que la fecha de la columna con id colFechaId.
$now – 60000 Devuelve una Fecha, un minuto menos que la fecha actual.
· Operador multiplicación (*)

Sintaxis: Expresion1 * Expresion2

Calcula la multiplicación de dos números. El tipo de retorno de la fórmula es siempre otro Número.

Ejemplos:

Ejemplo Resultado
7 * 3 21
[colNumId] * 6 Devuelve un Número cuyo valor es el resultado de multiplicar el valor de la columna con id colNumId por 6.
· Operador división (/)

Sintaxis: Expresion1 / Expresion2

Calcula la división de dos números, y en caso de que Expresion2 tenga valor cero el resultado de la división es el valor especial Null. El tipo de retorno de la fórmula es siempre otro Número.

Ejemplos:

Ejemplo Resultado
7 / 2 3.5
[colNumId] / 6 Devuelve un Número cuyo valor es el resultado de dividir el valor de la columna con id colNumId entre 6.
· Operador potencia (^)

Sintaxis: Base ^ Exponente

Eleva la Base al Exponente especificado. Base y Exponente deben ser de tipo Número, siendo el tipo de retorno de la fórmula siempre otro Número.

Ejemplos:

Ejemplo Resultado
2 ^ 3 8
[colNumId] ^ 2 Devuelve un Número cuyo valor es el resultado de elevar el valor de la columna con id colNumId al cuadrado.
· Operador resto (%)

Sintaxis: Expresion1 / Expresion2

Permite calcular el resto de la división de dos números. El tipo de retorno de la fórmula es siempre otro Número.

Ejemplos:

Ejemplo Resultado
7 % 2 1
[colNumId] % 3 Devuelve un Número cuyo valor es el resto de dividir el valor de la columna con id colNumId entre 3.

Funciones matemáticas de uso común

Raíz cuadrada Logaritmo natural Logaritmo Exponencial Valor absoluto Entero superior Entero inferior Parte entera
sqrt(n) ln(n) log(n, base) exp(n) abs(n) ceil(n) floor(n) trunc(n)
· Función Raíz cuadrada

Sintaxis: sqrt(Expresion)

Calcula la raíz cuadrada de un Número. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
sqrt(9) 3
· Función Logaritmo natural

Sintaxis: ln(Expresion)

Calcula el Logaritmo Natural de un Número. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
ln(1) 0
· Función Logaritmo

Sintaxis: log(Expresion, Base)

Calcula el Logaritmo de un Número en la base indicada. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
log(4, 2) 2
· Función Exponencial

Sintaxis: exp(Exponente)

Eleva el Número e al Exponente indicado. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
exp(0) 1
· Función Valor absoluto

Sintaxis: abs(Exponente)

Devuelve el valor absoluto de un Número. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
abs(-1) 1
abs(1) 1
· Función Truncar al entero superior

Sintaxis: ceil(Expresion)

Devuelve el entero más pequeño que sea mayor o igual al número dado. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
ceil(0.95) 1
ceil(9.003) 10
ceil(-2.8) -2
· Función Truncar al entero inferior

Sintaxis: floor(Expresion)

Devuelve el entero más grande que sea menor o igual al número dado. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
floor(5.80) 5
floor(-2.8) -3
· Función Parte entera

Sintaxis: trunc(Expresion)

Trunca el número dado a su valor entero. El tipo de retorno es Número.

Ejemplos:

Ejemplo Resultado
trunc(5.80) 5
trunc(-2.8) -2

Funciones

En esta pestaña se incluyen funciones generales, subdivididas en bloques según su naturaleza:

Funciones de fechas

Año Mes Nombre del mes Día Nombre del día Trimestre
year(f) month(f) monthName(f, [idioma]) day(f) dayName(f, [idioma]) quarter(f, [prefijo])
Fecha a texto Fecha por componentes Fecha desde texto
dateToString(f, formato) dateFromParts(f1, f2, f3, f4, f5, f6, f7) dateFromString(t)
· Función Año

Sintaxis: year(Expresion [, booleano])

Obtiene el año de una Fecha. El tipo de retorno de la función es Texto si no hay segundo argumento o si lo hay y es false, mientras que si el segundo argumento es true el retorno es de tipo Número.

Ejemplos:

Ejemplo Resultado
year([colFechaId]) Devuelve una cadena de Texto con el valor del año de la fecha almacenada en la columna con id colFechaId.
year([colFechaId], true) Devuelve el valor numérico del año de la fecha almacenada en la columna con id colFechaId.
· Función Mes

Sintaxis: month(Expresion [, booleano])

Obtiene el mes de una Fecha como Texto de dos dígitos (01-12) si no hay segundo argumento o si lo hay y es false, mientras que si el segundo argumento es true el retorno es de tipo Número (1-12).

Ejemplos:

Ejemplo Resultado
month([colFechaId]) Devuelve una cadena de Texto con el valor del mes de la fecha almacenada en la columna con id colFechaId.
month([colFechaId], true) Devuelve el valor numérico del mes de la fecha almacenada en la columna con id colFechaId.
· Función Nombre del mes

Sintaxis: monthName(Expresion [, "Idioma"])

Obtiene el nombre del mes a partir de una Fecha, y retorna un Texto. Opcionalmente recibe un segundo parámetro que indica el idioma utilizado para los nombres de los meses. Actualmente Tabulae soporta inglés y español, siendo inglés el idioma por defecto. Para cambiar el idioma se debe pasar el parámetro utilizando el código ISO de dos letras relativo al idioma.

Ejemplos:

Ejemplo Resultado
monthName([colFechaId]) Devuelve una cadena de Texto en inglés con el nombre del mes de la fecha almacenada en la columna con id colFechaId.
monthName([colFechaId], "es") Devuelve una cadena de Texto en español con el nombre del mes de la fecha almacenada en la columna con id colFechaId.
· Función Día

Sintaxis: day(Expresion [, booleano])

Obtiene el día del mes de una Fecha como Texto de dos dígitos (01-31) si no hay segundo argumento o si lo hay y es false, mientras que si el segundo argumento es true el retorno es de tipo Número (1-31)

Ejemplos:

Ejemplo Resultado
day([colFechaId]) Devuelve una cadena de Texto con el valor del día del mes de la fecha almacenada en la columna con id colFechaId.
day([colFechaId], true) Devuelve el valor numérico del día del mes de la fecha almacenada en la columna con id colFechaId.
· Función Nombre del día de la semana

Sintaxis: dayName(Expresion [, "Idioma"])

Obtiene el nombre del día de la semana a partir de una Fecha, y retorna un Texto. Opcionalmente recibe un segundo parámetro que indica el idioma utilizado para los nombres de los días. Actualmente Tabulae soporta inglés y español, siendo inglés el idioma por defecto. Para cambiar el idioma se debe pasar el parámetro utilizando el código ISO de dos letras relativo al idioma.

Ejemplos:

Ejemplo Resultado
dayName([colFechaId]) Devuelve una cadena de Texto en inglés con el nombre del día de la semana de la fecha almacenada en la columna con id colFechaId.
dayName([colFechaId], 'es') Devuelve una cadena de Texto en español con el nombre del día de la semana de la fecha almacenada en la columna con id colFechaId.
· Función Trimestre

Sintaxis: quarter(Expresion [, “Prefijo”])

Obtiene el trimestre de una Fecha como Texto (1-4). Opcionalmente puede recibir un un texto entre comillas como segundo parámetro que se usará como prefijo.

Ejemplos:

Ejemplo Resultado
quarter([colFechaId]) Devuelve una cadena de Texto con el valor del trimestre de la fecha almacenada en la columna con id colFechaId.
quarter([colFechaId], "Trimestre ") Devuelve una cadena de Texto con el valor del trimestre de la fecha almacenada en la columna con id colFechaId anteponiéndole la palabra "Trimestre", por ejemplo: Trimestre 3.
· Función Fecha a texto

Sintaxis: dateToString(Expresion, Formato)

Devuelve la fecha como un Texto con el formato indicado.

Opciones de formato.

Opción Descripción Valores
%Y Año (4 dígitos) 0000-9999
%m Mes (2 dígitos) 01-12
%d Día del mes (2 dígitos) 01-31
%H Hora (2 dígitos) 00-23
%M Minutos (2 dígitos) 00-59
%S Segundos (2 dígitos) 00-60
%L Milisegundos (3 dígitos) 000-999
%j Día del año (3 dígitos) 001-366
%u Día de la semana (1-Lunes, 7-Domingo) 1-7
%w Día de la semana (1-Domingo, 7-Sábado) 1-7
%V Semana del año (2 dígitos) 01-53
%U Semana del año (2 dígitos) 00-52

Ejemplos:

Ejemplo Resultado
dateToString([colFechaId], "%Y-%m-%d") Devuelve una cadena de Texto con la fecha almacenada en la columna con id colFechaId formateada como YYYY-MM-DD.
· Función Fecha por componentes

Sintaxis: dateFromParts(f1, f2, f3, f4, f5, f6, f7)

Devuelve una Fecha compuesta a partir de sus partes: año, mes, día, hora (formato 24h), minuto, segundos y milisegundos.

Ejemplos:

Ejemplo Resultado
dateFromParts(2018, 3, 28, 19, 50,25, 128) Devuelve la Fecha "2018/03/28 19:50:25.128"
dateFromParts(2018, 3, 28,) Devuelve la Fecha "2018/03/28 00:00:00.000"
· Función Fecha desde texto

Sintaxis: dateFromString(t)

Devuelve una Fecha a partir de una cadena de texto con el formato "año-mes-día hora24:minuto:segundos.milisegundos".

Ejemplos:

Ejemplo Resultado
dateFromString("2018-03-28 19:50:25.128") Devuelve la Fecha "2018/03/28 19:50:25.128"

Funciones de comparación

Igual Mayor Igual Mayor Menor Igual Menor
eq(e1,e2) gte(e1,e2) gt(e1,e2) lte(e1,e2) lt(e1,e2)

Warning En el caso de usar cadenas de texto con carácteres especiales, como ",+,% u otros, se han escribir precedidos por la barra backslash (\) para que se interpreten como parte de la cadena de texto y no como símbolos especiales.

· Función Igual

Sintaxis: eq(Expresion1, Expresion2)

Compara dos valores entre si, y devuelve Verdadero si los dos valores y sus tipos son iguales, y Falso en caso contrario. El tipo de retorno de la función es Booleano.

Ejemplos:

Ejemplo Resultado
eq(3, 15) Falso
eq([colNumId], 15) Verdadero si la columna con id colNumId contiene un Número con valor 15 y Falso en caso contrario.
· Función Mayor o igual

Sintaxis: gte(Expresion1, Expresion2)

Comparara dos valores entre si, y devuelve Verdadero si el primer valor es mayor o igual al segundo y sus tipos son iguales, y Falso en caso contrario. El tipo de retorno de la función es Booleano.

Ejemplos:

Ejemplo Resultado
gte(3, 15) Falso
gte([colNumId], 15) Verdadero si la columna con Id colNumId contiene un Número con valor mayor o igual a 15 y Falso en caso contrario.
· Función Mayor

Sintaxis: gt(Expresion1, Expresion2)

Compara dos valores entre si, y devuelve Verdadero si el primer valor es mayor que el segundo y sus tipos son iguales, y Falso en caso contrario. El tipo de retorno de la función es Booleano.

Ejemplos:

Ejemplo Resultado
gt(3, 15) Falso
gt([colNumId], 15) Verdadero si la columna con Id colNumId contiene un Número mayor que 15 y Falso en caso contrario.
· Función Menor o igual

Sintaxis: lte(Expresion1, Expresion2)

Compara dos valores entre si, y devuelve Verdadero si el primer valor es menor o igual al segundo y sus tipos son iguales, y Falso en caso contrario. El tipo de retorno de la función es Booleano.

Ejemplos:

Ejemplo Resultado
lte(3, 15) Verdadero
lte([colNumId], 15) Verdadero si la columna con Id colNumId contiene un Número menor o igual a 15 y Falso en caso contrario.
· Función Menor

Sintaxis: lt(Expresion1, Expresion2)

Compara dos valores entre si, y devuelve Verdadero si el primer valor es menor que el segundo y sus tipos son iguales, y Falso en caso contrario. El tipo de retorno de la función es Booleano.

Ejemplos:

Ejemplo Resultado
lt(3, 15) Verdadero
lt([colNumId], 15) Verdadero si la columna con Id colNumId contiene un Número menor que 15 y Falso en caso contrario.

Funciones de texto

Concatenación Subcadena Mayúsculas Minúsculas
concat(t1, t2, ...) substr(e1, start, len) toUpper(t) toLower(t)
Longitud de cadena Comparación de cadenas Posición de cadena
strLen(t) strCaseCmp(t1, t2) indexOf(t, st [, ini, fin])

Warning En el caso de usar cadenas de texto con carácteres especiales, como ",+,% u otros, se han escribir precedidos por la barra backslash (\) para que se interpreten como parte de la cadena de texto y no como símbolos especiales.

· Función de Concatenación

Sintaxis: concat(Expresion1, Expresion2, ...)

Concatena dos o más cadenas de Texto y devuelve el Texto concatenado.

Ejemplos:

Ejemplo Resultado
concat("Nuevo ", "texto", " añadido") Concatena los textos devolviendo "Nuevo texto añadido".
concat([colTextId], " - Texto") Concatena el texto de la columna con id colTextId con " - Texto".
· Función de Subcadena

Sintaxis: substr(Expresion, Desde, Longitud)

A partir del Texto Expresion obtiene la subcadena que comienza en el siguiente carácter en la posición Desde y toma Longitud caracteres. El tipo de retorno de la función es Texto.

Ejemplos:

Ejemplo Resultado
substr("CadenaTexto ", 6, 3) "Tex"
substr([colTextId], 0, 5) Devuelve la subcadena desde la posición 1 a la 5 de la columna con id colTextId.
· Función Mayúsculas

Sintaxis: toUpper(Expresion)

Convierte el texto Expresion en texto de letras mayúsculas. Aplica la conversión solo a caracteres ASCII.

Ejemplos:

Ejemplo Resultado
toUpper("hola") "HOLA"
toUpper("Exit") "EXIT"
toUpper([colTextId]) Devuelve cada valor de la columna con id colTextId convertido a mayúsculas.
· Función Minúsculas

Sintaxis: toLower(Expresion)

Convierte el texto Expresion en texto de letras minúsculas. Aplica la conversión solo a caracteres ASCII.

Ejemplos:

Ejemplo Resultado
toLower("Hola") "hola"
toLower("EXIT") "exit"
toLower([colTextId]) Devuelve cada valor de la columna con id colTextId convertido a minúsculas.
· Función Longitud de cadena

Sintaxis: strLen(Expresion)

Devuelve el número de caracteres del texto Expresion (estrictamente el número de UTF-8 code points).

Ejemplos:

Ejemplo Resultado
strLen("Hola") 4
strLen([colTextId]) Devuelve el número de caracteres de la columna con id colTextId.
· Función Comparación de cadenas

Sintaxis: strCaseCmp(Expresion1, Expresion2)

Dados dos textos pasados como argumentos los compara en orden alfanumérico e ignorando las mayúsculas y devuelve

  • 1 si el primero es mayor que el segundo

  • 0 si ambos textos son iguales

  • -1 si el segundo es mayor que el primero

Ejemplos:

Ejemplo Resultado
strCaseCmp("hola", "Hola") 0 (ignora la diferencia entre mayúsculas y minúsculas)
strCaseCmp("hola", "adios") 1
strCaseCmp("adios", "hola") -1
strCaseCmp([colTextId1], [colTextId2]) -1, 0 o 1 según el texto con id colTextId1 sea alfanuméricamente menor, igual o mayor que el texto con id colTextId2.
· Función Posición de cadena

Sintaxis: indexOf(Expresion, Cadena [, Inicio, Fin])

Dada una Expresion de texto se busca la Cadena de texto y se devuelve la posición (un número) de la primera coincidencia, comenzando a contar la primera posición por el número 0. En caso de no haber coincidencia se devuelve el valor -1. Opcionalmente se pueden acotar un intervalo de la Expresion, a partir de la posición de Inicio y Fin (donde el conteo de caracteres comienza en 0). .

Ejemplos:

Ejemplo Resultado
indexOf("pato", "p") 0 (primera posición)
indexOf("pato", "g") -1
indexOf("patata", "ta") 2 (tercera posición)
indexOf("patata", "t", 4, 5) 4 (quinta posición)
indexOf("patata", "t", indexOf("patata", "t", 0, strLen("patata")) + 1, strLen("patata")) 4 (quinta posición)
indexOf([colTextId], "p") Devuelve la posición de la cadena "p" en los valores de la columna de texto con id colTextId en caso de que haya coincidencia

Funciones condicionales

Condicional Es nulo
cond(e, verdadero, falso) isNull(e1, remplazo)
· Función Condicional

Sintaxis: cond(Expresion Booleana, Caso Verdadero, Caso Falso)

Si la Expresión Booleana es Verdadero cond evalúa y devuelve el valor del Caso Verdadero, y en caso contrario devuelve el valor del Caso Falso. Tanto Caso Verdadero como Caso Falso han de tener el mismo tipo de dato, y el retorno de la función será ese tipo de dato.

Ejemplos:

Ejemplo Resultado
cond(gt([numColId], 100), 1, 0) Devuelve 1 si el valor de la columna con id numColId es mayor que 100 y 0 en caso contrario (el tipo de dato devuelto será Número).
· Función "Es nulo"

Sintaxis: isNull(Expresion, Reemplazo)

La función isNull permite reemplazar los valores null de una columna por otro valor. Si Expresion tiene valor null la función devuelve el valor de Reemplazo, que ha de tener el mismo tipo de dato que Expresion, mientras que si Expresion tiene cualquier valor distinto de null devolverá ese mismo valor.

Ejemplos:

Ejemplo Resultado
ifNull([numColId], 0) Devuelve 0 si el valor de la columna con id numColId es null y en caso contrario devuelve el valor de la columna con id numColId (el tipo de dato devuelto será Número).

Funciones lógicas

Función 'Y' Función 'O' Función 'No'
and(e1, e2, ...) or(e1, e2, ...) not(e1)

Warning Los dos posibles valores de una variable booleana son true y false. Aquí se referencian como Verdadero y Falso, pero de escribirlas explícitamente en tabulae habrá que utilizar los primeros valores.

· Función 'Y'

Sintaxis: and(Expresion Booleana, Expresion Booleana 2, ...)

Evalúa todas las expresiones booleanas pasadas como parámetros y devuelve Verdadero si todas ellas son verdaderas o Falso si alguna de ellas no se cumple.

Ejemplos:

Ejemplo Resultado
and(true, false) false
and(gt([numColId], 100), lt([numColId2], 50)) Devuelve Verdadero si el valor de la columna con id numColId es mayor que 100 y el valor de la columna con id numColId2 es menor que 50, y Falso si una de las dos condiciones no se cumple.
· Función 'O'

Sintaxis: or(Expresion Booleana, Expresion Booleana 2, ...)

Evalúa las expresiones booleanas pasadas como parámetros y devuelve Verdadero si se cumple una de ellas o Falso si no se cumple ninguna.

Ejemplos:

Ejemplo Resultado
and(true, false) true
or(gt([numColId], 100), lt([numColId2], 50)) Devuelve Verdadero si el valor de la columna con id numColId es mayor que 100 o si el valor de la columna con id numColId2 es menor que 50, y Falso si ninguna de las dos condiciones se cumple.
· Función 'No'

Sintaxis: not(Expresion Booleana)

Niega el resultado de la expresión booleana pasada como parámetro, es decir, devuelve Verdadero si no se cumple la expresión booleana y Falso si la expresión booleana es verdadera.

Ejemplos:

Ejemplo Resultado
not(true) false
not(gt([numColId], 100)) Devuelve Verdadero si el valor de la columna con id numColId es menor o igual que 100 y Falso si el valor de la columna sí que es mayor que 100.

Variables

Las variables son valores externos a la consulta que se está implementando. Hay 3 tipos de variables que se pueden usar en las fórmulas:

  • Variables globales: Son propias de Tabulae y no se pueden modificar:

    • Variable $now: Es una variable con la fecha actual UTC cond detalle hasta los milisegundos.

    • Variable $null: Es una variable nula (es decir, representa la falta de valor), y toma automáticamente el tipo de dato que corresponda según el lugar donde se use.

  • Escenarios: El uso natural de los escenarios es a través de fórmulas. Cualquier palanca o escenario definido está accesible como variable: el valor seleccionado por el usuario será el transmitido a la fórmula. Como éste es dinámico a voluntad del usuario el cambio de valor se transmite a los widgets a través de las fórmulas que los invocan, recalculándose el contenido cada vez que se mueve una palanca.

  • Valores de filtros: Los filtros afectan a los widgets reduciendo el dataset a los registros compatibles a la selección hecha, pero en ocasiones también se puede querer usar tales valores en fórmulas, especialmente en el caso de que los filtros sean de selección única o de tipo comparador. Por ello al seleccionar un campo de un filtro en la parte izquierda del menú de fórmulas se permite elegir entre el primer o segundo valor de la selección. En ese caso la variable tomará el valor seleccionado en el filtro. El carácter dinámico del filtro se transmite a los widgets a través de las fórmulas que los invocan, recalculándose el contenido cada vez que se cambia una selección.

Diálogo de variables en fórmulas, con selector de valor de filtro desplegado
Imagen - Diálogo de variables en fórmulas, con selector de valor de filtro desplegado

Subqueries

El uso natural de las subconsultas o subqueries es a través de fórmulas. Cada subconsulta se cálcula de forma independiente a los widgets de una aplicación, y devuelve un conjunto de campos con un único valor. Cada uno de ellos está accesible como variable a través de las fórmulas. Además, como pueden ser dependientes de los filtros, y variar en función de las selecciones hechas, su uso permite relacionando diferentes datos y datasets, y por tanto hacer cálculos complejos más allá de la información base que hay en el dataset donde se crea la fórmula.

Info En caso de no tener la información necesaria antes de comenzar a crear la fórmula, hay un enlace para crear una subconsulta. En caso de querer modificar una que ya existe se accede al editor de la subconsulta al hacer clic en el icono . Al salir de la subconsulta se vuelve de nuevo al editor de fórmulas tal cual se dejó.

Diálogo de subqueries en fórmulas
Imagen - Diálogo de subqueries en fórmulas