Een On-demand-sjabloon-app maken

Een On-demand-sjabloon-app is een normale Qlik Sense-app met één belangrijk verschil: het load-script ervan bevat gegevensbindende uitdrukkingen waarmee de query’s worden geformuleerd die op de gegevensbronnen worden uitgevoerd. Deze gegevensbindende uitdrukkingen worden tijdens het genereren van On-demand-apps gebruikt om waarden uit de selectiestate van de selectie-app te lezen en deze waarden te verbinden met het sjabloon-app-script zodat de gegenereerde app wordt geladen met een door de gebruiker bepaalde subset van de gegevens.

De sjabloon-app maakt meestal verbinding met dezelfde gegevensbron als de selectie-app. Het load-script van een selectie-app laadt meestal geaggregeerde gegevens om het volume van de gegevens te beperken, maar biedt nog steeds interactieve visualisaties van belangrijke dimensies en metingen. Het load-script van een sjabloon-app gebruikt query’s die een gecontroleerde subset van gedetailleerdere gegevens laden.

Opmerking: Een On-demand-sjabloon-app laadt niet rechtstreeks gegevens. Pogingen gegevens te laden vanuit de sjabloon-app leiden tot een fout. De sjabloon-app-verbinding moet geldig zijn, maar u moet een On-demand-app genereren om te testen of de verbinding correct werkt. Wanneer een On-demand-app wordt gegenereerd, wordt het load-script gewijzigd door de On-demand-app-service zodat de selectiestate van de On-demand-selectie-app wordt geladen. Als de On-demand-app zonder fout wordt gegenereerd, weet u dat de verbinding in de sjabloon-app correct werkt.
Opmerking: Houd rekening met de grootte van uw apps bij het ontwikkelen van on-demand template apps in Kubernetes. Afhankelijk van uw implementatie kunnen er opslaglimieten zijn of kan het gebruik van veel opslagruimte ervoor zorgen dat uw cloudimplementatie wordt geschaald. Neem contact op met uw systeembeheerder voor meer informatie.

Structuur van een sjabloon-app

Een sjabloon-app wordt aan een selectie-app gekoppeld met behulp van een On-demand-app-navigatiekoppeling. De app-navigatiekoppeling bevat eigenschappen die het aantal opgevraagde records bepalen wanneer de On-demand-app wordt geladen met gegevens. Het load-script van de sjabloon-app bevat gegevensbindende uitdrukkingen. Deze specificeren welke veldgegevens van de selectie-app worden gebruikt voor het formuleren van de query’s die worden ingediend wanneer gegevens in de On-demand-app worden geladen.

Opmerking: Er is een voorbeeld van een On-demand-selectie-app opgenomen in de Qlik Sense Enterprise on Windows-installatie op ProgramData\Qlik\Examples\OnDemandApp\sample. Deze functionaliteit is niet beschikbaar in Kubernetes.

De gegevensbindende uitdrukkingen hebben de vorm:

$(od_FIELDNAME)

Het prefix od_ wordt gebruikt om de selectiestate van de selectie-app met het load-script van de On-demand-app te verbinden. Deze wordt gemaakt door de sjabloon-app te kopiëren. Het deel van de gegevensbindende uitdrukking dat volgt op het prefix od_ moet een naam zijn die overeenkomt met een veld in de selectie-app. Wanneer de On-demand-app wordt gegenereerd, wordt de huidige selectiestate van de selectie-app gebruikt om de gewenste waarden te verkrijgen om elk veld te binden. Elk exemplaar van een $(od_FIELDNAME)-uitdrukking in het load-script van de nieuw aangemaakte On-demand-app wordt vervangen door de lijst met waarden die is geselecteerd voor het corresponderende veld in de selectiestate van de selectie-app.

Zie Gegevensbindende uitdrukkingen in On-demand-sjabloon-apps voor meer informatie over het binden van waarden met INLINE load-opdrachten.

Voor een geldige SQL-syntaxis moet in de SELECT-instructie voor het filteren van meerdere waarden van de sjabloon-app een IN-clausule worden gebruikt. De aanbevolen methode is een subroutine te schrijven voor het maken van de juiste WHERE-clausule:

SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB;

Voorafgaand aan het oproepen van de ExtendWhere-subroutine, moet u de WHERE_PART-variabele instellen.

SET WHERE_PART = '';

Als u wilt dat de SQL-instructie een onveranderlijke WHERE-clausule heeft in aanvulling op de clausules die door de selectie-app worden ingevoegd, voegt u 'WHERE <condition>' in de SET-instructie in. Gebruik anders de eenvoudige SET-instructie.

