Expressions de liaison dans les applications modèles On-demand

Les liaisons de données figurant dans une application modèle indiquent quelles données d'une application de sélection correspondante sont utilisées pour formuler les requêtes émises au moment du chargement des données dans l'application On-demand.

Il est possible de modifier la forme de base des expressions de liaison — $(od_FIELDNAME) — de façon à affiner les sélections et à s'assurer que l'application modèle charge correctement les données.

Avertissement: Il convient de modifier les applications modèles initialement créées à l'aide de l'extension Qlik Sense pour On-demand App Generation de façon qu'elles adoptent l'approche illustrée ci-dessous pour lier un grand nombre de sélections à partir d'un champ.

Liaison d'un grand nombre de sélections à partir d'un champ

Qlik Associative Engine limite le nombre de valeurs qu'il est possible de concaténer au sein d'une seule instruction LET. Afin de contourner cette limitation, vous pouvez utiliser une instruction INLINE LOAD de manière à construire de manière efficace une liste de valeurs séparées par des virgules.

Tout d'abord, vous devez élaborer une sous-routine de script destinée à traiter une table INLINE.

SUB BuildValueList(VarName, TableName, ColName, QuoteChrNum) IF $(QuoteChrNum) = 0 THEN LET LOADEXPR = 'Concat($(ColName),' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ELSE LET CHREXPR = ' chr(' & '$(QuoteChrNum)' & ') '; LET LOADEXPR = 'Concat( $(CHREXPR) & $(ColName) & $(CHREXPR)' & ',' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ENDIF _TempTable:   LOAD $(LOADEXPR) Resident $(TableName); Let vNoOfRows = NoOfRows('_TempTable'); IF $(vNoOfRows)> 0 THEN LET $(VarName) = Peek('CombinedData',0,'_TempTable'); ENDIF drop table _TempTable; drop table '$(TableName)'; END SUB;
Remarque: Les appels à la sous-routine BuildValueList doivent utiliser des valeurs spécifiques pour le paramètre QuoteChrNum. Si le champ traité par la sous-routine est de type numérique, il convient de définir le paramètre sur 0. Dans le cas de données textuelles, le paramètre doit être défini sur 39.

Il convient ensuite de définir la liaison à l'aide d'une table INLINE de façon à créer une structure pour les valeurs de champ qui seront chargées quel que soit le nombre de valeurs.

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL $(odso_ORIGIN){"quote": "", "delimiter": ""} ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

L'expression $(od_ORIGIN) {"quote": "", "delimiter": "") sera remplacée par une liste de valeurs de champ ORIGIN provenant de l'application de sélection, qui seront séparées par des sauts de ligne. Si le champ ORIGIN contient les trois valeurs BOS, JFK et ORD, alors la table INLINE étendue ressemblera à la suivante :

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL BOS JFK ORD ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

La valeur de la variable ORIGIN qui suit l'appel de BuildValueList correspondra à :

'BOS','JFK’,'JFK'

Liaison de valeurs facultatives et exclues

Il est quelquefois nécessaire de créer une condition de filtre dans la requête pour le script de l'application modèle On-demand à l'aide de champs qui ne sont pas directement sélectionnables dans l'application de sélection. Par exemple, il se peut que les enregistrements de ventes utilisent un code de région tel que REGION_CODE, tandis que l'application de sélection utilise un champ REGION_NAME plus facilement identifiable pour effectuer les sélections de région. L'application de sélection peut comporter un modèle qui utilise une table distincte pour associer REGION_CODE à REGION_NAME. Les utilisateurs sont alors en mesure de sélectionner des valeurs à partir de REGION_NAME afin de contrôler l'état de sélection.

Lorsque vous sélectionnez des valeurs de REGION_NAME, elles sont définies sur l'état sélectionné. En revanche, les valeurs de REGION_CODE sont uniquement définies sur l'état facultatif ; elles sont donc affichées en blanc plutôt qu'en vert. De plus, si la conception des feuilles de l'application de sélection exclut REGION_CODE de son jeu de volets de filtre, il n'existe aucun moyen d'étendre l'expression de liaison $(od_REGION_CODE) dans le script de l'application On-demand en liste des régions sélectionnées, car les valeurs REGION_CODE ne seront jamais réellement sélectionnées, c.-à-d. indiquées en vert.

