Gegevensbindende uitdrukkingen in On-demand-sjabloon-apps

Gegevensbindingen in een sjabloon-app specificeren welke gegevens van een overeenkomstige selectie-app worden gebruikt voor het formuleren van de query’s die worden ingediend wanneer gegevens in een On-demand-app worden geladen.

De basisvorm van gegevensbindende uitdrukkingen--$(od_FIELDNAME)--kan worden aangepast om de selecties te verfijnen en om te waarborgen dat de sjabloon-app gegevens correct laadt.

Waarschuwing: Sjabloon-apps die oorspronkelijk zijn gemaakt met de Qlik Sense-uitbreiding voor On-demand App Generation, moeten worden gewijzigd om een groot aantal selecties uit een veld te binden op de wijze zoals hieronder geïllustreerd, te kunnen gebruiken.

Het binden van een groot aantal selecties uit een veld

Qlik associative engine limiteert het aantal waarden dat kan worden aaneengeschakeld tot één LET-instructie. U kunt de limiet vermijden door een INLINE LOAD-instructie te gebruiken waarmee u op efficiënte wijze een door komma's gescheiden lijst waarden kunt construeren.

U moet eerst een script-subroutine bouwen om een INLINE tabel te verwerken.

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;
Opmerking: De oproepen naar de subroutine BuildValueList moeten specifieke waarden gebruiken voor de parameter QuoteChrNum. Wanneer het veld dat door de subroutine wordt verwerkt numeriek is, moet de parameter worden ingesteld op 0. Voor tekengegevens moet de parameter worden ingesteld op 39.

De binding moet vervolgens met behulp van een INLINE-tabel worden geschreven. Dit maakt het mogelijk een structuur voor de veldwaarden te maken die ongeacht het aantal waarden laadt.

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

De uitdrukking $(od_ORIGIN) {"quote": "", "delimiter": "") zal worden vervangen door een lijst met ORIGIN-veldwaarden uit de selectie-app, gescheiden door regeleinden. Als het ORIGIN -veld de drie waarden BOS, JFK enORD bevat, ziet de uitgevouwen INLINE-tabel er als volgt uit:

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

De waarde van de ORIGIN-variabele na de oproep naar BuildValueList is:

'BOS','JFK’,'JFK'

Binden optionele en uitgesloten waarden

Soms is het noodzakelijk om een filtervoorwaarde in de query voor het script van de On-demand-sjabloon-app te maken met behulp van velden die niet direct te selecteren zijn in de selectie-app. Verkooprecords kunnen bijvoorbeeld een regiocode zoals REGION_CODE gebruiken, terwijl de selectie-app een meer herkenbaar REGION_NAME-veld gebruikt voor het maken van regioselecties. De selectie-app kan een model hebben dat een aparte tabel gebruikt voor het koppelen van REGION_CODE met REGION_NAME. Zo kunnen gebruikers waarden uit REGION_NAME kiezen om de selectiestatus te controleren.

Als u waarden van REGION_NAME selecteert, worden waarden in de geselecteerde status geplaatst. De waarden van REGION_CODE zijn alleen in de optionele status, dat wil zeggen, wit in plaats van groen. Als het ontwerp van de werkbladen van de selectie-app REGION_CODE uitsluit van de reeks van filtervakken, is er geen manier om de bindingsuitdrukking $(od_REGION_CODE) in het script van de On-demand-app uit te breiden naar de lijst met geselecteerde regio’s. Dit gebeurt omdat de REGION_CODE-waarden nooit daadwerkelijk worden geselecteerd (groen gemaakt).

Om met deze situatie om te gaan, is er een extra syntaxis om nauwkeuriger te bepalen welke selectiestatuswaarden worden gebruikt in elke gegevensbinding. De prefix od_ in het veldnaamdeel in elke On-demand-bindingsuitdrukking kan een combinatie van letters bevatten, om aan te geven of de te gebruiken waarden voor het binden de waarden zijn die uit de geselecteerde status en de optionele status zijn genomen. De geldige combinaties, die het REGION_CODE-voorbeeld gebruiken, zijn:

Geldige combinaties bij gebruik van de REGION_CODE
Patroon Uitbreiding
$(ods_REGION_CODE) Geselecteerde (groene) waarden van REGION_CODE
$(odo_REGION_CODE) Optionele (witte) waarden van REGION_CODE
$(odso_REGION_CODE) Geselecteerde of optionele waarden van REGION_CODE
$(od_REGION_CODE) Hetzelfde als $(ods_REGION_CODE), alleen geselecteerde (groene) waarden van REGION_CODE

In het voorbeeld van de On-demand-app voor verkoopgegevens zorgt de volgende gegevensbindende uitdrukking ervoor dat de geselecteerde of optionele waarden van REGION_CODE worden opgenomen in de REGION_CODE-binding:

$(odso_REGION_CODE)

Het binden van numerieke waarden

Wanneer de aan de On-demand-app te binden gegevens bestaan uit cijfers in plaats van tekenreeksen, is het handig om het plaatsen van aanhalingstekens uit te schakelen voor de numerieke velden. Als de verkooprecords bijvoorbeeld een numerieke DAY_OF_WEEK-kolom bevatten en u wilt dat de gebruiker van de selectie-app willekeurige combinaties van DAY_OF_WEEK kiest, kunt u de aggregatiequery die voor het laden van de selectie-app wordt gebruikt, uitbreiden door DAY_OF_WEEK in zowel de lijst SELECTals de lijst GROUP BY op te nemen. Als er aanhalingsteken om de DAY_OF_WEEK-waarden staan als deze worden geselecteerd, kan een runtimequery-fout optreden als de database automatische typeconversie van tekenreeks naar numeriek niet ondersteunt.

Voor deze situatie bestaat een syntaxis-suffix dat aan het einde van het FIELDNAME-deel van de bindingsuitdrukking kan worden toegevoegd om te forceren dat voor de veldbinding numerieke waarden van de selectie-app worden gebruikt in plaats van tekenreekswaarden. Het suffix is _n zoals in de volgende WHERE-clausule:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

Dit wordt uitgebreid tot:

WHERE DAY_OF_WEEK IN ( 1,2 );

Vereisen van een bepaald aantal selecties

In sommige situaties kan het nodig zijn dat de On-demand-app-query een specifiek aantal of bereik van waarden voor een specifiek veld bevat. Als de query van de On-demand-app bijvoorbeeld een BETWEEN-clausule bevat om alle verkopen tussen een begin- en einddatum op te halen, kan de bindingsuitdrukking voor het YEARQUARTER-veld een suffix-syntaxis van [2] hebben die vereist dat precies twee waarden worden geselecteerd voor YEARQUARTER, zoals in:

$(od_YEARQUARTER)[2]

Het On-demand-app-navigatiepunt in de selectie-app blijft uitgeschakeld zolang er niet precies twee waarden van YEARQUARTER zijn geselecteerd. Een bericht wordt weergegeven om aan te geven dat precies twee waarden van YEARQUARTER moeten worden geselecteerd.

Met hoeveelheidsbeperkingen voor selectie maakt u een voorwaardekoppeling tussen de selectie-app en de On-demand-app. Dit is anders dan bindingsuitdrukkingen die geen kwantiteitsbeperkingen gebruiken. Wanneer het script van de sjabloon-app bijvoorbeeld een bindingsuitdrukking bevat zonder een hoeveelheidsbeperking, zoals in:

$(od_MYFIELD)

is er geen vereiste dat de selectie-app een veld bevat met de naam MYFIELD, noch dat er eventueel geselecteerde waarden van dat veld zijn als dat veld bestaat. Als de selectie-app geen veld bevat met de naam MYFIELD of als de gebruiker gewoon verzuimt om hier selecties uit te maken, kan het On-demand-app-navigatiepunt nog steeds worden ingeschakeld wanneer andere selecties zijn gemaakt om te voldoen aan de voorwaarden van de grenswaarde van het record.

