# Bindungsformeln in On-Demand-Vorlagen-Anwendungen

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

Die Grundform von Bindungsformeln ($(odag\_FIELDNAME)) ist nicht die einzige verfügbare Methode zum Binden von Formeln. Es können auch andere Zusätze verwendet werden, um die Auswahl zu verfeinern und sicherzustellen, dass die Vorlagen-Anwendung die Daten korrekt lädt.

## Verfügbare Bindungszusätze

Die allgemeine Zusatzform lautet odag[s|o][n][cnt], wobei gilt:

* s - nur ausgewählte Werte einschließen
* o - nur optionale Werte einschließen
* n - die numerische Version auswählen, standardmäßig ohne Anführungszeichen
* cnt - die Anzahl der Werte anstelle von tatsächlichen Werten einfügen

Die folgende Tabelle enthält eine Liste aller Versionen der verfügbaren Bindungszusätze. Die Beispiele gehen von einem Feld mit dem Namen MyField mit 1,2,3 als ausgewählten Werten (grüne Werte) und 4 als optional ausgewähltem Wert (weißer Wert) aus.

Bindungszusätze

| Zusatz | Beschreibung | Beispiel | Ersetzt durch |
| --- | --- | --- | --- |
| odag\_ | Ersetzt durch die ausgewählten (grünen) und optionalen (weißen) Werte. Wählt die Textversion der Werte. Dies ist der Standardzusatz für Stringwerte. | $(odag\_MyField) | '1','2','3','4' |
| odagcnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odag\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagcnt\_MyField) | 4 |
| odagn\_ | Ersetzt durch die ausgewählten (grünen) und optionalen (weißen) Werte. Wählt die numerische Version der Werte. Dies ist der Standardzusatz für numerische Werte.<br><br>Informationshinweis<br><br>Wenn für das Datenmodell keine ausgewählten oder optionalen Werte des Felds vorhanden sein können, muss ein „noValue“ in der Formel angegeben sein. Hier ein Beispiel: `$(odagn_MyField){"noValue":"-99999"}`.<br><br>Weitere Informationen finden Sie unter [Ändern der Anführungszeichen und der Trennzeichen für Werte](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Changing). | $(odagn\_MyField) | 1,2,3,4 |
| odagncnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odagn\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagncnt\_MyField) | 4 |
| odago\_ | Ersetzt durch die optionalen (weißen) Werte. Wählt die Textversion der Werte. Dieser Zusatz wird für die Abfrageoptimierung verwendet.<br><br>[Optimierung für große Datenbanken](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odago\_MyField) | '4' |
| odagocnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odago\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagocnt\_MyField) | 1 |
| odagon\_ | Ersetzt durch die optionalen (weißen) Werte. Wählt die numerische Version der Werte. Dieser Zusatz wird für die Abfrageoptimierung verwendet.<br><br>[Optimierung für große Datenbanken](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odagon\_MyField) | 4 |
| odagoncnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odagon\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagoncnt\_MyField) | 1 |
| odags\_ | Ersetzt durch die ausgewählten (grünen) Werte. Wählt die Textversion der Werte. Dieser Zusatz wird für die Abfrageoptimierung verwendet.<br><br>[Optimierung für große Datenbanken](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odags\_MyField) | '1','2','3' |
| odagscnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odags\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagscnt\_MyField) | 3 |
| odagsn\_ | Ersetzt durch die ausgewählten (grünen) Werte. Wählt die numerische Version der Werte. Dieser Zusatz wird für die Abfrageoptimierung verwendet.<br><br>[Optimierung für große Datenbanken](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odagsn\_MyField) | 1,2,3 |
| odagsncnt\_ | Ersetzt durch die Anzahl der Werte in der entsprechenden odagsn\_-Bindung. Dieser Zusatz wird für die Abfrageoptimierung verwendet. | $(odagsncnt\_MyField) | 3 |

Informationshinweis

Leere Werte werden in den Textversionen herausgefiltert. Nicht numerische und NaN-Werte werden in den numerischen Versionen herausgefiltert.

## Optimierung für große Datenbanken

Die Zusätze odags\_ und odagsn\_ sind für die Abfrageoptimierung vorgesehen. Wenn in den gebundenen Feldern keine Auswahlen vorhanden sind, schließt odag\_ alle Werte ein, während odags\_ keine Werte einschließt. In einigen Fällen ist es effizienter, die Zusätze odags\_ und odagscnt\_ zu verwenden. Damit können Sie testen, ob der Wertesatz leer ist. Beispielsweise ist Folgendes effizienter, wenn in MyField keine Auswahlen getroffen wurden, anstatt alle Werte in odag\_MyField zu testen:

```
WHERE ($(odagscnt_MyField)=0 OR MyColumn IN ($(odags_MyField)))
```

