Espressioni di associazione in app modello On-demand

Le associazioni dati in un'app modello specificano quali dati di un'app di selezione corrispondente vengono utilizzati per formulare le query generate durante il caricamento dei dati in un'app On-demand.

La forma base delle espressioni di associazione, $(od_FIELDNAME), può essere modificata per affinare le selezioni e per garantire che l'app modello carichi correttamente i dati.

Avviso: Le app modello create originariamente utilizzando l'estensione di Qlik Sense per On-demand App Generation devono essere modificate per utilizzare l'approccio illustrato sotto per associare un gran numero di selezioni da un campo.

Associazione di un gran numero di selezioni da un campo

Qlik associative engine limita il numero di valori che possono essere concatenati in un'unica istruzione LET. Per evitare la limitazione, può essere utilizzata un'istruzione INLINE LOAD per creare in modo efficiente un elenco di valori separati da virgole.

Innanzitutto è necessario creare una subroutine dello script per elaborare una tabella 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;
Nota: Le chiamate alla subroutine BuildValueList devono utilizzare valori specifici per il parametro QuoteChrNum. Quando il campo elaborato dalla subroutine è numerico, il parametro deve essere impostato su 0. Per dati di tipo carattere, il parametro deve essere impostato su 39.

L'associazione deve essere quindi scritta utilizzando una tabella INLINE per creare una struttura per i valori del campo che verrà caricata indipendentemente dal numero di valori.

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

L'espressione $(od_ORIGIN) {"quote": "", "delimiter": "") verrà sostituita da un elenco dei valori del campo ORIGIN dall'app di selezione, separati da interruzioni di riga. Se il campo ORIGIN contiene i tre valori BOS, JFK, ORD, la tabella espansa INLINE avrà questo aspetto:

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

Il valore della variabile ORIGIN in seguito alla chiamata a BuildValueList sarà:

'BOS','JFK’,'JFK'

Associazione di valori opzionali ed esclusi

A volte è necessario creare una condizione di filtro nella query per lo script dell'app modello On-demand utilizzando campi non direttamente selezionabili nell'app di selezione. Ad esempio, i record delle vendite potrebbero utilizzare un codice regione come REGION_CODE e l'app di selezione utilizzare invece un campo REGION_NAME, più riconoscibile, per selezionare le regioni. L'app di selezione può avere un modello che utilizza una tabella separata per associare REGION_CODE a REGION_NAME in modo che gli utenti possano selezionare valori da REGION_NAME per controllare lo stato di selezione.

Mentre la selezione di valori di REGION_NAME pone tali valori nello stato selezionato, i valori di REGION_CODE sono solo nello stato opzionale, ossia bianco invece di verde. Inoltre, se la progettazione dei fogli dell'app di selezione esclude REGION_CODE dal set delle caselle di filtro, l'espressione di associazione $(od_REGION_CODE) nello script dell'app On-demand non potrà espandersi nell'elenco delle regioni selezionate, poiché i valori di REGION_CODE non verranno mai effettivamente selezionati (verdi).

Per gestire questa situazione, è disponibile sintassi aggiuntiva per controllare in modo più preciso quali valori dello stato di selezione vengono utilizzati in ciascuna associazione dati. Il prefisso od_ nella parte del nome di campo di ogni espressione di associazione On-demand può includere una combinazione di lettere per indicare se i valori da utilizzare nell'associazione sono ricavati dallo stato selezionato o dallo stato opzionale. Le combinazioni valide, utilizzando l'esempio relativo a REGION_CODE, sono:

Combinazioni valide, utilizzando REGION_CODE
Schema Espansione
$(ods_REGION_CODE) Valori selezionati (verdi) di REGION_CODE
$(odo_REGION_CODE) Valori opzionali (bianchi) di REGION_CODE
$(odso_REGION_CODE) Valori selezionati o opzionali di REGION_CODE
$(od_REGION_CODE) Come $(ods_REGION_CODE), solo valori selezionati (verdi) di REGION_CODE

Nel caso dell'app On-demand per l'esempio dei dati di vendita, l'espressione di associazione dati seguente garantisce che nell'associazione tramite REGION_CODE siano inclusi i valori selezionati o i valori opzionali di REGION_CODE:

$(odso_REGION_CODE)

Associazione di valori numerici

Quando i dati da associare all'app On-demand consistono in numeri invece di stringhe, è utile disabilitare l'aggiunta di virgolette per racchiudere i campi numerici. Ad esempio, se i record di vendite includono una colonna DAY_OF_WEEK numerica e si desidera consentire all'utente dell'app di selezione di scegliere combinazioni arbitrarie di DAY_OF_WEEK, si integrerà la query di aggregazione utilizzata per il caricamento dell'app di selezione includendo DAY_OF_WEEK sia nell'elenco SELECT che nell'elenco GROUP BY. Se i valori DAY_OF_WEEK sono racchiusi tra virgolette quando vengono selezionati, può verificarsi un errore di esecuzione della query se il database non supporta la conversione automatica del tipo da stringa a numerico.

Per gestire questa situazione, è possibile aggiungere un suffisso sintattico alla fine della parte FIELDNAME dell'espressione di associazione per fare in modo che l'associazione dei campi interpreti i valori forniti dall'app di selezione come numeri invece che stringhe. Il suffisso è _n, come nella seguente clausola WHERE:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

L'espansione è:

WHERE DAY_OF_WEEK IN ( 1,2 );