Pour gérer cette situation, il convient d'utiliser une syntaxe supplémentaire afin de contrôler de manière plus précise les valeurs d'état de sélection utilisées dans chaque liaison de données. Le préfixe od_ figurant dans la partie du nom de champ de chaque expression de liaison On-demand peut se composer d'une série de lettres pour indiquer si les valeurs à utiliser dans la liaison correspondent à celles issues de l'état sélectionné et de l'état facultatif. Les combinaisons valides, si nous reprenons l'exemple de REGION_CODE, sont les suivantes :

Combinaisons valides à l'aide de REGION_CODE
Modèle Forme étendue
$(ods_REGION_CODE) Valeurs sélectionnées (en vert) de REGION_CODE
$(odo_REGION_CODE) Valeurs facultatives (en blanc) de REGION_CODE
$(odso_REGION_CODE) Valeurs sélectionnées ou facultatives de REGION_CODE
$(od_REGION_CODE) Identique à $(ods_REGION_CODE), à ceci près que ce sont uniquement les valeurs sélectionnées (en vert) de REGION_CODE

Dans le cas de l'application On-demand pour l'exemple de données de ventes, l'expression de liaison de données garantit que soit les valeurs sélectionnées soit les valeurs facultatives de REGION_CODE sont incluses dans la liaison REGION_CODE :

$(odso_REGION_CODE)

Liaison de valeurs numériques

Lorsque les données à lier à l'application On-demand se composent de nombres plutôt que de chaînes, il est préconisé de désactiver le comportement de mise entre guillemets pour les champs numériques. Par exemple, si les enregistrements de ventes incluent une colonne DAY_OF_WEEK numérique et que vous souhaitez que l'utilisateur de l'application de sélection puisse choisir des combinaisons arbitraires de DAY_OF_WEEK, vous devez préciser dans la requête d'agrégation utilisée pour le chargement de l'application de sélection qu'elle doit inclure DAY_OF_WEEK à la fois dans la liste SELECT et la liste GROUP BY. Si des guillemets entourent les valeurs DAY_OF_WEEK lorsqu'elles sont sélectionnées, cela pourrait entraîner une erreur de requête d'exécution si la base de données ne prend pas en charge la conversion automatique du type chaîne en type numérique.

Pour gérer cette situation, vous pouvez ajouter un suffixe syntaxique à la fin de la partie FIELDNAME de l'expression de liaison de façon à forcer la liaison de champ à utiliser les valeurs numériques provenant de l'application de sélection plutôt que les valeurs de chaîne. Le suffixe à utiliser est _n, comme dans la clause WHERE suivante :

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

La clause serait étendue de la façon suivante :

WHERE DAY_OF_WEEK IN ( 1,2 );

Obligation d'utiliser un certain nombre de sélections

Dans certains cas, il peut s'avérer nécessaire d'exiger que la requête d'application On-demand comprenne un nombre ou une plage de valeurs spécifique pour un champ donné. Par exemple, supposons que la requête de l'application On-demand contienne une clause BETWEEN afin d'obtenir toutes les ventes comprises entre une date de début et une date de fin. L'expression de liaison du champ YEARQUARTER peut comporter le suffixe syntaxique [2] qui exigera la sélection exacte de deux valeurs pour YEARQUARTER, comme dans l'exemple ci-dessous :

$(od_YEARQUARTER)[2]

Le point de navigation d'application On-demand défini sur l'application de sélection restera désactivé tant qu'il n'y aura pas exactement deux valeurs de YEARQUARTER sélectionnées. Un message s'affiche pour indiquer qu'exactement deux valeurs de YEARQUARTER doivent être sélectionnées.