odags\_ kann nicht verwendet werden, wenn in der Auswahl-Anwendung ein alternatives Feld vorhanden ist, aus dem ausgewählt werden kann und das kein On-Demand-Feld ist. Wenn der Benutzer zum Beispiel Auswahlen in CountryName trifft, aber die Bindungsformel im zugeordneten Feld CountryCode vorhanden ist, kann odags\_ nicht verwendet werden. In diesen Fällen kann stattdessen odago\_ verwendet werden. Wenn keine Werte in einer odago\_-Bindung vorhanden sind, kann dies entweder bedeuten, dass alle Werte oder dass keine Werte eingeschlossen werden sollen.

## Bindung numerischer Werte

Wenn die an die On-Demand-Anwendung zu bindenden Daten aus Zahlen anstatt Strings bestehen, ist es hilfreich, die Anführungszeichensetzung für numerische Felder zu deaktivieren. Beispiel: Wenn die Verkaufsdatensätze eine numerische DAY\_OF\_WEEK-Spalte enthalten und Sie möchten, dass der Benutzer der Auswahl-Anwendung beliebige Kombinationen von DAY\_OF\_WEEK auswählen kann, erweitern Sie die Aggregierungsabfrage, die für das Laden der Auswahl-Anwendung 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.

Um dieses Problem zu lösen, können Sie eine numerische Version des Suffixes für die Bindungsformel verwenden. Dadurch wird erzwungen, dass die Feldbindung die numerischen Werte aus der Auswahl-Anwendung statt der Stringwerte verwendet. Folgende numerische Versionen sind vorhanden:

* odagn\_
* odagon\_
* odagsn\_

Wenn Sie numerische Versionen verwenden, werden die Werte aus dem numerischen Teil der dualen Werte übernommen, in denen ausgewählte Werte gespeichert sind, und die Werte umfassen standardmäßig keine Anführungszeichen.

## Anforderung für eine bestimmte Anzahl von Auswahlen

In manchen Situationen kann die Anforderung notwendig sein, dass die On-Demand-Anwendungs-Abfrage eine bestimmte Anzahl oder einen bestimmten Bereich von Werten für ein bestimmtes Feld enthält. Beispiel: Wenn die Abfrage der On-Demand-Anwendung 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:

```
$(odag_YEARQUARTER)[2]
```

Der Navigationspunkt für On-Demand-Anwendungen in der Auswahl-Anwendung bleibt so lange 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-Anwendung und der On-Demand-Anwendung erstellt. Das ist anders als bei Bindungsformeln, die keine Mengenbeschränkungen verwenden. Beispiel: Wenn das Skript der Vorlagen-Anwendung eine Bindungsformel ohne eine Mengenbeschränkung enthält, wie in:

```
$(odag_MYFIELD)
```

ist es nicht erforderlich, dass die Auswahl-Anwendung ein Feld mit dem Namen MYFIELD enthält oder dass ausgewählte Werte aus diesem Feld enthalten sein müssen, wenn das Feld existiert. Wenn die Auswahl-Anwendung 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-Anwendungen 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:

$(odag\_MYFIELD)[1+]

Es gibt jetzt zwei Anforderungen an die Auswahl-Anwendung:

* Die Auswahl-Anwendung 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-Anwendungen mit der Vorlagen-Anwendung verwendet werden können. Sie sollten diese Mengenbeschränkung nicht für Bindungen einer Vorlagen-Anwendung verwenden, es sei denn, Sie sind sicher, dass Sie diese Auswahlmengenanforderung bei allen Auswahl-Anwendungen anwenden möchten, die mit dieser Vorlagen-Anwendung verknüpft sind.

Zur Durchführung des Datenbindungsvorgangs nutzt der On-Demand-Anwendungsdienst 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 Anwendungsgenerierung folgen. Alle Bindungen in Kommentaren werden auch in der Feldliste im Link für die On-Demand-Anwendungsgenerierung angezeigt, was möglicherweise nicht erwünscht ist.

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 |
| --- | --- |
| $(odag\_YEARQUARTER)[2] | Genau 2 Werte von YEARQUARTER müssen ausgewählt werden. |
| $(odag\_YEARQUARTER)[2-4] | 2 bis 4 Werte von YEARQUARTER müssen ausgewählt werden. |
| $(odag\_YEARQUARTER)[2+] | Mindestens 2 Werte von YEARQUARTER müssen ausgewählt werden. |
| $(odag\_YEARQUARTER)[2-] | Höchstens 2 Werte von YEARQUARTER können ausgewählt werden. |

InformationshinweisDie Überprüfung, mit der ermittelt wird, ob alle Mengenbeschränkungen in der Vorlagen-Anwendung erfüllt sind, wird während des Vorgangs der Anwendungsgenerierung durchgeführt. Wird eine Mengenbeschränkung nicht erfüllt, wird die Anfrage zum Generieren der Anwendung 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 Auswahl-Anwendung ausgewählt wurden, in ein Skript einer Vorlagen-Anwendung eingefügt wird, sind die Werte in einfache Anführungszeichen eingeschlossen 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. Beispiel:

$(odag\_ORIGIN){"quote": "|", "delimiter": ";"}

