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](images/formulas-dialog.png)
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](images/formulas-variables.png)
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](images/formulas-subqueries.png)