# Tworzenie powiązań między wyrażeniami w aplikacjach szablonu On-demand

Powiązania między danymi w aplikacji szablonu określają dane z odpowiadającej aplikacji selekcji, które są używane do tworzenia zapytań wydawanych podczas ładowania danych do aplikacji On-demand.

Podstawowa forma wiązania wyrażeń--$(odag\_FIELDNAME)--nie jest jedyną dostępną metodą wiązania wyrażeń. Inne prefiksy mogą służyć do doprecyzowywania wyborów i zapewnienia, że aplikacja szablonu załaduje dane prawidłowo.

OstrzeżenieAplikacje szablonów utworzone pierwotnie za pomocą rozszerzenia Qlik Sense do On-demand App Generation należy zmienić tak, aby korzystały z podejścia przedstawionego poniżej w celu utworzenia powiązania z wieloma wyborami z pola.

## Dostępne prefiksy wiążące

Ogólna forma prefiksu to odag[s|o][n][cnt] gdzie:

* s – zawiera tylko wybrane wartości
* o – zawiera tylko wartości opcjonalne
* n – wybiera wersję numeryczną, domyślnie bez cudzysłowów
* cnt – wstawia numer wartości zamiast wartości rzeczywistych

Poniższa tabela zawiera listę wszystkich dostępnych wersji prefiksów wiążących. Przykłady zakładają pole o nazwie MyField z 1, 2 i 3 jako wybranymi wartościami (wartości zielone) oraz 4 jako opcjonalną wybraną wartością (wartość biała).

Prefiksy wiążące