Diese neuen Werte werden dann verwendet, wenn die Liste der Bindungswerte, die aus der Auswahl-Anwendung 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 ebenfalls nicht einsetzbar. Bei derartigen Datenquellen müssen Sie diese Bindungsformel anhängen, um die Anführungs- und Trennzeichen zu ändern.

Die folgende Tabelle enthält Formatparameter zum Ändern von Anführungszeichen und Trennzeichen.

Formatparameter

| Parameter | Standardwert | Definition |
| --- | --- | --- |
| quote | ' (einfaches Anführungszeichen) für Textzusätze<br><br>für numerische Zusätze leer | Wird vor und nach jedem Wert hinzugefügt |
| delimiter | , (Komma) | Wird zwischen allen Werten hinzugefügt |
| quoteReplace | '' (doppelte Anführungszeichen) | Wenn der Wert nicht leer ist und das Anführungszeichen nicht leer ist, werden alle Vorkommen des Anführungszeichens innerhalb der Werte durch den angegegbenen String ersetzt.<br><br>InformationshinweisquoteReplace wird als Parameter für numerische Zusätze wie odagn\_ nicht unterstützt. quoteReplace wird von numerischen Zusätzen ignoriert. |
| noValue | (leer) | Wenn keine Werte für ein Feld ausgewählt sind, wird stattdessen dieser Wert verwendet. Dieser Parameter ist nützlich, wenn keine Werte für ein bestimmtes Feld in der Auswahl vorhanden sein können.<br><br>Der Wert muss auf einen Wert festgelegt sein, der in den Quelldaten nicht vorhanden ist. Verwenden Sie für numerische Werte beispielsweise einen negativen Wert, wenn alle Werte in der Datenbank positiv sind.<br><br>Informationshinweis Für Werte ohne Anführungszeichen muss noValue angegeben werden, wenn ausgewählte Werte des Felds ein leerer Datensatz sein können. |

Die folgenden Tabellen enthalten die Formatspezifikationen und generierten Werte für odag\_ und odagn\_. Die generierten eingefügten Werte basieren auf den Standarddatenwerten von VAL1, VAL2.

Beispielformatspezifikationen und generierte Werte für odag\_odag\_

| Formatspezifikation | Beschreibung | Generierte eingefügte Werte |
| --- | --- | --- |
| nicht angegeben | Kommagetrennte Werteliste, ' als Anführungszeichen. | 'VAL1','VAL2' |
| {"quote": "", "delimiter": ""} | Zusammengefasste Werte | VAL1VAL2 |
| {"quote": "X", "delimiter": "Y"} | Werte mit X als Anführungszeichen, getrennt durch Y. | XVAL1XYXVAL2X |
| {"quote": "XX", "delimiter": "YY"} | Werte mit XX als Anführungszeichen, getrennt durch YY. | XXVAL1XXYYXXVAL2XX |
| {"quote": "X"} | Werte mit X als Anführungszeichen, getrennt durch , (Standard) | XVAL1X,XVAL2X |
| {"delimiter": "YY"} | Werte mit ' als Anführungszeichen (Standard), getrennt durch YY. | 'VAL1'YY'VAL2' |
| {"quote": ""} | Werte ohne Anführungszeichen, getrennt durch ,. | VAL1,VAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | Werte mit A als Anführungszeichen, getrennt durch Komma (Standard). Ein Wert in diesem Feld wird durch \A ersetzt..<br><br>Informationshinweis<br><br>In diesem Beispiel muss ein doppeltes \ vorhanden sein, da \ das Escape-Zeichen im JSON-Format ist. | AV\AL1A,AV\AL2A |

Beispielformatspezifikationen und generierte Werte für odagn\_odagn\_

| Formatspezifikation | Beschreibung | Generierte eingefügte Werte |
| --- | --- | --- |
| nicht angegeben | Kommagetrennte Liste von Werten ohne Anführungszeichen. Beachten Sie, dass numerische Werte verwendet werden. | VAL1,VAL2 |
| {"delimiter": "YY"} | Werte ohne Anführungszeichen, getrennt durch YY | VAL1YYVAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | Im Gegensatz zum Zusatz odag\_ wird der Parameter quoteReplace ignoriert. | AVAL1A,AVAL2A |

## Verarbeitung einzelner Werte

Wenn die individuelle Verarbeitung von Feldwerten erforderlich ist, können Sie eine Inline-Methode verwenden, um Werte in der Variablen Values zu generieren und zufällige Verarbeitung mit Replace oder einer anderen Funktion durchzuführen. Im Beispiel unten wird Replace mit Platzhalterwerten verwendet.

MyTempBindingData: LOAD \* INLINE [VAL $(odag\_MyField){"quote": "", "delimiter": "\n"} ]; \_TempTable: LOAD Concat(chr(39) & Replace(text, from\_str, to\_str) & chr(39), ',') as CombinedData Resident MyTempBindingData; LET Values = Peek('CombinedData',0,'\_TempTable'); drop table \_TempTable; drop table MyTempBindingData;