Bindungsformeln in On-Demand-Vorlage-Apps

Datenbindungen in einer Vorlagen-App geben an, welche Daten aus einer entsprechenden Auswahl-App zur Formulierung der Abfragen verwendet werden, die beim Laden von Daten in eine On-Demand-App ausgegeben werden.

Die Grundform der Bindungsformeln – $(od_FIELDNAME) – kann geändert werden, um die Auswahl zu verfeinern und sicherzustellen, dass die Vorlagen-App die Daten korrekt lädt.

Warnung: Vorlagen-Apps, die ursprünglich mithilfe der Qlik Sense-Erweiterung für die On-demand App Generation erstellt wurden, sollten geändert werden, damit der nachfolgend dargestellte Ansatz für die Bindung einer großen Anzahl ausgewählter Werte eines Felds genutzt werden kann.

Bindung einer großen Anzahl ausgewählter Werte eines Felds

Qlik Associative Engine beschränkt die Anzahl der Werte, die in einer einzelnen LET-Anweisung zusammengefasst werden können. Zur Vermeidung der Beschränkung kann eine INLINE LOAD-Anweisung verwendet werden, um auf effiziente Weise eine kommagetrennte Liste mit Werten zu erstellen.

Zuerst müssen Sie eine Skript-Subroutine zur Verarbeitung einer INLINE-Tabelle erstellen.

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;
Hinweis: In den Aufrufen der Subroutine BuildValueList müssen spezifische Werte für den Parameter QuoteChrNum verwendet werden. Wenn das von der Subroutine verarbeitete Feld ein numerisches Feld ist, muss der Parameter auf 0 festgelegt werden. Bei Zeichendaten muss der Parameter auf 39 festgelegt werden.

Die Bindung sollte dann mithilfe einer INLINE-Tabelle erstellt werden, um eine Struktur für die Feldwerte zu erstellen, die unabhängig von der Anzahl der Werte geladen wird.

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

Die Formel $(od_ORIGIN) {"quote": "", "delimiter": "") wird durch eine Liste von ORIGIN-Feldwerten aus der Auswahl-App ersetzt, die durch Zeilenumbrüche voneinander getrennt sind. Wenn das ORIGIN-Feld die drei Werte BOS, JFK und ORD enthält, sieht die erweiterte INLINE-Tabelle wie folgt aus:

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

Der Wert der ORIGIN-Variable, die auf den Aufruf von BuildValueList folgt, ist:

'BOS','JFK’,'JFK'

Bindung optionaler und ausgeschlossener Werte

Manchmal ist es nötig, in der Abfrage eine Filterbedingung für das Skript der On-Demand-Vorlage-App mithilfe von Feldern zu erstellen, die nicht direkt in der Auswahl-App ausgewählt werden können. Zum Beispiel kann bei Verkaufsdatensätzen ein Regionencode wie REGION_CODE verwendet werden, während bei der Auswahl-App ein leichter zu erkennendes REGION_NAME-Feld für die Auswahl von Regionen verwendet wird. Die Auswahl-App kann ein Modell aufweisen, das eine separate Tabelle für die Verknüpfung von REGION_CODE mit REGION_NAME verwendet, sodass Benutzer Werte aus REGION_NAME verwenden können, um den Auswahlstatus zu steuern.

Während die Auswahl von Werten aus REGION_NAME dazu führt, dass diese Werte den Auswahlstatus erhalten, haben die Werte von REGION_CODE nur den optionalen Status, d. h., sie sind weiß und nicht grün. Darüber hinaus gilt: Wenn das Design der Arbeitsblätter der Auswahl-App den REGION_CODE aus ihrer Gruppe von Filterfenstern ausschließt, besteht keine Möglichkeit, die Bindungsformel $(od_REGION_CODE) im Skript der On-Demand-App auf die Liste der ausgewählten Regionen zu erweitern, weil dieREGION_CODE-Werte niemals wirklich ausgewählt werden, d. h. sie wechseln niemals zu Grün.

