Saltar al contenido principal

Expresiones de enlace en apps de plantilla a demanda

Los enlaces de datos en una app de plantilla especifican qué datos de su correspondiente app de selección se utilizan para formular las consultas emitidas al cargar datos en una app a demanda.

La forma básica de expresiones de enlace --$(odag_FIELDNAME)-- no es el único método disponible para enlazar expresiones. Se pueden usar otros prefijos también para afinar las selecciones y para garantizar que la app de plantilla cargue los datos correctamente.

Advertencia: Las apps de plantilla creadas originalmente con la extensión Qlik Sense para On-demand App Generation deben cambiarse para utilizar el enfoque ilustrado a continuación para enlazar una gran cantidad de selecciones de un campo.

Prefijos de enlace disponibles

La forma de prefijo general es odag[s|o][n][cnt], donde:

  • s - incluye solo valores seleccionados
  • o - incluye solo valores opcionales
  • n - elige la versión numérica, por defecto sin comillas
  • cnt - inserta el número de valores en lugar de los valores reales

La siguiente tabla proporciona una lista de todas las versiones de los prefijos de enlace disponibles. Los ejemplos poseen un campo denominado MyField con 1,2,3 como valores seleccionados (de color verde) y 4 como valor seleccionado opcional (en blanco).

Prefijos de enlace
Prefijo Descripción Ejemplo Reemplazado por
odag_ Reemplazado por los valores seleccionados (en verde) y opcionales (en blanco). Selecciona la versión textual de los valores. Este es el prefijo estándar para los valores de cadena. $(odag_MyField) '1','2','3','4'
odagcnt_ Reemplazado por el número de valores en el correspondiente enlace odag_. Este prefijo se utiliza para la optimización de consultas. $(odagcnt_MyField) 4
odagn_

Reemplazado por los valores seleccionados (en verde) y opcionales (en blanco). Selecciona la versión numérica de los valores. Este es el prefijo estándar para valores numéricos.

Nota:

Si el modelo de datos es tal que no puede haber valores seleccionados u opcionales del campo, se debe especificar un noValue en la expresión. Por ejemplo, $(odagn_MyField){"noValue":"-99999"}.

Para más información, vea Cambiar los caracteres de entrecomillado de valor y delimitador.

$(odagn_MyField) 1,2,3,4
odagncnt_ Reemplazado por el número de valores en el correspondiente enlace odagn_. Esto sirve para la optimización de las consultas. $(odagncnt_MyField) 4
odago_

Reemplazado por los valores opcionales (en blanco). Selecciona la versión textual de los valores. Esto sirve para la optimización de las consultas.

Optimizando para grandes bases de datos.

$(odago_MyField) '4'
odagocnt_ Reemplazado por el número de valores en el correspondiente enlace odago_. Esto sirve para la optimización de las consultas. $(odagocnt_MyField) 1
odagon_

Reemplazado por los valores opcionales (en blanco). Selecciona la versión numérica de los valores. Esto sirve para la optimización de las consultas.

Optimizando para grandes bases de datos.

$(odagon_MyField) 4
odagoncnt_ Reemplazado por el número de valores en el correspondiente enlace odagon_. Esto sirve para la optimización de las consultas. $(odagoncnt_MyField) 1
odags_

Reemplazado por los valores seleccionados (en verde). Selecciona la versión textual de los valores. Esto sirve para la optimización de las consultas.

Optimizando para grandes bases de datos.

$(odags_MyField) '1','2','3'
odagscnt_ Reemplazado por el número de valores en el correspondiente enlace odags_. Esto sirve para la optimización de las consultas. $(odagscnt_MyField) 3
odagsn_

Reemplazado por los valores seleccionados (en verde). Selecciona la versión numérica de los valores. Esto sirve para la optimización de las consultas.

Optimizando para grandes bases de datos.

$(odagsn_MyField) 1,2,3
odagsncnt_ Reemplazado por el número de valores en el correspondiente enlace odagsn_. Esto sirve para la optimización de las consultas. $(odagsncnt_MyField) 3
Nota:

Los valores vacíos se filtran en las versiones de texto. Los valores no numéricos y NaN se filtran en las versiones numéricas.

Optimizando para grandes bases de datos

Los prefijos odags_ y odagsn_ están destinados a la optimización de consultas. Cuando no hay selecciones en los campos enlazados, odag_ incluye todos los valores, mientras que odags_ no incluye valores. En algunos casos, es más eficiente usar los prefijos odags_ y odagscnt_. Esto le permite probar si el conjunto de valores está vacío. Por ejemplo, lo siguiente es más eficiente cuando no se realizan selecciones en MyField que probar todos los valores en odag_MyField:

WHERE ($(odagscnt_MyField)=0 OR MyColumn IN ($(odags_MyField)))

