Tabele Script Inline și fișiere Json în Qlik Sense™

Știați că puteți folosi tabele Script Inline și că puteți citi fișiere JSON în Qlik Sense™?

Cum se pot utiliza tabelele Script Inline în Qlik Sense™?

Toate scripturile de încărcare a aplicației au unul sau altul dintre tabelele inline. Acesta este un tabel inline așa cum se învață în clasele Qlik Sense™:

LOAD * INLINE [
    name, age
    Christof, 49
    Dhruv, 27
];

Aceasta este sintaxa simplă și cea mai frecvent cunoscută. Conținutul câmpului este tăiat automat (fără spații de început/ sfârșit), tipul este detectat automat (număr ca număr, text ca text), iar delimitatorul standard este virgula. Știți că puteți folosi ghilimelele ‘ ‘ sau ” „, dacă delimitatorul (virgula) face parte din textul propriu-zis?

LOAD * INLINE [
  id, age, name
  PDR, 10, „De Redelijkheid, Paul”
  CSW, 20, ‘Schwarz, Christof „Blacky”‘
];

Cu toate acestea, este vorba de mult mai mult decât atât.

  • Puteți modifica ghilimelele de deschidere și închidere ale tabelului inline: în loc de [ ] puteți folosi ` ` sau ” „ (util mai ales dacă o paranteză pătrată face parte din conținutul câmpului).
  • Puteți schimba delimitatorul cu altceva decât virgula (de exemplu, „;” sau „^”).
  • Puteți să lucrați fără linia de antet și să comentați rândurile cu ajutorul unei clauze WHERE.
  • Puteți adăuga imediat coloane calculate imediat după LOAD *

Mai jos, veți observa combinat ceea ce a fost explicat mai sus:

inline:
LOAD
    @1 AS types,
    If(@2 LIKE ‘[*]’, @2, ‘[‘ & @2 & ‘]’) AS fields
INLINE `
    numFields ^ [D],[E]
//    textFields ^ [F],[G]
    textFields ^ [F],[G],[H]
    dateFields ^ J
` (delimiter is ‘^’, no labels)
WHERE NOT @1 LIKE ‘//*’;

Rezultatul este următorul tabel:

Tabelul are „anteturi automate” numite @1, @2 … o linie a fost „comentată” folosind WHERE … deoarece aveam nevoie ca „[” și „]” să facă parte din conținutul câmpului însuși, am schimbat ghilimelele din tabel cu „`” și separatorul de câmp cu „^”. Adăugăm o formulă care manipulează coloana @2 pentru a adăuga „[” și „]” în jurul valorii câmpului, dacă aceasta nu este deja conținută.

Iată și o ultimă observație:

  • Puteți chiar să schimbați tipul de inline-block

De obicei, furnizăm conținut txt (csv), dar parametrul de tip poate fi modificat în XmlSimple sau – cel puțin deja pe Qlik™ Cloud – în Json!

LOAD * INLINE `
[
  { „name”: „Christof”, „age”: 49, „partner”: true },
  { „name”: „Dhruv”, „age”: 27 }
]
` (json);

Cum se pot citi fișiere JSON în Qlik Sense™?

Recent, Qlik™ a adăugat suport pentru scripturi pentru .parquet, dar fișierele .json obișnuite nu sunt încă acceptate oficial, dar le puteți citi, este un pic mai dificil și mai lent pentru fișierele mari – și lipsește un asistent de import, care ar crea blocurile de script.

Notă: Qlik™ poate modifica în orice moment comportamentul descris al importului json.

Hassle începe atunci când faceți clic pe Add data (Adăugare date) în panoul de conexiune. Caseta de dialog pentru dosar nu are un filtru specific pentru fișierele .json:

Alegeți „All files” (Toate fișierele) și apoi selectați fișierul .json. În continuare, veți vedea că wizard-ul încearcă să îl interpreteze ca fiind csv. Fără rost, dar cel puțin veți obține o construcție FROM completată corespunzător. Uitați de restul, deoarece îl vom înlocui imediat.

Trebuie doar să apăsați „Insert script” și apoi puneți LOAD * în fața lui FROM, iar în loc de (txt …) puneți (json):

Până acum nu este prea complicat. Dacă fișierul dvs. .json are un singur obiect rădăcină (sau o matrice rădăcină de obiecte) și veți obține deja cheile de la nivelul superior. Ați terminat deja.

În continuare, vom prezenta mai multe detalii despre parsare.

Obiect JSON simplu

Un singur fișier JSON care conține un singur obiect …

… va avea ca rezultat un singur rând de date

Cheile simple sunt încărcate 1:1

  • Cheile cu valori simple vor fi încărcate 1:1 într-un câmp Qlik Sense™.
  • Array-urile și sub-obiectele vor primi o valoare hash de 16 caractere (va fi explicată mai jos).
Fișier JSON multi-elemente

Dacă fișierul json are mai multe „rânduri” (obiecte într-o matrice exterioară [ … ]), veți obține automat mai multe rânduri în Qlik™.

Array-urile pot avea chei diferite. Cheile comune se vor concatena în același câmp, în timp ce cheile omise într-un anumit „rând” vor fi citite „null” (din păcate, ca text, nu ca Null()) în rezultat.

Rețineți că „arr” primește înapoi o valoare hash pentru că nu este o valoare de bază

Cum să ne ocupăm de sub-obiecte și array-uri? Pentru aceasta trebuie să înțelegem cum se construiește un tabel și cum se construiesc valorile hash.

  • Elementul rădăcină are numele de pseudo-tabel „Root”.
  • Fiecare element dintr-un tablou are un decalaj, începând cu 0, chiar și cel mai îndepărtat tablou. Prin urmare, primul „rând” de mai sus s-ar obține cu „Root/0”.
  • Un obiect sau o matrice se va întoarce ca o valoare hash.
  • Pentru a obține conținutul obiectului sau al tabloului în sine, modificați construcția „table is” pentru a adresa această cheie, de exemplu, în exemplul de mai sus „Root/1/arr”.
  • Dacă este vorba de un array, trebuie să utilizați Pseudo-cheie NoName pentru a obține valoarea și cheia însăși pentru a obține valoarea hash pentru a o lega de părintele său.

Partea bună este că întreaga logică de import poate fi realizată pur și simplu printr-o sub-procedură recursivă: Json înăuntru, tabel(e) de model de date în afară.

Importul de subgrupuri JSON

Acest lucru este în regulă pentru un singur rând, dar dacă aveți un fișier json cu mai multe rânduri, nu doriți să apelați fiecare linie cu „Root/0/arr”, „Root/1/arr”, „Root/2/arr” …

Presupunând un fișier .json cu următorul conținut:

Acum vom introduce o buclă FOR. Rețineți că, dacă o matrice este goală [] sau este nulă, comanda LOAD din interiorul buclei va eșua pentru acel „rând”, astfel încât vom seta ErrorMode la 0 (=continuarea scriptului în caz de eroare) și îl vom reseta la valoarea implicită 1 (=eșec la eroare) după comanda NEXT.

Rezultatul este o frumoasă relație 1:N rezolvată.

Numele de câmp „kidsAge” există, de asemenea, în LOAD-ul interior (alături de „NoName”) și returnează – da – aceeași valoare hash ca în primul LOAD exterior.

Importul sub-obiectelor Json

Ultimul exemplu este pentru un sub-obiect (în loc de sub-array): În mod similar, obțineți hash-uri la nivelul părintelui și conținutul propriu-zis atunci când îl abordați corect cu poziția „table is”. O buclă FOR va ușura din nou lucrurile, plus ceva mai multă logică.

În acest fișier .json avem un rând în care „kids” este nul, iar sub-obiectul nu conține întotdeauna cheia „happy”.

Nu ne mai putem baza pe auto-concatenarea automată pentru subobiecte (rândul 4 ar ajunge într-un tabel diferit de rândurile 1 și 2). De asemenea, fără toleranță la erori, importul celui de-al treilea rând ar eșua. Așa că optăm pentru acest script, în care creăm un tabel gol pentru „kids” și apoi concatenăm explicit în el. Trebuie să folosim funcționalitatea LOAD *, deoarece structura sub-obiectelor nu este identică în toată matricea principală. (Presupunând că ați setat singur vFile-ul).

Vom obține acum două tabele care sunt legate 1:1 (sau 1:1 sau 0, pentru a fi mai precis).

Notă: LOAD * interior va returna „kids” ca și câmp, conținând hash-ul care face legătura cu primul tabel.
Rezultatul poate fi utilizat cu ușurință acum în Client.

Din păcate, poate deveni dificil, dar vom reveni foarte curând cu un articol, în carae vă vom arăta că toate etapele manuale (buclă, aliasing de câmp, concatenare) pot fi rezolvate cu un SUB recursiv.

Sperăm totuși că va fi adăugat de către Qlik™ și un wizard, care să facă această analiză la import, așa cum o avem pentru obiectele JSON primite prin intermediul conexiunii REST sau, la fel, așa cum sunt analizate fișierele XML.

Concluzie

Plusuri

  • O surpriză și deja un bun punct de plecare pentru a importa .json în mod nativ
  • Totul poate fi importat cu ajutorul directivei „table is”

Minusuri

  • Destul de multă logică de script necesară pentru a analiza obiectele JSON imbricate
  • Poate fi lent
  • Încă nedocumentat și se pot schimba în viitor

Sursă de preluare articol:
https://www.linkedin.com/pulse/qlik-sense-script-inline-tables-did-you-know-christof-schwarz/?utm_source=share&utm_medium=member_android&utm_campaign=share_via
https://www.linkedin.com/pulse/omg-i-can-read-json-qlik-sense-christof-schwarz/?utm_source=share&utm_medium=member_android&utm_campaign=share_via

Alte articole de pe blogul nostru pe această temă:
https://qqinfo.ro/parseaza-cu-usurinta-datele-json-stocate-intr-un-camp-cu-from_field/
https://qqinfo.ro/versiunea-qlik-sense-client-managed-din-august-2023/

Pentru informații despre Qlik™, vă rugăm să vizitați pagina: qlik.com.
Pentru soluții specifice și specializate de la QQinfo, vă rugăm accesați pagina: QQsolutions.
Pentru a fi în contact cu ultimele noutăți în domeniu, soluții inedite explicate, dar și cu perspectivele noastre personale în ceea ce privește lumea managementului, a datelor și a analiticelor, vă recomandăm QQblog-ul !