Für diese Situation gibt es eine zusätzliche Syntax, die genauer steuert, welche Auswahlstatuswerte in den einzelnen Datenbindungen verwendet werden. Das Präfix od_ im Feldnamenteil in jeder Bindungsformel für eine On-Demand-App kann eine Kombination von Buchstaben enthalten, um anzugeben, ob die in der Bindung verwendeten Werte die Werte sind, die aus dem Auswahlstatus und dem optionalen Status genommen wurden. Die gültigen Kombinationen unter Verwendung des REGION_CODE-Beispiels sind:

Gültige Kombinationen bei Verwendung von REGION_CODE
Muster Erweiterung
$(ods_REGION_CODE) Ausgewählte (grüne) Werte von REGION_CODE
$(odo_REGION_CODE) Optionale (weiße) Werte von REGION_CODE
$(odso_REGION_CODE) Ausgewählte oder optionale Werte von REGION_CODE
$(od_REGION_CODE) So wie bei $(ods_REGION_CODE), nur ausgewählte (grüne) Werte von REGION_CODE

Im Fall des Beispiels der On-Demand-App für Verkaufsdaten stellt die folgende Datenbindungsformel sicher, dass sowohl entweder die ausgewählten oder die optionalen Werte für den REGION_CODE in der REGION_CODE-Bindung eingeschlossen werden:

$(odso_REGION_CODE)

Bindung numerischer Werte

Wenn die an die On-Demand-App gebundenen Daten aus Nummern anstatt Strings bestehen, ist es hilfreich, die Anführungszeichensetzung für numerische Werte zu deaktivieren. Beispiel: Wenn die Verkaufsdatensätze eine numerische DAY_OF_WEEK-Spalte enthalten und Sie möchten, dass der Benutzer der Auswahl-App beliebige Kombinationen von DAY_OF_WEEK auswählen kann, erweitern Sie die Aggregierungsabfrage, die für das Laden der Auswahl-App verwendet wird, sodass DAY_OF_WEEK sowohl in der Liste SELECT als auch in der Liste GROUP BY enthalten ist. Wenn DAY_OF_WEEK-Werte bei der Auswahl in Anführungszeichen gesetzt werden, könnte ein Laufzeitfehler auftreten, falls die Datenbank keine automatische Umwandlung von Stringwerten in numerische Werte unterstützt.

Für solche Situationen ist ein Syntaxsuffix vorhanden, das am Ende des FIELDNAME-Teils der Bindungsformel hinzugefügt werden kann, um durchzusetzen, dass die Feldbindung anstatt der Stringwerte die numerischen Werte aus der Auswahl-App verwendet. Das Suffix ist _n, wie in der folgenden WHERE-Bedingung:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

Dies wird erweitert zu:

WHERE DAY_OF_WEEK IN ( 1,2 );

Anforderung für eine bestimmte Anzahl von Auswahlen

In manchen Situationen kann die Anforderung notwendig sein, dass die On-Demand-App-Abfrage eine bestimmte Anzahl oder einen bestimmten Bereich von Werten für ein bestimmtes Feld enthält. Beispiel: Wenn die Abfrage der On-Demand-App eine BETWEEN-Bedingung enthält, mit der alle Verkäufe zwischen einem Start- und Enddatum abgerufen werden, kann die Bindungsformel für das Feld YEARQUARTER eine Suffix-Syntax von [2] haben, die erfordert, dass genau zwei Werte für YEARQUARTER ausgewählt werden, also:

$(od_YEARQUARTER)[2]

Der Navigationspunkt für On-Demand-Apps in der Auswahl-App bleibt solange deaktiviert, bis genau zwei Werte von YEARQUARTER ausgewählt sind. Eine Nachricht wird angezeigt, die darauf hinweist, dass genau zwei Werte von YEARQUARTER ausgewählt werden müssen.

Durch die Beschränkungen der Auswahlmenge wird eine vorausgesetzte Bindung zwischen der Auswahl-App und der On-Demand-App erstellt. Das ist anders als bei Bindungsformeln, die keine Mengenbeschränkungen verwenden. Beispiel: Wenn das Skript der Vorlage-App eine Bindungsformel ohne eine Mengenbeschränkung enthält, wie in:

$(od_MYFIELD)