odags_ no se puede usar cuando hay un campo alternativo para seleccionar en la app de selección que no sea un campo bajo demanda. Por ejemplo, si el usuario realiza selecciones en CountryName, pero la expresión de enlace está en el campo asociado CountryCode, no se puede utilizar odags_. En estos casos se puede usar odago_ en su lugar. Si no hay valores en un enlace odago_, puede significar que se deben incluir todos los valores o que no se deben incluir valores.

Enlazar valores numéricos

Cuando los datos que se van a enlazar a la app a demanda consisten en números en lugar de cadenas de texto, es útil deshabilitar el entrecomillado de los campos numéricos. Por ejemplo, si los registros de ventas incluyen una columna numérica DAY_OF_WEEK y desea que el usuario de la app de selección seleccione combinaciones arbitrarias de DAY_OF_WEEK, aumentaría la consulta de agregación utilizada para cargar la app de selección para que incluya DAY_OF_WEEK tanto en la lista SELECT como en la lista GROUP BY. Si se colocan comillas en torno a los valores DAY_OF_WEEK cuando están seleccionados, podría producirse un error de consulta en tiempo de ejecución si la base de datos no admite la conversión automática de cadena de texto a numérica.

Para manejar esta situación, puede usar una versión numérica del sufijo de la expresión de enlace. Esto obliga al enlace de campo a usar los valores numéricos de la app de selección en lugar de los valores de cadena. Están disponibles las siguientes versiones numéricas:

  • odagn_
  • odagon_
  • odagsn_

Al usar versiones numéricas, los valores se seleccionan de la parte numérica en los duales que almacenan los valores seleccionados y los valores no están entre comillas de manera predeterminada.

Cuando se requiere un cierto número de selecciones

En algunas situaciones, puede ser necesario que la consulta a la app a demanda contenga un número específico o un determinado rango de valores para un campo específico. Por ejemplo, si la consulta de la app a demanda contiene una cláusula BETWEEN para obtener todas las ventas entre una fecha de inicio y una de finalización, la expresión de enlace para el campo YEARQUARTER puede tener una sintaxis de sufijo de [2] que requerirá exactamente seleccionar dos valores para YEARQUARTER, como en:

$(odag_YEARQUARTER)[2]

El punto de navegación de la app a demanda en la app de selección permanecerá deshabilitado siempre que no haya exactamente dos valores de YEARQUARTER seleccionados. Aparecerá un mensaje para indicar que deben seleccionarse exactamente dos valores de YEARQUARTER.

Las restricciones en cuanto a la cantidad de selección crean un enlace de requisito previo entre la app de selección y la app a demanda. Esto es diferente de las expresiones de enlace que no usan restricciones de cantidad. Por ejemplo, cuando el script de la app de plantilla contiene una expresión de enlace sin una restricción de cantidad, como en:

$(odag_MYFIELD)

no hay ningún requisito en cuanto a que la app de selección contenga un campo llamado MYFIELD ni que haya ningún valor seleccionado de ese campo si existe. Si la app de selección no contiene un campo denominado MYFIELD o si el usuario simplemente no hace ninguna selección, el punto de navegación de la app a demanda aún puede habilitarse cuando se realicen otras selecciones para cumplir con la condición de valor límite de registro.

Si por otro lado, la expresión de enlace es:

$(odag_MYFIELD)[1+]

ahora hay dos requisitos aplicados a la app de selección:

  • La app de selección debe contener un campo llamado MYFIELD.
  • El usuario debe seleccionar al menos un valor para MYFIELD.

Este tipo de expresión de enlace debe usarse con cuidado porque limita qué apps de selección se pueden usar con la app de plantilla. No debe usar esta restricción de cantidad en los enlaces de una app de plantilla a menos que esté seguro de que desea imponer ese requisito de cantidad de selección en todas las apps de selección que enlacen con esa app de plantilla.

Para efectuar el proceso de enlace de datos, el servicio de apps a demanda utiliza un método de sustitución de cadenas que es insensible a los comentarios en el script. Esto significa que no debe utilizar expresiones de enlace en los comentarios a menos que desee que esos comentarios contengan la lista de valores enlazados tras la generación de la app.

También se pueden hacer otras restricciones en cuanto a cantidad. La tabla siguiente resume las diferentes combinaciones que se pueden hacer en cuanto a restricciones en la cantidad de selección.

Diferentes combinaciones en cuanto a restricciones en la cantidad de selección
Tipo de restricción Requisito de selección
$(odag_YEARQUARTER)[2] Deben seleccionarse exactamente 2 valores de YEARQUARTER.
$(odag_YEARQUARTER)[2-4] Deben seleccionarse entre 2 y 4 valores de YEARQUARTER.
$(odag_YEARQUARTER)[2+] Deben seleccionarse al menos 2 valores de YEARQUARTER.
$(odag_YEARQUARTER)[2-] Se pueden seleccionar como mucho 2 valores de YEARQUARTER.
Nota: La comprobación para determinar si se han cumplido todas las restricciones de cantidad en la app de plantilla se realiza durante el proceso de generación de la app. Si se viola una restricción de cantidad, se rechazará la solicitud para generar la app y se mostrará un mensaje de error.

