Przeskocz do zawartości głównej

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żenie: Aplikacje szablonów utworzone pierwotnie za pomocą rozszerzenia programu Qlik Sense do generowania aplikacji On-demand (On-demand App Generation) powinny zostać zmienione w taki sposób, aby korzystały z podejścia przedstawionego poniżej do utworzenia powiązania z dużą liczbą selekcji 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,3 jako wybranymi wartościami (wartości zielone) i 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.

Uwaga:

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"}.

Więcej informacji zawiera temat Zmiana znaków cudzysłowu wartości oraz znaków ograniczników.

$(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ń.

Optymalizacja pod kątem dużej bazy danych.

$(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ń.

Optymalizacja pod kątem dużej bazy danych.

$(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ń.

Optymalizacja pod kątem dużej bazy danych.

$(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ń.

Optymalizacja pod kątem dużej bazy danych.

$(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
Uwaga:

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.

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.
Uwaga: Kontrola, 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

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.

Uwaga: quoteReplace 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.

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.

Uwaga: 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_
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.

Uwaga:

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_
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;