Het onderstaande is een voorbeeld van hoe de ExtendedWhere-subroutine wordt gebruikt.

FOR EACH fldname IN 'ORIGIN', 'DEST', 'YEAR', 'QUARTER', 'ORIGIN_STATE_ABR', 'DEST_STATE_ABR' LET vallist = $(fldname); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname

De lijst met veldnamen moet overeenstemmen met de namen van de velden die worden gebruikt in elke veldbinding die u hebt gemaakt.

Zodra de waardenlijst voor elk veld is gemaakt, kan een SELECT-instructie worden geschreven. Bijvoorbeeld:

SQL SELECT "MKT_ID", "YEAR", "QUARTER", "ORIGIN", "ORIGIN_STATE_ABR", "DEST", "DEST_STATE_ABR", "TICKET_CARRIER", "FARE_CLASS", "PASSENGERS", "DISTANCE", 1 AS "FLIGHT_COUNT" FROM "SAPH7T"."/QT/AIRPORT_FACT" $(WHERE_PART);

Het $(WHERE_PART)-gedeelte van de SELECT-instructie zal worden uitgebreid om ook de WHERE-clausule te omvatten die is gegenereerd door het uitvoeren van de hierboven geïllustreerde FOR-NEXT-lus. De lijst met kolomuitdrukkingen na het SELECT-sleutelwoord moet worden aangepast zodat deze overeenkomt met de specifieke kolommen van de databasetabel.

Waarschuwing: Vermijd het gebruik van de namen van velden uit de sjabloon-app bij het maken van verbindingsvariabelen voor de On-demand-app. De in het script gedefinieerde variabelen worden beschikbaar gesteld in het sjabloon-app-model waarnaar wordt verwezen bij het maken van gegevensvisualisaties. Als u On-demand-app-bindingsvariabelen kiest die niet overlappen met velden in het model, voorkomt u onbedoelde verwarring tussen de velden in het sjabloon-app-model en de On-demand-app-bindingsvariabelen in het load-script voor gegevens. Een goede methode is een voorvoegsel te gebruiken voor On-demand-app-bindingsvariabelen. Gebruik bijvoorbeeld X_ORIGIN in plaats van ORIGIN.

Eenmalige aanmelding (SSO)

On-demand apps kunnen single sign-on (SSO) gebruiken met gegevensbronnen die SSO ondersteunen. De zoekmachine en de gegevensbron moeten worden geconfigureerd om SSO toe te staan.

Opmerking: Deze functionaliteit is niet beschikbaar in Kubernetes.

Zie SAP HANA configureren voor SAML toegang met eenmalige aanmelding met Qlik Sense (alleen in het Engels) en Cloudera Impala configureren voor toegang met eenmalige aanmelding (alleen in het Engels) voor meer informatie.

Nadat de zoekmachine en gegevensbron zijn geconfigureerd voor SSO, moet de sjabloon-app worden ingeschakeld SSO door het toevoegen van de volgende syntaxis aan het script van de sjabloon-app:

///!ODAG_SSO

De On-Demand App Service analyseert het script wanneer een On-demand-app wordt gegenereerd en iedere keer wanneer deze opnieuw wordt geladen.

Wanneer een On-demand-app is geladen met SSO, wordt de identiteit van de gebruiker verzonden naar de gegevensbron. De eindgebruiker moet toegang hebben tot de bronnen die worden gebruikt in de gegevensverbindingen van de sjabloon-app. Alleen gegevens waar gebruikers toegang tot hebben worden geladen, zelfs als een grotere set van gegevens is geselecteerd.

Waarschuwing: On-demand-apps gegenereerd van sjabloon-apps die single sign-on (SSO) gebruiken kunnen niet worden gepubliceerd.

Knooppunten voor het opnieuw laden van sjabloon-apps

Beheerders kunnen bepalen waar On-demand-apps in een omgeving met meerdere knooppunten opnieuw worden geladen door werklastverdelingsregels voor sjabloon-apps in te stellen. Wanneer een werklastverdelingsregel is ingesteld, worden alle apps die worden gegenereerd vanuit koppelingen naar de sjabloon-app, geladen overeenkomstig de regel die van toepassing is op de sjabloon-app. Zie On-demand-apps beheren (alleen in het Engels) voor meer informatie.

Opmerking: Deze functionaliteit is niet beschikbaar in Kubernetes.