Bindningsuttryck i on-demand-mallappar

Databindningar i en mallapp anger vilka data från en motsvarande urvalsapp som ska användas för att formulera frågor som används vid laddning av data i en on-demand-app.

Den grundläggande formen av bindningsuttryck – $(od_FIELDNAME) – kan modifieras för förfining av urval samt för att säkerställa att mallappen laddar data korrekt.

Varning: Mallappar som ursprungligen skapats med komplementet Qlik Sense för On-demand App Generation bör ändras så att de använder metoden som illustreras nedan för bindning av ett stort antal urval från ett fält.

Bindning av ett stort antal urval från ett fält

Qlik associative engine begränsar antalet värden som kan konkateneras i en enskild LET-sats. För att undvika begränsningen är det möjligt att använda en INLINE LOAD-sats för att skapa en kommaseparerad lista med värden på ett enkelt sätt.

Du måste först skapa en underordnad skriptrutin för att bearbeta en INLINE-tabell.

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;
Observera: Anrop till den underordnade rutinen BuildValueList måste använda specifika värden för parametern QuoteChrNum. När fältet som bearbetas av den underordnade rutinen är numeriskt måste parametern vara inställd på 0. För teckendata måste parametern vara inställd på 39.

Bindningen ska sedan skrivas med hjälp av en INLINE-tabell för att skapa en struktur för de fältvärden som ska laddas, oavsett antalet värden.

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

Uttrycket $(od_ORIGIN) {"quote": "", "delimiter": "") ersätts av en lista med ORIGIN-fältvärden från urvalsappen, separerade av radbrytningar. Om fältet ORIGIN innehåller de tre värdena BOS, JFK, ORD, ser den expanderade INLINE-tabellen ut enligt följande:

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

Värdet för variabeln ORIGIN efter anropet till BuildValueList blir:

'BOS','JFK’,'JFK'

Bindning av valfria och uteslutna värden

Ibland är det nödvändigt att skapa ett filtervillkor i frågan för on-demand-mallappens skript med hjälp av fält som inte är direkt valbara i urvalsappen. Exempelvis kan försäljningsregister använda en regionkod som REGION_CODE medan urvalsappen använder ett REGION_NAME-fält som är lättare att känna igen för att välja region. Urvalsappen kan ha en modell med en separat tabell för att associera REGION_CODE med REGION_NAME så att användarna kan välja värden från REGION_NAME och styra urvalsläget.

När du väljer värden i REGION_NAME kommer dessa värden att placeras i urvalsläge medan värdena i REGION_CODE endast finns i valfritt läge, dvs. vit färg istället för grön. Om designen på urvalsappens blad dessutom utesluter REGION_CODE från sin uppsättning av filterpaneler finns det inget sätt som bindningsuttryckets $(od_REGION_CODE) i det utökade skriptet för on-demand-appen kan infogas i listan över valda regioner eftersom REGION_CODE-värdena egentligen aldrig kommer att väljas, dvs. bli grönfärgade.

För att hantera denna situation finns det ytterligare en syntax för att mer exakt bestämma vilka värden i urvalsläget som ska användas vid varje databindning. Prefixet od_ i fältnamndelen i varje On-demand-bindningsuttryck kan innehålla en kombination av bokstäver som betecknar om de värden som ska användas i bindningen har hämtats från urvalsläget eller det valfria läget. De giltiga kombinationerna som hämtats i exemplet med REGION_CODE är:

Giltiga kombinationer med REGION_CODE
Mönster Utökning
$(ods_REGION_CODE) Valda (gröna) värden för REGION_CODE
$(odo_REGION_CODE) Valfria (vita) värden för REGION_CODE
$(odso_REGION_CODE) Valda eller valfria värden för REGION_CODE
$(od_REGION_CODE) Samma som $(ods_REGION_CODE), bara valda (gröna) värden för REGION_CODE

I fallet med on-demand-appen i exemplet med försäljningsdata visar följande databindningsuttryck om valda eller valfria värden för REGION_CODE ingår i bindningen med REGION_CODE:

$(odso_REGION_CODE)

Bindande numeriska värden

När data som bundits till on-demand-appen består av siffror i stället för strängar kan det vara praktiskt att inaktivera citattecknen i de numeriska fälten. Om till exempel försäljningsregistret har en numerisk DAY_OF_WEEK-kolumn och du vill att användaren av urvalsappen ska välja godtyckliga kombinationer av DAY_OF_WEEK kan du utöka aggregeringsfrågan som användes för att ladda urvalsappen genom att inkludera DAY_OF_WEEK i både SELECT-listan och GROUP BY-listan. Om det finns citattecken runt DAY_OF_WEEK-värdena när de är valda kan det uppstå fel vid körning av frågan om databasen inte stöder automatisk typkonvertering från sträng till numeriskt.

För att hantera denna situation kan ett suffix läggas till i slutet av syntaxen för delen av FIELDNAME i bindningsuttrycket så att fältet måste använda numeriska värden från urvalsappen snarare än strängvärden. Suffixet som läggs till är _n som i följande WHERE-sats:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