Les contraintes de quantité de sélections établissent une liaison préalable entre l'application de sélection et l'application On-demand. Ce cas diffère des expressions de liaison, qui n'utilisent pas de contraintes de quantité. Par exemple, lorsque le script de l'application modèle inclut une expression de liaison sans contrainte de quantité, comme dans :

$(od_MYFIELD)

il n'est nullement obligatoire pour l'application de sélection de contenir un champ intitulé MYFIELD ni que des valeurs soient sélectionnées si ce champ existe. Si l'application de sélection ne comporte pas de champ intitulé MYFIELD ou si l'utilisateur oublie simplement d'y effectuer des sélections, il est tout de même possible d'activer le point de navigation d'application On-demand lorsque d'autres sélections sont effectuées pour remplir la condition de valeur de limite d'enregistrements.

D'un autre côté, si l'expression de liaison est définie comme suit :

$(od_MYFIELD)[1+]

l'application de sélection est alors soumise à deux obligations :

  • L'application de sélection doit contenir un champ intitulé MYFIELD.
  • L'utilisateur doit sélectionner une ou plusieurs valeurs pour MYFIELD.

Il convient d'employer ce type d'expression de liaison avec prudence, car il limite les applications de sélection qu'il est possible d'utiliser avec l'application modèle. Il est déconseillé d'appliquer cette contrainte de quantité aux liaisons d'une application modèle, à moins d'être certain de vouloir imposer cette restriction à toutes les applications de sélection liées à cette application modèle.

Pour exécuter le processus de liaison de données, le service On-demand app utilise une approche de substitution de chaîne qui ne tient pas compte des commentaires figurant dans le script. Autrement dit, il convient de ne pas utiliser d'expressions de liaison dans les commentaires, à moins de souhaiter inclure dans ces derniers la liste des valeurs liées faisant suite à la génération de l'application.

Il est possible de définir d'autres contraintes de quantité. Le tableau suivant résume les différentes combinaisons de contraintes de quantité de sélections possibles.

Différentes combinaisons de contraintes de quantité de sélections possibles
Modèle de contrainte Sélections requises
$(od_YEARQUARTER)[2] L'utilisateur doit sélectionner exactement 2 valeurs de YEARQUARTER.
$(od_YEARQUARTER)[2-4] L'utilisateur doit sélectionner entre 2 et 4 valeurs de YEARQUARTER.
$(od_YEARQUARTER)[2+] L'utilisateur doit sélectionner au moins 2 valeurs de YEARQUARTER.
$(od_YEARQUARTER)[2-] L'utilisateur doit sélectionner au plus 2 valeurs de YEARQUARTER.
Remarque: La vérification du respect de toutes les contraintes de quantité dans l'application modèle est effectuée au cours de la génération de l'application. Si une contrainte de quantité n'est pas respectée, la demande de génération de l'application est refusée et un message d'erreur s'affiche.

Modification des guillemets et délimiteurs de valeurs

Lorsqu'une liste de valeurs d'un champ sélectionné dans une application de sélection On-demand est inséré dans le script d'une application modèle, les valeurs sont entourées par des guillemets simples et séparées par des virgules. Ce sont les caractères par défaut utilisés comme guillemets et délimiteurs. Il est possible de modifier ces valeurs dans la syntaxe ajoutée à l'instruction de liaison relative à chaque champ. Par exemple :

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

Ces nouvelles valeurs sont ensuite appliquées lors de la formulation de la liste des valeurs de liaison récupérée à partir de l'application de sélection. Si, par exemple, les valeurs sélectionnées correspondent aux trois premiers mois de l'année, la liste serait élaborée de la façon suivante :

|January|;|February|;|March|

Les valeurs par défaut des guillemets et délimiteurs sont prises en charge par la plupart des bases de données SQL standard. Toutefois, elles peuvent être incompatibles avec certaines bases de données SQL et ne fonctionnent pas avec de nombreuses sources de données dynamiques telles que NoSQL et REST. Avec ces sources, vous devez ajouter cette expression de liaison afin de modifier les caractères utilisés comme guillemets et délimiteurs.