| Prefiks | Opis | Przykład | Zastąpione przez |
| --- | --- | --- | --- |
| odag\_ | Zastępowane przez wybrane (zielone) i opcjonalne (białe) wartości. Wybiera wersję tekstową wartości. Jest to standardowy prefiks dla wartości ciągów. | $(odag\_MyField) | '1','2','3','4' |
| odagcnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odag\_ . Ten prefiks służy do optymalizacji zapytań. | $(odagcnt\_MyField) | 4 |
| odagn\_ | Zastępowane przez wybrane (zielone) i opcjonalne (białe) wartości. Wybiera wersję numeryczną wartości. Jest to standardowy prefiks dla wartości numerycznych.<br><br>Informacja<br><br>Jeśli model danych zakłada brak wybranych lub opcjonalnych wartości pola, to w wyrażeniu musi być określona wartość noValue. Na przykład `$(odagn_MyField){"noValue":"-99999"}`.<br><br>Więcej informacji zawiera temat [Zmiana znaków cudzysłowu wartości oraz znaków ograniczników](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Changing). | $(odagn\_MyField) | 1,2,3,4 |
| odagncnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odagn\_ . Służy do optymalizacji zapytań. | $(odagncnt\_MyField) | 4 |
| odago\_ | Zastępowane przez opcjonalne (białe) wartości. Wybiera wersję tekstową wartości. Służy do optymalizacji zapytań.<br><br>[Optymalizacja pod kątem dużej bazy danych](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odago\_MyField) | '4' |
| odagocnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odago\_ . Służy do optymalizacji zapytań. | $(odagocnt\_MyField) | 1 |
| odagon\_ | Zastępowane przez opcjonalne (białe) wartości. Wybiera wersję numeryczną wartości. Służy do optymalizacji zapytań.<br><br>[Optymalizacja pod kątem dużej bazy danych](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odagon\_MyField) | 4 |
| odagoncnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odagon\_ . Służy do optymalizacji zapytań. | $(odagoncnt\_MyField) | 1 |
| odags\_ | Zastępowane przez wybrane (zielone) wartości. Wybiera wersję tekstową wartości. Służy do optymalizacji zapytań.<br><br>[Optymalizacja pod kątem dużej bazy danych](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odags\_MyField) | '1','2','3' |
| odagscnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odags\_ . Służy do optymalizacji zapytań. | $(odagscnt\_MyField) | 3 |
| odagsn\_ | Zastępowane przez wybrane (zielone) wartości. Wybiera wersję numeryczną wartości. Służy do optymalizacji zapytań.<br><br>[Optymalizacja pod kątem dużej bazy danych](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm#Optimizi). | $(odagsn\_MyField) | 1,2,3 |
| odagsncnt\_ | Zastępowane przez numer wartości w odpowiednim wiązaniu odagsn\_ . Służy do optymalizacji zapytań. | $(odagsncnt\_MyField) | 3 |

Informacja

Puste wartości są odfiltrowywane w wersjach tekstowych. Wartości nienumeryczne i NaN są odfiltrowywane w wersjach numerycznych.

## Optymalizacja pod kątem dużej bazy danych

Prefiksy odags\_ i odagsn\_ są przeznaczone do optymalizacji zapytań. W przypadku braku wyboru w powiązanych polach prefiks odag\_ zawiera wszystkie wartości, natomiast odags\_ nie zawiera żadnych. W niektórych przypadkach bardziej efektywne jest wykorzystanie prefiksów odags\_ i odagscnt\_. Pozwala to na sprawdzenie, czy zestaw wartości jest pusty. Na przykład poniższe rozwiązanie jest bardziej efektywne, gdy nie dokonuje się wyboru w MyField, niż testowanie wszystkich wartości w odag\_MyField:

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

Prefiks odags\_ nie może być używany, gdy w aplikacji selekcji jest inne pole, które nie jest polem on-demand. Na przykład, jeśli użytkownik dokona wyboru wCountryName, ale wyrażenie wiążące jest na powiązanym polu CountryCode, nie można użyć prefiksu odags\_. W tych przypadkach można użyć prefiksu odago\_. Jeśli w wiązaniu odago\_ nie ma żadnych wartości, może to oznaczać, że albo powinny zostać zawarte wszystkie wartości albo żadne.

## Wiązanie wartości liczbowych

Gdy dane przeznaczone do powiązania z aplikacją On-demand zawierają liczby zamiast ciągów, wówczas użyteczne jest pozbycie się znaków cudzysłowów otaczających wartości w polach liczbowych. Jeśli na przykład rekordy sprzedaży zawierają kolumnę liczbową DAY\_OF\_WEEK, a użytkownik aplikacji selekcji ma wybrać dowolne kombinacje wartości DAY\_OF\_WEEK, należy rozszerzyć zapytanie agregacji używane do ładowania aplikacji selekcji w taki sposób, aby dołączyć wartości DAY\_OF\_WEEK zarówno do listy SELECT, jak i do listy GROUP BY. Jeśli cudzysłowy będą umieszczane wokół wartości DAY\_OF\_WEEK po ich wybraniu, wówczas może wystąpić błąd zapytania w środowisku wykonawczym, gdy baza danych nie obsługuje automatycznej konwersji typu z ciągu na liczbę.

Aby poradzić sobie z tą sytuacją, można użyć numerycznej wersji przyrostka wyrażenia wiążącego. Wymusza to na powiązaniu pola użycie wartości numerycznych z aplikacji selekcji, a nie wartości ciągu. Dostępne są następujące wersje numeryczne:

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

Przy użyciu wersji numerycznych wartości są pobierane z części numerycznej w wartościach podwójnych, które przechowują wybrane wartości i wartości te są domyślnie pozbawione cudzysłowów.

## Wymóg konkretnej liczby selekcji

W niektórych sytuacjach konieczne może być określenie wymogu, aby zapytanie aplikacji On-demand zawierało konkretną liczbę lub konkretny zakres wartości dla podanego pola. Jeśli na przykład zapytanie aplikacji On-demand zawiera klauzulę BETWEEN, która pozwala uzyskać dane o całej sprzedaży od daty początkowej do daty końcowej, wówczas wyrażenie tworzące powiązanie dla pola YEARQUARTER może zawierać sufiks [2], który będzie wymagać wyboru dokładnie dwóch wartości dla YEARQUARTER, jak poniżej:

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

Punkt nawigacji aplikacji On-demand w aplikacji selekcji pozostanie wyłączony, dopóki wybór nie będzie obejmował dokładnie dwóch wartości YEARQUARTER. Zostanie wyświetlony komunikat informujący o konieczności wyboru dokładnie dwóch wartości YEARQUARTER.

Ograniczenia dotyczące liczby wybranych elementów tworzą wymaganie wstępne łączące aplikację selekcji z aplikacją On-demand. Działanie takich wyrażeń różni się od działania wyrażeń tworzących powiązania, w których nie są stosowane ograniczenia dotyczące liczby. Gdy na przykład skrypt aplikacji szablonu zawiera wyrażenie tworzące powiązania bez ograniczenia dotyczącego liczby, jak poniżej:

```
$(odag_MYFIELD)
```

wówczas nie istnieje żadne wymaganie określające, że aplikacja selekcji ma zawierać pole o nazwie MYFIELD ani że jakiekolwiek wartości tego pola (jeśli ono istnieje) muszą być wybrane. Jeśli aplikacja selekcji nie zawiera pola o nazwie MYFIELD lub jeśli użytkownik nie dokona żadnego wyboru z tego pola, wówczas punkt nawigacji aplikacji On-demand nadal może zostać włączony — w przypadku dokonania innych wyborów — w celu spełnienia warunku wartości dotyczącego limitu rekordów.

Jeśli jednak wyrażeniem tworzącym powiązania jest:

$(odag\_MYFIELD)[1+]

oznacza to, że istnieją dwa wymagania względem aplikacji selekcji:

* Aplikacja selekcji musi zawierać pole o nazwie MYFIELD.
* Użytkownik musi wybrać co najmniej jedną wartość dla pola MYFIELD.

Tego typu wyrażenia tworzące powiązania muszą być używane ostrożnie, ponieważ ograniczają zakres aplikacji selekcji, które mogą być używane z aplikacją szablonu. Nie należy używać tego ograniczenia dotyczącego liczby względem powiązań aplikacji selekcji, chyba że to wymaganie dotyczące liczby wybranych elementów ma dotyczyć wszystkich aplikacji selekcji, które łączą się z tą aplikacją szablonu.

W celu wykonania procesu tworzenia powiązań między danymi usługa aplikacji On-demand stosuje podejście oparte na podstawianiu ciągu, które nie uwzględnia komentarzy występujących w skrypcie. Oznacza to, że w komentarzach nie należy używać wyrażeń tworzących powiązania, chyba że po wygenerowaniu aplikacji te komentarze mają zawierać listę wartości powiązanych. Wszelkie powiązania w komentarzach pojawią się również na liście pól łącza do generowania aplikacji on-demand, co może być niepożądane.

Możliwe jest także definiowanie innych ograniczeń dotyczących liczby. W poniższej tabeli podsumowano różne kombinacje ograniczeń dotyczących liczby wybranych elementów.

Różne kombinacje ograniczeń dotyczących liczby wybranych elementów

| Wzorzec ograniczenia | Wymaganie dotyczące wyboru |
| --- | --- |
| $(odag\_YEARQUARTER)[2] | Muszą zostać wybrane dokładnie 2 wartości YEARQUARTER. |
| $(odag\_YEARQUARTER)[2-4] | Wybór musi obejmować od 2 do 4 wartości YEARQUARTER. |
| $(odag\_YEARQUARTER)[2+] | Muszą zostać wybrane co najmniej 2 wartości YEARQUARTER. |
| $(odag\_YEARQUARTER)[2-] | Mogą zostać wybrane maksymalnie 2 wartości YEARQUARTER. |

InformacjaKontrola, która ustala, czy wszystkie ograniczenia dotyczące liczby w aplikacji szablonu zostały spełnione, jest wykonywana podczas generowania aplikacji. Jeśli ograniczenie dotyczące liczby jest naruszone, wówczas żądanie wygenerowania aplikacji zostanie odrzucone i pojawi się komunikat o błędzie.

## Zmiana znaków cudzysłowu wartości oraz znaków ograniczników

Gdy lista wartości z pola wybranego w aplikacji selekcji zostanie wstawiona do skryptu aplikacji szablonu, wówczas wartości zostaną otoczone pojedynczymi cudzysłowami i będą rozdzielone przecinkami. Są to znaki domyślne dla cudzysłowów i ograniczników. Te wartości można zmieniać w składni dołączanej do instrukcji wiązania dla każdego pola. Na przykład:

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

Te nowe wartości są następnie używane podczas formatowania listy wartości wiążących pobieranych z aplikacji selekcji. Na przykład jeśli wybrane wartości są pierwszymi trzema miesiącami roku, wówczas lista zostanie skonstruowana w następujący sposób:

|January|;|February|;|March|

Domyślne wartości cudzysłowu i ogranicznika działają z większością standardowych baz danych SQL. Mogą one jednak nie działać z niektórymi bazami danych SQL i nie działają z większością dynamicznych źródeł danych, takich jak NoSQL i REST. W przypadku takich źródeł należy dołączyć wyrażenie wiązania, aby zmienić znaki cudzysłowów i ograniczników.

Poniższa tabela przedstawia parametry formatowania dla zmiany znaków cudzysłowu i ogranicznika.

Parametry formatowania

| Parametr | Wartość domyślna | Definicja |
| --- | --- | --- |
| cudzysłów | ' (pojedynczy cudzysłów) dla prefiksów tekstowych<br><br>pusty dla prefiksów numerycznych | Będzie dodawany przed i po każdej wartości |
| ogranicznik | , (przecinek) | Będzie dodawany między wszystkimi wartościami |
| quoteReplace | '' (podwójne pojedyncze cudzysłowy) | Jeżeli wartość nie jest pusta, a cudzysłów nie jest pusty, to wszystkie wystąpienia cytatu wewnątrz wartości zostaną zastąpione przez określony łańcuch.<br><br>InformacjaquoteReplace nie jest obsługiwany jako parametr dla prefiksów numerycznych, takich jak odagn\_. quoteReplace jest ignorowany przez prefiksy numeryczne. |
| noValue | (pusty) | Jeśli dla danego pola nie wybrano żadnej wartości, zostanie użyta ta wartość. Parametr ten jest przydatny w przypadku, gdy w wyborze nie może być żadnych wartości danego pola.<br><br>Wartość ta powinna być ustawiona na wartość, która nie istnieje w danych źródłowych. Na przykład dla wartości liczbowych należy użyć ujemnej wartości, jeśli wszystkie wartości w bazie danych są dodatnie.<br><br>Informacja Dla wartości bez cudzysłowu parametr noValue musi być określony, jeśli wybrane wartości pola mogą być pustym zestawem. |

W poniższych tabelach przedstawiono specyfikację formatu i wygenerowane wartości dla odag\_ i odagn\_. Wygenerowane wstawione wartości opierają się na domyślnych wartościach danych VAL1, VAL2.

Przykładowe specyfikacje formatu i generowane wartości odag\_odag\_

| Specyfikacja formatu | Opis | Wygenerowane wstawiane wartości |
| --- | --- | --- |
| nie określono | Lista wartości oddzielonych przecinkami, z cudzysłowem ' . | 'VAL1','VAL2' |
| {"quote": "", "delimiter": ""} | Wartości konkatenowane | VAL1VAL2 |
| {"quote": "X", "delimiter": "Y"} | Wartości z cudzysłowem X i ogranicznikiem Y. | XVAL1XYXVAL2X |
| {"quote": "XX", "delimiter": "YY"} | Wartości z cudzysłowem XX i ogranicznikiem YY. | XXVAL1XXYYXXVAL2XX |
| {"quote": "X"} | Wartości z cudzysłowem X i ogranicznikiem , (domyślnie). | XVAL1X,XVAL2X |
| {"delimiter": "YY"} | Wartości z cudzysłowem ' (domyślnie) i ogranicznikiem YY | 'VAL1'YY'VAL2' |
| {"quote": ""} | Wartości bez cudzysłowu z ogranicznikiem ,. | VAL1,VAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | Wartości z cudzysłowem A i rozdzielane przecinkiem (domyślnie). Wartość wewnątrz pola zostanie zastąpiona przez \A.<br><br>Informacja<br><br>W tym przykładzie musi być podwójny \, ponieważ \ jest znakiem ucieczki w formacie json. | AV\AL1A,AV\AL2A |

Przykładowe specyfikacje formatu i generowane wartości odagn\_odagn\_

| Specyfikacja formatu | Opis | Wygenerowane wstawiane wartości |
| --- | --- | --- |
| nie określono | Lista oddzielonych przecinkami wartości bez cudzysłowu. Należy pamiętać, że zostaną użyte wartości numeryczne. | VAL1,VAL2 |
| {"delimiter": "YY"} | Wartości bez cudzysłowu z ogranicznikiem YY | VAL1YYVAL2 |
| {"quote": "A", "quoteReplace": "\\A"} | W porównaniu do prefiksu odag\_ parametr quoteReplace będzie ignorowany. | AVAL1A,AVAL2A |

## Przetwarzanie poszczególnych wartości

Gdy wymagane jest indywidualne przetwarzanie wartości pól, można użyć metody wbudowanej do wygenerowania wartości w zmiennej Values i wykonać dowolne przetwarzanie za pomocą Replace lub innej funkcji. W poniższym przykładzie funkcja Replace jest używana z wartościami zastępczymi.

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;