La sentencia Constrain puede utilizarse en combinación con las sentencias Let o Set para definir variables de script. La sentencia Constrain le permite definir restricciones en los posibles valores de estas variables. Si la definición de una variable viola las restricciones, la recarga falla. Con las restricciones, podemos exigir que los valores de las variables coincidan con determinados tipos específicos, que se encuentren dentro de rangos numéricos concretos o que coincidan con valores aceptables definidos por nosotros.
Sintaxis:
Constrain variablename = json
Donde:
variablename es una variable de script.
json es un objeto JSON válido que especifica las restricciones. Las restricciones individuales se añaden dentro de este objeto como pares de clave y valor.
Tipos de restricciones
Tipo de restricción (clave)
Significado
Requisitos de restricción (valor)
Ejemplos
"type"
Limitar los valores de las variables a un tipo de datos específico.
"text" especifica un tipo de texto.
"number" especifica un tipo numérico.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Indique un valor máximo para una variable.
Solo números (enteros o de punto flotante). Se permite la notación científica.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Indique un valor mínimo para una variable.
Solo números (enteros o de punto flotante). Se permite la notación científica.
CONSTRAIN vExample = {"minnum": 250}
"valuesnum"
Defina una lista de valores numéricos aceptables para la variable.
Lista separada por comas de números incluidos entre corchetes. Por ejemplo una barra invertida: [1,2,3]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"valuestext"
Defina una lista de valores de texto aceptables para la variable.
Lista separada por comas de cadenas de texto entre corchetes. Por ejemplo una barra invertida: ["a","b","c"]
Utilice la sentencia Constrain para evitar que se carguen valores de variables no deseados en las apps de análisis. En las secciones siguientes se describen formas específicas en que puede utilizarla.
Actualización de la variable de tiempo de recarga
Constrain es especialmente útil cuando se utiliza en combinación con actualizaciones de variables en tiempo de recarga. Con las actualizaciones de variables en tiempo de recarga, puede actualizar dinámicamente las variables durante las recargas de la app, utilizando la propiedad variables de la API de recargas Reloads. La sentencia Constrain impide que se incorporen definiciones de variables maliciosas o con mal formato a las recargas de análisis.
Las actualizaciones de variables en tiempo de recarga, junto con la sentencia Constrain, admiten los siguientes casos de uso:
Apps con plantillas que cargan datos de forma selectiva en función de condiciones como el ID o el nombre del cliente (que pueden pasarse en el momento de la carga como variables).
Control central sobre apps distribuidas en muchos espacios empresariales inquilinos de Qlik Cloud
Migración de flujos de trabajo y tareas orientados a variables desde QlikView y Qlik Sense Client-Managed a la nube
Seguridad, fiabilidad y colaboración
Incluso cuando se utiliza fuera de los escenarios de actualización de variables en tiempo de recarga, Constrain mejora los controles de seguridad para la autoría de scripts de carga; por ejemplo, durante el desarrollo colaborativo de scripts de carga. Por ejemplo, el propietario de una app podría definir restricciones para los valores de las variables, informando a los colaboradores de las condiciones específicas que deben cumplirse para que la app se recargue correctamente de forma fiable.
Consideraciones
La definición Constrain para la variable debe ser un objeto JSON válido.
Puede especificar más de una restricción para una misma variable. Todas las restricciones de una variable deben estar contenidas en un único objeto de restricción. Para ejemplos, vea Ejemplos: múltiples restricciones.
Si ya ha cargado en la app una variable de script con un nombre determinado, los futuros intentos de definir restricciones y valores para esa variable pueden fallar debido a conflictos entre las variables originales y las redefinidas.
Para resolver estos conflictos, restablezca las restricciones y los valores de las variables insertando definiciones en blanco. Ejemplos:
El orden de la definición de la variable y la definición de la restricción no importa. Sin embargo, en caso de fallo de recarga relacionado con la variable, la línea en la que se produce el punto de ruptura será diferente.
La sentencia de script Constrain solo restringe las definiciones de variables para las variables de script. También puede aplicar restricciones a las variables de script y de usuario final (las creadas o actualizadas en la vista de hoja o como variables de sesión mediante la API) utilizando la API pública. Para más información, vea Alternativas de desarrollo para definir las restricciones de las variables.
Alternativas de desarrollo para definir las restricciones de las variables
También puede utilizar la API pública para definir restricciones de variables, en lugar de utilizar la sentencia Constrain en el script de carga. Si define restricciones mediante la API, todos los intentos de actualizar los valores de las variables, ya sea directamente en el script de carga, en la vista de hoja o a través de la API Reloads, estarán sujetos a las restricciones.
Para definir restricciones de variables mediante la API pública, utilice el objeto GenericVariableConstraints en la API Qlik Sense Engine (qix): GenericVariableConstraints.
Ejemplo: type
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para a debe tener el tipo number.
Una sentencia LET que define la variable a.
Script de carga
CONSTRAIN a = {"type": "text"};
LET a = 1000;
Resultados
Cargue los datos.
La recarga falla porque la restricción requiere un tipo de texto para la variable a. La definición de la variable es un número.
Por el contrario, especificar un type de number en la restricción haría que la recarga tuviera éxito.
Ejemplo: maxnum
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para b puede tener un valor máximo de 3000.
Una sentencia LET que define la variable b.
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
Resultados
Cargue los datos.
La recarga falla porque la restricción exige un valor máximo de 3000 para la variable b. La definición de la variable se evalúa como 3001.
Por el contrario, especificar b como 2999 haría que la recarga tuviera éxito.
Ejemplo: minnum
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para b puede tener un valor mínimo de 3000.
Una sentencia LET que define la variable c.
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
Resultados
Cargue los datos.
La recarga falla porque la restricción exige un valor mínimo de 3000 para la variable c. La definición de la variable se evalúa como 2999.
Por el contrario, especificar c como 3000 haría que la recarga tuviera éxito.
Ejemplo: valuesnum
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para d debe ser numérica y debe ser 2, 3 o 4.
Una sentencia LET que define la variable d.
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
Resultados
Cargue los datos.
La recarga falla porque la variable d se evalúa como 1, que no está en la lista de tres valores posibles.
Por el contrario, especificar d como 2 haría que la recarga tuviera éxito.
Ejemplo: valuestext
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para e debe ser uno de los siguientes valores de texto:
Department A
Department B
Department C
Una sentencia SET que define la variable e.
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
Resultados
Cargue los datos.
La recarga falla porque la variable e es Department D, que no está en la lista de valores permitidos definida por la restricción.
Por el contrario, especificar e como Department C haría que la recarga tuviera éxito.
Ejemplos: SET versus LET
Estos ejemplos muestran las diferencias de aplicación entre las restricciones cuando se utiliza SET o LET durante la definición de las variables. Todos los ejemplos utilizan restricciones que aplican un requisito de type, pero estos principios se aplican a todos los tipos de restricciones en general.
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para f debe tener el tipo number.
Una sentencia SET que define la variable f.
Script de carga
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
Resultados
Cargue los datos.
La recarga falla porque la restricción requiere un tipo numérico para la variable f. La definición de la variable contiene una expresión numérica, pero como se utiliza una sentencia SET, la definición se evalúa como texto.
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para g debe tener el tipo text.
Una sentencia LET que define la variable g.
Script de carga
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
Cargue los datos.
La recarga falla porque la restricción requiere un tipo de texto para la variable g. La definición de la variable contiene una expresión numérica y se utiliza una sentencia LET, que hace que la definición se evalúe como un número.
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para h debe tener el tipo text.
Una sentencia SET que define la variable h.
Script de carga
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
Cargue los datos.
La recarga tiene éxito. La restricción requiere un tipo de texto para la variable h. La definición de la variable contiene una expresión numérica, pero como se utiliza una sentencia SET, la definición se evalúa como texto.
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para i debe tener el tipo number.
Una sentencia LET que define la variable i.
Script de carga
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
Cargue los datos.
La recarga tiene éxito. La restricción requiere un tipo numérico para la variable i. La definición de la variable contiene una expresión numérica y se utiliza una sentencia LET, que hace que la definición se evalúe como un número.
Ejemplos: múltiples restricciones
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain para especificar que la definición de la variable para j tiene que estar entre 1 y 5.
La recarga tiene éxito. La variable f se evalúa como 2, que está dentro del rango aceptable.
Vista general
Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.
El script de carga contiene:
Una sentencia Constrain que permite que la variable sea textual o numérica, siempre que sea uno de los valores aceptables.
Una sentencia LET que define la variable k.
Script de carga
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
Cargue los datos.
La recarga tiene éxito. El valor de la variable k se encuentra en la lista de valores aceptables. Del mismo modo, especificar k como 3 daría como resultado una recarga con éxito.
Ejemplo: resolución de conflictos en la definición de variables
Vista general
Este ejemplo muestra cómo pueden producirse conflictos de definición de variables al añadir restricciones para una variable que ya ha sido definida en la app a partir de una carga anterior.
Script de carga 1: definir una variable de script
Abra Editor de carga de datos. Agregue el siguiente script:
LET vConflictExample = 'Department C';
Cargue los datos. La recarga se ha realizado correctamente. La variable vConflictExample se ha creado en la app como variable de script.
Script de carga 2: intento de definición de una restricción en una variable de script cargada previamente
Borre el script de carga 1. Añada el siguiente script:
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
Cargue los datos.
La recarga falla con un error de restricción, aunque la nueva restricción y la definición del valor sean compatibles. Esto se debe a que el script de carga 1 ya cargó la variable en la app, con un valor de texto, y este valor aún persiste en la app. Para resolver este problema, tenemos que restablecer la restricción y la definición de la variable. Ver script de carga 3.
Script de carga 3: restablecer las definiciones de restricciones y valores
Borre el script de carga 2. Añada el siguiente script:
La recarga tiene éxito. El script anterior puede dividirse en tres partes, cada una separada por líneas en blanco:
La primera parte restablece la definición de la restricción y del valor para vConflictExample. Esto elimina la definición que se cargó en la app con el script de carga 1.
La segunda parte vuelve a aplicar las nuevas definiciones de restricciones y valores que fallaron en el script de carga 2.
La tercera parte añade datos simulados simplemente para que podamos abrir la vista de hoja e inspeccionar el valor de la variable (véase más abajo).
Abra la vista de hoja en modo de edición y abra el cuadro de diálogo Variables. Podemos ver que la variable vConflictExample se ha creado correctamente.
El diálogo de variables en la vista de hoja muestra que se ha resuelto el conflicto de definición de variables para vConflictExample.
Si encuentra algún problema con esta página o su contenido (errores tipográficos, pasos que faltan o errores técnicos), no dude en ponerse en contacto con nosotros.