Als aan de andere kant de bindingsuitdrukking luidt:

$(od_MYFIELD)[1+]

zijn er nu twee vereisten geplaatst op de selectie-app:

  • De selectie-app moet een veld bevatten met de naam MYFIELD.
  • De gebruiker moet minimaal één waarde voor MYFIELD selecteren.

Dit type bindingsuitdrukking moet zorgvuldig worden gebruikt omdat het beperkt welke selectie-apps kunnen worden gebruikt met de sjabloon-app. Gebruik deze hoeveelheidsbeperking alleen voor bindingen van een sjabloon-app als u zeker weet dat u de selectiehoeveelheidsbeperking wilt opleggen aan alle selectie-apps die aan die sjabloon-app zijn gekoppeld.

De On-demand-app-service maakt gebruik van een benadering van tekenreeksvervanging die ongevoelig is voor opmerkingen in het script. Dat betekent dat u alleen bindingsuitdrukkingen in opmerkingen moet gebruiken als u wilt dat deze opmerkingen na het genereren van de app de lijst met gebonden waarden bevatten.

Andere hoeveelheidsbeperkingen zijn mogelijk. De volgende tabel vat de verschillende combinaties van geselecteerde hoeveelheidsbeperkingen samen.

Verschillende combinaties van geselecteerde hoeveelheidsbeperkingen
Beperkingspatroon Selectievereiste
$(od_YEARQUARTER)[2] Precies 2 waarden van YEARQUARTER moeten worden geselecteerd.
$(od_YEARQUARTER)[2-4] Tussen 2 en 4 waarden van YEARQUARTER moeten worden geselecteerd.
$(od_YEARQUARTER)[2+] Minimaal 2 waarden van YEARQUARTER moeten worden geselecteerd.
$(od_YEARQUARTER)[2-] Maximaal 2 waarden van YEARQUARTER moeten worden geselecteerd.
Opmerking: De controle of aan alle hoeveelheidsbeperkingen in de sjabloon-app is voldaan wordt uitgevoerd tijdens het genereren van de app. Als een hoeveelheidsbeperking wordt geschonden, wordt het verzoek om de app te genereren afgewezen en wordt er een foutbericht weergegeven.

De aanhalingstekens rond waarden en scheidingstekens wijzigen

Als een lijst met waarden van een veld dat is geselecteerd in een On-demand-selectie-app is ingevoegd in het script van een sjabloon-app, staan de waarden tussen enkele aanhalingstekens en worden ze gescheiden door komma's. Dit zijn de standaardtekens voor aanhalings- en scheidingstekens. Deze waarden kunnen worden gewijzigd in de syntaxis die bij de bindingsinstructie voor elk veld is gevoegd. Bijvoorbeeld:

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

Deze nieuwe waarden worden dan gebruikt wanneer de lijst met bindingswaarden uit de selectie-app worden geformuleerd. Als de geselecteerde waarden bijvoorbeeld de eerste drie maanden van het jaar omvatten, zou de lijst als volgt zijn geconstrueerd:

|January|;|February|;|March|

De standaardwaarden voor de aanhalings- en scheidingstekens functioneren voor de meeste standaard SQL-databases. Het kan echter zijn dat ze voor sommige SQL-databases niet functioneren en ze werken zeker niet voor veel dynamische gegevensbronnen zoals NoSQL en REST. Voor deze bronnen moet u om de aanhalings- en scheidingstekens te wijzigen deze gegevensbindende uitdrukking toevoegen.

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. Wijzig het scheidingsteken met behulp van de format spec in een teken dat nooit voorkomt in de waarden van het veld dat wordt begrensd, zoals in het volgende voorbeeld met het teken | wordt getoond:

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.

Bijvoorbeeld:

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