Richiesta di un numero specifico di selezioni

In alcune situazioni può essere necessario imporre che la query dell'app On-demand contenga uno specifico numero o intervallo di valori per un campo specifico. Ad esempio, se la query dell'app On-demand contiene una clausola BETWEEN per ottenere tutte le vendite tra una data di inizio e una data di fine, l'espressione di associazione per il campo YEARQUARTER può avere il suffisso sintattico [2] che richiederà la selezione di esattamente due valori per YEARQUARTER, come in:

$(od_YEARQUARTER)[2]

Il punto di navigazione app On-demand nell'app di selezione resterà disabilitato finché non vi saranno esattamente due valori di YEARQUARTER selezionati. Verrà visualizzato un messaggio per indicare che devono essere selezionati esattamente due valori di YEARQUARTER.

I vincoli di quantità della selezione creano un prerequisito di collegamento tra l'app di selezione e l'app On-demand. Ciò è diverso dalle espressioni di associazione che non utilizzano vincoli di quantità. Ad esempio, quando lo script dell'app modello contiene un'espressione di associazione senza vincoli di quantità, come in:

$(od_MYFIELD)

non è richiesto che l'app di selezione contenga un campo denominato MYFIELD, né che vi siano valori selezionati del campo, se esistente. Se l'app di selezione non contiene un campo denominato MYFIELD o semplicemente l'utente non effettua selezioni da tale campo, il punto di navigazione app On-demand può comunque essere abilitato quando si effettuano altre selezioni per soddisfare la condizione del valore limite di record.

Se, d'altra parte, l'espressione di associazione è:

$(od_MYFIELD)[1+]

l'app di selezione deve ora soddisfare due requisiti:

  • L'app di selezione deve contenere un campo denominato MYFIELD.
  • L'utente deve selezionare almeno un valore per MYFIELD.

Questo tipo di espressione di associazione deve essere utilizzato con cautela poiché limita quali app di selezione possono essere utilizzate con l'app modello. Questo vincolo di quantità non deve essere utilizzato sulle associazioni di un'app modello a meno di non essere certi di voler imporre tale requisito di quantità per le selezioni a tutte le app di selezione che si collegano all'app modello.

Per eseguire il processo di associazione dati, il servizio app On-demand adotta un approccio basato sulla sostituzione di stringhe che non distingue i commenti nello script. Occorre pertanto evitare di utilizzare espressioni di associazione nei commenti, a meno che non si desideri che i commenti contengano l'elenco dei valori associati in seguito alla generazione dell'app.

Sono possibili altri vincoli di quantità. La tabella seguente riepiloga le diverse combinazioni di vincoli di quantità di selezione.

Varie combinazioni di vincoli di quantità di selezione
Modello vincolo Requisito selezione
$(od_YEARQUARTER)[2] Devono essere selezionati esattamente 2 valori di YEARQUARTER.
$(od_YEARQUARTER)[2-4] Devono essere selezionati tra 2 e 4 valori di YEARQUARTER.
$(od_YEARQUARTER)[2+] Devono essere selezionati almeno 2 valori di YEARQUARTER.
$(od_YEARQUARTER)[2-] Possono essere selezionati al massimo 2 valori di YEARQUARTER.
Nota: Il controllo per determinare se tutti i vincoli di quantità nell'app modello sono stati rispettati viene eseguito durante il processo di generazione dell'app. Se un vincolo di quantità non è rispettato, la richiesta di generazione dell'app verrà respinta e sarà visualizzato un messaggio di errore.

Modifica dei caratteri di citazione e delimitazione dei valori

Quando un elenco di valori letti da un campo selezionato in un'app di selezione On-demand è inserito nello script di un'app modello, i valori sono racchiusi tra virgolette singole e separati da virgole. Questi sono i caratteri predefiniti per la citazione e la delimitazione. Questi valori possono essere modificati in una sintassi aggiunta all'istruzione di associazione per ciascun campo. Ad esempio:

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

Questi nuovi valori verranno quindi utilizzati per creare l'elenco dei valori di associazione tratti dall'app di selezione. Ad esempio, se i valori selezionati sono i primi tre mesi dell'anno, l'elenco verrebbe creato come:

|January|;|February|;|March|

I valori predefiniti per i caratteri di citazione e delimitazione funzionano per la maggior parte dei database SQL standard. Potrebbero tuttavia non funzionare per alcuni database SQL e non funzionano per molte sorgenti di dati dinamiche, come NoSQL e REST. Per queste sorgenti è necessario aggiungere questa espressione di associazione per modificare i caratteri di citazione e delimitazione.

Bind data containing commas and/or quotation marks

If the data in any of the fields used for bind variables contains commas, you need to change the default behavior of the INLINE load statement to not interpret commas as field separators. Cambiare il delimitatore, utilizzando la specifica del formato, in un carattere mai presente nei valori del campo associato, come mostrato con il carattere '|' nell'esempio seguente:

Also, if any of the bound fields contain single quotation marks, you need to add a Replace command to the LOAD statement that will add an extra single quotation mark after each single quotation mark in the value. This prevents the quote characters from being interpreted as the end of the string that is used in the WHERE clause. Note that database products may use different techniques for escaping single quotation marks.

Ad esempio:

OdagBinding: LOAD Replace(VAL,'''','''''') AS VAL INLINE [ VAL $(odso_ORIGIN){"quote": "", "delimiter": ""} ] (ansi, txt, delimiter is '|', embedded labels);