Cambiar los caracteres de entrecomillado de valor y delimitador

Cuando una lista de valores de un campo seleccionado en una app de selección se inserta en el script de una app de plantilla, los valores van encerrados entre comillas simples y separados por comas. Estos son los caracteres predeterminados para entrecomillado y delimitadores. Estos valores se pueden cambiar en la sintaxis añadida a la sentencia de enlace para cada campo. Por ejemplo:

$(odag_ORIGIN){"quote": "|", "delimiter": ";"}

Estos nuevos valores se utilizan después al formular la lista de valores de enlace tomados de la app de selección. Si, por ejemplo, los valores seleccionados son los primeros tres meses del año, la lista se construiría así:

|Enero|;|Febrero|;|Marzo|

Los valores predeterminados para los caracteres de entrecomillado y delimitador funcionan para la mayoría de bases de datos SQL estándar. Pero podrían no funcionar para algunas bases de datos SQL y no funcionan en el caso de numerosas fuentes de datos dinámicas como NoSQL y REST. Para esas fuentes, es necesario agregar esta expresión de enlace a fin de cambiar los caracteres de entrecomillado y delimitador.

La tabla siguiente describe los parámetros de formato para cambiar las comillas y los caracteres delimitadores.

Parámetros de formato
Parámetro Valor predeterminado Definición
quote

' (comilla simple) para prefijos de texto

vacío para prefijos numéricos

Se agregará antes y después de cada valor
delimiter , (coma) Se agregará entre todos los valores
quoteReplace '' (comillas simples dobles)

Cuando el valor no esté vacío y la cita no esté vacía, todas las instancias de la cita dentro de los valores serán reemplazadas por la cadena especificada.

Nota: quoteReplace no se admite como parámetro para prefijos numéricos como odagn_. quoteReplace es ignorado por los prefijos numéricos.
noValue (vacío)

Cuando no haya valores seleccionados para un campo, este valor se utilizará en su lugar. Este parámetro es útil cuando no pueda haber valores de un campo en particular en la selección.

El valor deberá establecerse en un valor que no exista en los datos de origen. Para valores numéricos, por ejemplo, use un valor negativo si todos los valores en la base de datos son positivos.

Nota: Para valores sin comillas, debe especificarse noValue si los valores seleccionados del campo pueden ser un conjunto vacío.

Las siguientes tablas resumen la especificación de formato y los valores generados para odag_ y odagn_. Los valores insertados generados se basan en los valores de datos predeterminados de VAL1, VAL2.

Especificaciones de formato de odag_ a modo de ejemplo y valores generados
Especificación de formato Descripción Valores insertados generados
no especificado

Lista de valores separados por comas, citados con '.

'VAL1','VAL2'
{"quote": "", "delimiter": ""} Valores concatenados VAL1VAL2

{"quote": "X", "delimiter": "Y"}

Valores citados por X y delimitados por Y.  XVAL1XYXVAL2X
{"quote": "XX", "delimiter": "YY"} Valores citados por XX y delimitados por YY.  XXVAL1XXYYXXVAL2XX
{"quote": "X"} Valores citados por X y delimitados por , (predeterminado).  XVAL1X,XVAL2X
{"delimiter": "YY"} Valores citados por ' (predeterminado) y delimitados por YY. 'VAL1'YY'VAL2'
{"quote": ""} Valores sin comillas delimitados por ,. VAL1,VAL2
{"quote": "A", "quoteReplace": "\\A"}

Valores citados por A y delimitados por coma (predeterminado). Los valores A dentro del campo serán reemplazados por \A.

Nota:

En este ejemplo, debe haber un doble \ ya que \ es el carácter de escape en formato json.

AV\AL1A,AV\AL2A
Especificaciones de formato de odagn_ a modo de ejemplo y valores generados
Especificación de formato Descripción Valores insertados generados
no especificado

Lista de valores separados por comas sin comillas. Tenga en cuenta que se utilizarán los valores numéricos.

VAL1,VAL2
{"delimiter": "YY"} Valores sin comillas delimitados por YY VAL1YYVAL2
{"quote": "A", "quoteReplace": "\\A"} En comparación con el prefijo odag_ se ignorará el parámetro quoteReplace. AVAL1A,AVAL2A

Procesar valores individuales

Cuando se requiera el procesamiento individual de los valores de campo, puede usar un método inline para generar valores en la variable Values y realizar un procesamiento arbitrario con Replace u otra función. En el ejemplo a continuación, Replace se usa con valores de marcador de posición.

MyTempBindingData: LOAD * INLINE [VAL $(odag_MyField){"quote": "", "delimiter": "\n"} ]; _TempTable: LOAD Concat(chr(39) & Replace(text, from_str, to_str) & chr(39), ',') as CombinedData Resident MyTempBindingData; LET Values = Peek('CombinedData',0,'_TempTable'); drop table _TempTable; drop table MyTempBindingData;