Detta utökas så här:

WHERE DAY_OF_WEEK IN ( 1,2 );

Kräver ett visst antal urval

I vissa situationer kan det vara nödvändigt att kräva att on-demand-appens fråga innehåller ett visst antal eller intervall av värden för ett specifikt fält. Om till exempel en on-demand-apps urval innehåller en BETWEEN-klausul för att hämta all försäljning mellan start- och slutdatum kan bindningsuttrycket för fältet YEARQUARTER ha en suffixsyntax [2] som kräver att exakt två värden väljs för YEARQUARTER, som här:

$(od_YEARQUARTER)[2]

On-demand-appnavigeringspunkten i urvalsappen fortsätter vara inaktiverad så länge det inte finns exakt två valda värden för YEARQUARTER. Ett meddelande visas för att indikera att exakt två värden för YEARQUARTER måste väljas.

Urvalsantalets begränsningar skapar en förutsättning för länkning mellan urvalsappen och on-demand-appen. Detta skiljer sig från bindningsuttryck som inte använder kvantitetsbegränsningar. När mallappens skript till exempel innehåller ett bindningsuttryck utan antalsbegränsning, som i

$(od_MYFIELD)

finns det inget krav på att urvalsappen måste innehålla ett fält med namnet MYFIELD eller att det finns några valda värden i fältet om det finns. Om urvalsappen inte innehåller ett fält som heter MYFIELD, eller om användaren kanske glömmer att göra val från fältet, kan navigeringspunkten i on-demand-appen ändå aktiveras om andra val uppfyller postbegränsningsvillkoret.

Men om bindningsuttrycket är följande:

$(od_MYFIELD)[1+]

finns det nu två krav på urvalsappen.

  • Urvalsappen måste innehålla ett fält med namnet MYFIELD.
  • Användaren måste välja minst ett värde för MYFIELD.

Denna typ av bindningsuttryck måste användas försiktigt eftersom den begränsar vilka urvalsappar som kan användas med mallappen. Du bör inte använda den här antalsbegränsningen på bindningar i en mallapp om du inte är säker på att du vill ställa det kravet på urvalsantal på samtliga urvalsappar som länkar till den mallappen.

För att utföra databindningsprocessen använder On-demand-app-tjänsten ett sätt att ersätta strängar som inte reagerar på kommentarer i skriptet. Det innebär att du inte bör använda bindningsuttryck i kommentarer såvida du inte vill att de kommentarerna ska innehålla en lista över bundna värden efter appgenerering.

Andra antalsbegränsningar är också möjliga. I följande tabell sammanfattas de olika kombinationerna av urvalsantalsbegränsningar.

Olika kombinationer av urvalsantalsbegränsningar.
Begränsningsmönster Urvalskrav
$(od_YEARQUARTER)[2] Exakt 2 värden för YEARQUARTER måste väljas.
$(od_YEARQUARTER)[2-4] Mellan 2 och 4 värden för YEARQUARTER måste väljas.
$(od_YEARQUARTER)[2+] Minst 2 värden för YEARQUARTER måste väljas.
$(od_YEARQUARTER)[2-] Högst 2 värden för YEARQUARTER kan väljas.
Observera: Kontrollen för att avgöra om samtliga antalsbegränsningar i mallappen har uppfyllts utförs under app-genereringen. Om en antalsbegränsning bryts avvisas begäran om att generera appen och ett felmeddelande visas.

Ändra citat- och avgränsningstecken för värde

När en lista med värden från ett fält som har valts ut i en On-demand-urvalsapp infogas i skriptet för en mallapp, omges värdena av enkla citattecken och avgränsas av komman. Dessa är standardtecken för citat och avgränsare. Dessa värden kan ändras i syntax som läggs till i bindningssatsen för varje fält. Exempel:

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

Dessa nya värden används sedan för att formulera listan över bindningsvärden som tas från urvalsappen. Om till exempel de valda värdena är årets tre första månader kan listan konstrueras så här:

|Januari|;|Februari|;|Mars|

Standardvärdena för citat- och avgränsningstecken fungerar för de flesta SQL-databaserna av standardtyp. De kanske inte fungerar för vissa SQL-databaser och fungerar inte för många dynamiska datakällor som NoSQL och REST. För dessa källor behöver du lägga till detta bindningsuttryck för att ändra citat- och avgränsningstecken.

Bindningsdata innehåller citattecken

Om data i något av fälten som används för bindningsvariabler innehåller enkla eller dubbla citattecken måste du ändra standardbeteendet för INLINE LOAD-satsen så att citattecken inte tolkas som värdeavgränsare. Använd formatspecifikation och ändra avgränsaren till ett tecken som aldrig förekommer som värde i fältet som binds, på det sätt som visas med tecknet '|' i följande exempel:

OdagBinding:

LOAD * INLINE [

VAL

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

]

(ansi, txt, delimiter is '|', embedded labels);