Crear una app de plantilla a demanda

Una app de plantilla a demanda es una app Qlik Sense normal pero con una importante diferencia: su script de carga contiene expresiones de enlace a los datos utilizadas para formular las consultas efectuadas en las fuentes de datos. Estas expresiones de enlace a los datos se utilizan en el tiempo de generación de una app a demanda para leer valores del estado de selección de la app de selección y vincularlas al script de la app de plantilla para que la aplicación generada se cargue con un subconjunto de datos controlado por el usuario.

La app de plantilla normalmente se conecta a la misma fuente de datos que la app de selección. El script de carga de una app de selección generalmente carga datos agregados para reducir los volúmenes de datos y al mismo tiempo ofrece visualizaciones interactivas de dimensiones y medidas importantes. El script de carga de una app de plantilla utiliza consultas que cargan un subconjunto controlado de datos más granulares.

Nota: Una app de plantilla a demanda no carga los datos directamente. Si intenta cargar datos desde la app de plantilla, se producirá un error. La conexión de la app de plantilla debe ser válida, pero para probar si la conexión funciona correctamente debe generar una app a demanda. Cuando se genera una app a demanda, el servicio de apps a demanda modifica la secuencia del script de carga para cargar el estado de selección de la app de selección a demanda. Si la app a demanda se genera sin errores, entonces sabrá que la conexión en la app de plantilla funciona correctamente.
Nota: Tenga en cuenta el tamaño de sus apps al desarrollar apps de plantilla a demanda en Kubernetes. En función de su despliegue, puede haber límites en el almacenamiento o el uso de una gran cantidad de almacenamiento puede provocar que el despliegue de la nube aumente de tamaño. Póngase en contacto con el administrador del sistema para obtener más información.

Estructura de una app de plantilla

Una app de plantilla está vinculada a una app de selección que utiliza un enlace de navegación de app a demanda. El enlace de navegación de aplicaciones incluye propiedades que controlan el número de registros consultados cuando la app a demanda se carga con datos. El script de carga de la app de plantilla contiene expresiones de enlace de datos que especifican qué datos de campos de la app de selección se utilizan para formular las consultas emitidas al cargar datos en la app a demanda.

Nota: Hay un ejemplo de app de plantilla a demanda incluido en la instalación de Qlik Sense Enterprise on Windows en ProgramData\Qlik\Examples\OnDemandApp\sample. Esta funcionalidad no está disponible en Kubernetes.

Las expresiones de enlace de datos tienen la forma siguiente:

$(od_FIELDNAME)

El prefijo od_ se utiliza para vincular el estado de selección de la app de selección con el script de carga de la app a demanda, el cual se crea al copiar la app de la plantilla. La parte de la expresión de enlace de datos que sigue al prefijo od_ debe ser un nombre que coincida con un campo en la app de selección. Cuando se genera la app a demanda, el estado de selección actual de la app de selección se usa para obtener los valores deseados para enlazar para cada campo. Cada instancia de una expresión $(od_FIELDNAME) en el script de carga de la app a demanda recién creada se reemplaza por la lista de valores seleccionados para el campo correspondiente en el estado de selección de la app de selección.

Para más información sobre cómo enlazar valores usando sentencias de carga INLINE, vea Expresiones de enlace en apps de plantilla a demanda.

Para ser una sintaxis SQL válida, la sentencia SELECT de la app de plantilla para filtrar por múltiples valores debe usar una cláusula IN. La práctica recomendada es escribir una subrutina para crear la claúsula WHERE correcta:

SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB;

Antes de llamar a la subrutina ExtendWhere debe establecer la variable WHERE_PART.

SET WHERE_PART = '';

Si desea que la sentencia SQL tenga una cláusula WHERE inmutable además de las cláusulas que la app de selección insertará, inserte una cláusula 'WHERE <condition>' en la sentencia SET. O si no, utilice la sentencia SET simple.

A continuación un ejemplo de cómo se utiliza la subroutina ExtendedWhere:

FOR EACH fldname IN 'ORIGIN', 'DEST', 'YEAR', 'QUARTER', 'ORIGIN_STATE_ABR', 'DEST_STATE_ABR' LET vallist = $(fldname); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname

La lista de nombres de campo debe coincidir con los nombres de los campos utilizados en cada enlace de campo creado.

Una vez que se ha generado la lista de valores para cada campo, se puede escribir una sentencia SELECT. Por ejemplo:

SQL SELECT "MKT_ID", "YEAR", "QUARTER", "ORIGIN", "ORIGIN_STATE_ABR", "DEST", "DEST_STATE_ABR", "TICKET_CARRIER", "FARE_CLASS", "PASSENGERS", "DISTANCE", 1 AS "FLIGHT_COUNT" FROM "SAPH7T"."/QT/AIRPORT_FACT" $(WHERE_PART);

La parte $(WHERE_PART) de la sentencia SELECT se expandirá hasta incluir la cláusula WHERE generada por la ejecución del bucle FOR-NEXT ilustrado arriba. La lista de expresiones de columna que siguen a la palabra clave SELECT se debe modificar para que coincida con las columnas de la tabla de su base de datos específica.

Advertencia: Evite utilizar los nombres de campos del modelo de app de plantilla cuando cree variables de enlace de apps a demanda. Las variables definidas en el script están disponibles en el modelo de app de plantilla al que se hace referencia al crear visualizaciones de datos. La elección de variables de enlace de apps a demanda que no se solapen con los campos del modelo evitará confundir de forma no intencionada entre los campos del modelo de la app de plantilla y las variables de vinculación de apps a demanda en el script de carga de datos. Una buena práctica es establecer un prefijo para variables de vinculación de apps a demanda. Por ejemplo, use X_ORIGIN en vez de ORIGIN.

Inicio de sesión único (SSO)

Las apps a demanda pueden utilizar single sign-on (SSO) con fuentes de datos compatibles con SSO. El motor y la fuente de datos deben configurarse para permitir SSO.

Nota: Esta funcionalidad no está disponible en Kubernetes.

Para más información, vea Configurar SAP HANA para SAML Single Sign-On con Qlik Sense (solo en inglés) y Configurar Cloudera Impala para Single Sign-On (solo en inglés).

Una vez que el motor y la fuente de datos se han configurado para SSO, la app de plantilla debe habilitar SSO agregando la sintaxis siguiente al script de la app de plantilla:

///!ODAG_SSO

El servicio On-Demand App Service analiza el script cuando se genera una app a demanda y cada vez que se vuelve a cargar.

Cuando una app a demanda se carga con SSO,la identidad del usuario final se envía a la fuente de datos. El usuario final debe tener acceso a las fuentes utilizadas en las conexiones de datos de la app de plantilla. Solo se cargan los datos a los que el usuario tiene acceso en esas fuentes, incluso si se selecciona un conjunto de datos más grande.

Advertencia: Las apps a demanda generadas a partir de apps de plantilla que se usan single sign-on (SSO) no se pueden publicar.

Cargar nodos para apps de plantilla

Los administradores pueden controlar dónde se cargan las apps a demanda en un entorno de varios nodos estableciendo reglas de equilibrio de carga en apps de plantilla. Cuando se establece una regla de equilibrio de carga, todas las apps generadas a partir de enlaces a la app de plantilla se cargarán de acuerdo con la regla que se aplica a la app de plantilla. Para más información, vea Administrar apps a demanda (solo en inglés).

Nota: Esta funcionalidad no está disponible en Kubernetes.