ist es nicht erforderlich, dass die Auswahl-App ein Feld mit dem Namen MYFIELD enthält oder dass ausgewählte Werte aus diesem Feld enthalten sein müssen, wenn das Feld nicht existiert. Wenn die Auswahl-App kein Feld mit dem Namen MYFIELD enthält oder der Benutzer keine Auswahl in diesem Feld vornimmt, kann es dazu kommen, dass der Navigationspunkt für On-Demand-Apps aktiviert wird, wenn andere Optionen ausgewählt werden, um die Bedingung für Werte mit einem Datensatzgrenzwert zu erfüllen.

Wenn die Bindungsformel andererseits wie folgt lautet:

$(od_MYFIELD)[1+]

sind jetzt zwei Anforderungen vorhanden, die für die Auswahl-App gelten:

  • Die Auswahl-App muss ein Feld mit dem Namen MYFIELD enthalten.
  • Der Benutzer muss mindestens einen Wert für MYFIELD auswählen.

Diese Art von Bindungsformel muss mit Vorsicht verwendet werden, weil dadurch eingeschränkt wird, welche Auswahl-Apps mit der Vorlage-App verwendet werden können. Sie sollten diese Mengenbeschränkung nicht für Bindungen einer Vorlage-App verwenden, es sei denn, Sie sind sicher, dass Sie diese Auswahlmengenanforderung bei allen Auswahl-Apps anwenden möchten, die mit dieser Vorlage-App verknüpft sind.

Zur Durchführung des Datenbindungsvorgangs nutzt der On-Demand-App-Dienst ein Verfahren zum Ersetzen von Zeichenfolgen, das Kommentare im Skript nicht berücksichtigt. Das bedeutet, Sie sollten keine Bindungsformeln in Kommentaren verwenden, es sei denn, diese Kommentare sollen die Liste der gebundenen Werte enthalten, die auf die App-Generierung folgen.

Andere Mengenbeschränkungen sind möglich. In der folgenden Tabelle werden die verschiedenen Kombinationen von Beschränkungen der Auswahlmenge zusammengefasst.

Verschiedene Kombinationen von Beschränkungen der Auswahlmenge
Beschränkungsmuster Auswahlanforderung
$(od_YEARQUARTER)[2] Genau 2 Werte von YEARQUARTER müssen ausgewählt werden.
$(od_YEARQUARTER)[2-4] 2 bis 4 Werte von YEARQUARTER müssen ausgewählt werden.
$(od_YEARQUARTER)[2+] Mindestens 2 Werte von YEARQUARTER müssen ausgewählt werden.
$(od_YEARQUARTER)[2-] Höchstens 2 Werte von YEARQUARTER können ausgewählt werden.
Hinweis: Die Überprüfung, mit der ermittelt wird, ob alle Mengenbeschränkungen in der Vorlage-App erfüllt sind, wird während des Vorgangs der App-Generierung durchgeführt. Wird eine Mengenbeschränkung nicht erfüllt, wird die Anfrage zum Generieren der App zurückgewiesen und es wird eine Fehlermeldung angezeigt.

Ändern der Anführungszeichen und der Trennzeichen für Werte

Wenn eine Liste mit Werten, die aus einem Feld in einer On-Demand-Auswahl-App ausgewählt wurden, in ein Skript einer Vorlagen-App eingefügt wird, sind die Werte von einfachen Anführungszeichen umgeben und durch Kommas getrennt. Dies sind die standardmäßig verwendeten Anführungs- und Trennzeichen. Diese Werte können in der Syntax, die an die Bindungsanweisung für jedes Feld angehängt ist, geändert werden. Hier ein Beispiel:

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

Diese neuen Werte werden dann verwendet, wenn die Liste der Bindungswerte, die aus der Auswahl-App entnommen werden, formuliert wird. Wenn es sich beispielsweise bei den ausgewählten Werten um die ersten drei Monate des Jahres handelt, wird die Liste wie folgt erstellt:

|January|;|February|;|March|

Die Standardwerte für Anführungs- und Trennzeichen können für die meisten standardmäßigen SQL-Datenbanken verwendet werden. Für einige SQL-Datenbanken können sie aber möglicherweise nicht genutzt werden, und für viele dynamische Datenquellen wie NoSQL und REST sind sie auch nicht einsetzbar. Bei derartigen Datenquellen müssen Sie diese Bindungsformel anhängen, um die Anführungs- und Trennzeichen zu ändern.