Naar hoofdinhoud gaan

Een query ontwerpen

Doel​

Een query bouwen zonder JSON te schrijven: kies de tabel, koppel de tabellen die eraan gerelateerd zijn, kies de kolommen die ze teruggeeft, verfijn haar met voorwaarden en — als het antwoord een getal is in plaats van een lijst — groepeer en meet haar.

Waar je hem vindt​

Open je oplossing, kies Opgeslagen query's en dan Nieuw — of selecteer een query en kies Bewerken. De ontwerper vult de hele pagina in plaats van van de zijkant in te schuiven, omdat een query een eigen structuur heeft: tabellen gekoppeld aan tabellen, een voorwaardenboom, een geordende kolommenlijst, metingen. In een smal deelvenster loopt één voorwaarde over vier regels door en ziet ze er niet meer uit als één voorwaarde.

Kies Sluiten om terug te gaan naar de lijst. Er wordt niets opgeslagen totdat je Opslaan kiest.

De drie tabbladen​

Het zijn drie weergaven van één query, geen drie editors. Wat je op het ene wijzigt, tonen de andere ook — dus ze kunnen het nooit oneens zijn.

TabbladWaarvoor het dient
EenvoudigDe dagelijkse query: een tabel, de kolommen, een filter, een sortering, een maximum aantal rijen.
GeavanceerdAlles, plus gerelateerde tabellen, groeperen met metingen, en de opties.
JSONHet document zelf, voor alles wat het formulier niet tekent.
ResultatenWat de query teruggeeft, als tabel. Dit tabblad is een weergave van het antwoord, niet van de query.

Een query die al gerelateerde tabellen, groepering of opties gebruikt, opent op Geavanceerd, zodat niets van wat erin staat voor je verborgen is. Schakel je zo'n query over naar Eenvoudig, dan zegt het formulier wat het niet toont — en laat het dat ongemoeid.

Stappen​

1. Kies de tabel​

Selecteer de knop Tabel en zoek. Al het andere in de query wordt gebouwd uit deze tabel en de tabellen die eraan zijn gekoppeld.

De tabel wijzigen wist de rest, en dat is bewust: kolommen, voorwaarden en metingen noemen allemaal velden van de oude tabel, en ze behouden zou een query opleveren die wordt opgeslagen en daarna weigert te draaien, met een veld als reden dat je gewoon op het scherm ziet staan.

2. Voeg gerelateerde tabellen toe (Geavanceerd)​

Kies Gerelateerde tabel toevoegen. De lijst komt uit de relaties die je omgeving al heeft, dus je typt nooit een veldnaam. Is er nog niets aan je tabel gerelateerd, dan opent de lijst en zegt ze dat — een gerelateerde tabel komt van een zoekveldkolom, dus voeg er een toe op een van beide tabellen en ze verschijnt hier.

  • Eén gerelateerd record — een zoekveld volgen, zoals het account van een deal. Dit is de gebruikelijke koppeling en die is veilig.
  • Veel gerelateerde records — kan rijen herhalen — de andere kant op, zoals de deals van een account. Dit geeft de bovenliggende rij één keer per onderliggend record terug, en dat is wat een totaal stilletjes verdubbelt. Gebruik het als je het echt bedoelt, en zie Getallen die te groot lijken hieronder.

Elke gekoppelde tabel krijgt:

  • Een naam (de alias). De kolommen ervan heten overal in de query alias.column. Je kunt hem hernoemen; de queryontwerper waarschuwt je als iets nog de oude naam noemt.
  • Een koppelingsinstelling — Rijen zonder overeenkomst behouden (de standaard) of Alleen overeenkomende rijen. De standaard is de veilige: met Alleen overeenkomende rijen verdwijnt een deal zonder account volledig uit de resultaten, en niets op het scherm verbindt die verdwijning met de koppeling.
  • Eigen voorwaarden, geopend met de pijl aan het begin van de rij. Die verfijnen de gerelateerde tabel binnen de koppeling, zodat rijen zonder overeenkomst nog steeds worden behouden als de koppeling is ingesteld om ze te behouden. Dezelfde voorwaarde in plaats daarvan in het hoofdfilter zetten, zou die rijen weggooien.

Een query kan maximaal acht tabellen koppelen, tot drie niveaus diep genest.

3. Kies de kolommen​

Het linkerdeelvenster toont elke kolom die de query kan noemen — die van de tabel zelf en die van elke gekoppelde tabel, gegroepeerd per tabel en gefilterd terwijl je typt. Vink er een aan en ze verschijnt rechts, en dat is wat de query teruggeeft, in volgorde; de × verwijdert er een.

De volgorde doet ertoe — het is de volgorde waarin de kolommen terugkomen, en de volgorde waarin een rapport ze afdrukt. Sleep een rij aan de greep om haar te verplaatsen, hetzelfde gebaar als bij de waarden van een keuzeset of de navigatie van een app. Zonder muis: zet de focus op de greep, druk op Space om de rij op te pakken, op de pijltoetsen om haar te verplaatsen en nogmaals op Space om haar neer te zetten.

Laat het rechterdeelvenster leeg om de eigen kolommen van de tabel terug te geven.

Je hoeft niet te weten bij welke tabel een kolom hoort. Vink "Account · Industry" aan en de query zet haar voor je onder de accountkoppeling.

4. Verfijn haar​

De sectie Filter is dezelfde EN/OF-voorwaardenbouwer als bij Geavanceerd zoeken of het filter van een weergave, en biedt nu elke kolom in de query aan — die van de gekoppelde tabellen en die van de tabel zelf.

Elke voorwaarde is één rij: veld, operator, waarde en een × om haar te verwijderen.

Is een van accepteert meerdere waarden tegelijk. Bij een keuzekolom opent een doorzoekbare lijst die je kunt aanvinken; bij een tekst- of getalkolom typ je een waarde en druk je op Enter om haar toe te voegen, en elke waarde wordt een label dat je kunt verwijderen. Dit is één voorwaarde met meerdere waarden, niet meerdere voorwaarden die je met de hand met OF moet combineren.

Is ten minste en Is ten hoogste bestaan omdat "ten minste 5" schrijven als "groter dan 4" alleen klopt bij hele getallen, en stilletjes fout is bij een decimaal getal of een datum.

5. Groeperen en meten (Geavanceerd)​

Vink Groepen teruggeven in plaats van records aan als het antwoord een getal is in plaats van een lijst — daar worden een grafiek en een KPI-tegel uit getekend.

  • Metingen — wat er moet worden berekend. Aantal heeft geen veld nodig (het telt records), maar accepteert er wel een (dan telt het de rijen waarin dat veld is ingevuld). Voor Som en Gemiddelde worden alleen numerieke kolommen aangeboden. Elke meting heeft een korte naam; onder die naam komt het resultaat terug, en daaraan koppelt een grafiek.
  • Groeperen op — maximaal twee sleutels. Laat het leeg voor één totaal over de hele tabel. Een datumkolom biedt ook een periode aan — per dag, week, maand, kwartaal of jaar.
  • Voorwaarden op de metingen — zie hieronder.

6. Voorwaarden op de metingen (Geavanceerd)​

Dit is de vraag die een filter niet kan stellen.

Een filter bepaalt welke records in een groep komen. Een voorwaarde op een meting bepaalt welke groepen er uit komen. "Klanten die meer dan tien keer hebben besteld" kan helemaal niet als filter worden geschreven, omdat geen enkele bestelling weet hoeveel bestellingen haar klant heeft geplaatst.

Dus: groepeer op klant, meet Count als orders en voeg daarna een voorwaarde toe — orders is ten minste 10.

Voorwaarden kunnen alleen metingen noemen die deze query berekent. Merk je dat je hier een gewone kolom wilt vergelijken, dan hoort dat in het filter.

7. Sorteren en beperken​

Sorteer op elke kolom die de query teruggeeft. Een gegroepeerde query heeft geen kolommen om op te sorteren — haar rijen zijn groepen — dus biedt ze in plaats daarvan de groeperingssleutels en de namen van de metingen aan, de enige namen die ze heeft.

Ten hoogste teruggeven begrenst het aantal rijen, of groepen. Aflopend sorteren op een meting en begrenzen op vijf is de query "top vijf klanten".

8. Opties (Geavanceerd)​

  • Dubbele rijen verwijderen — doet er alleen toe bij een koppeling met veel records per rij. Het corrigeert geen totaal: een gegroepeerde query telt de herhaalde rijen nog steeds, omdat dubbele rijen verwijderen en tellen verschillende vragen zijn.
  • De tekst van zoekveldkolommen opnemen — standaard aan, omdat een kolom met record-id's nergens een weergave van is. Zet het uit voor een export die op id is gebaseerd.
  • Tijdzone — gebruikt voor datumperiodes. Zonder tijdzone worden ze in UTC berekend, dus een record dat om negen uur 's avonds is gemaakt, valt op de volgende dag, en een dagelijkse grafiek is elke dag een fractie fout op een manier die niemand opmerkt.

9. Opslaan en daarna voorbeeld bekijken​

Opslaan controleert de query op drie manieren: dat het een goed gevormd document is, dat het een geldige query is, en dat ze hier daadwerkelijk zou draaien — elk veld, elke koppeling, groepering en meting opgelost tegen de echte tabellen van je omgeving.

Voorbeeld voert de query uit en opent het tabblad Resultaten, dat laat zien wat er terugkwam, als tabel: één kolom per kolom die de query teruggeeft, onder de weergavenaam, in de volgorde waarin je ze hebt gezet. Zoekveldkolommen tonen de naam van het record, niet de id die erachter is opgeslagen.

  • Een recordquery wordt gepagineerd, 25 rijen tegelijk, met de paginering onder de tabel en het totaal erboven. Een gegroepeerde query wordt niet gepagineerd — ze geeft elke groep terug die ze vindt — dus haar tabel is het hele antwoord.
  • Het voert de query uit zoals opgeslagen, met je eigen machtigingen. Sla eerst op: niet-opgeslagen wijzigingen worden niet meegenomen, en het tabblad zegt dat boven de tabel. Een query die je nooit hebt opgeslagen, heeft niets opgeslagen om uit te voeren, en Voorbeeld is pas beschikbaar als je haar één keer hebt opgeslagen.

Het tabblad JSON​

De ontwerper tekent bijna de hele querytaal, en het tabblad JSON is de rest — paginering, en alles wat een met de hand geschreven of door AI gegenereerde query gebruikt waarvoor het formulier geen besturingselement heeft. Het is het parsware-query@1-schema, en hetzelfde document dat je een assistent zou geven die je vraagt een query voor je te schrijven.

Wat het formulier niet tekent, wordt precies zo bewaard als het is terwijl je al het andere bewerkt. Een ontwerper die stilletjes een deel van je query liet vallen, zou de slechtst denkbare manier zijn om te ontdekken dat die er een had.

Getallen die te groot lijken​

Een koppeling in de richting "veel gerelateerde records" herhaalt de bovenliggende rij één keer per overeenkomst, en totalen tellen de herhalingen mee: een account met vijf deals wordt vijf keer geteld.

Een zoekveld volgen — de gebruikelijke richting — kan dit niet doen. Lijkt een totaal opgeblazen, controleer dan of een koppeling veel gerelateerde records zegt, en meet dan in plaats daarvan de onderliggende tabel, of stel de vraag andersom.

Problemen oplossen​

  • "This is not valid JSON, so the designer cannot show it." — in het tabblad JSON ontbreekt een komma of haakje. Herstel het daar; het formulier kan geen document tonen dat het niet kan lezen, en een leeg document tonen zou overschrijven wat je hebt getypt zodra je een besturingselement aanraakt.
  • "These are named by the query but no longer exist in it." — je hebt een gerelateerde tabel verwijderd of hernoemd, en iets noemt haar nog. Verwijder die verwijzingen, of voeg de tabel onder dezelfde naam weer toe.
  • "Unknown field …" bij het opslaan — het veld hoort bij een gekoppelde tabel en heeft de naam van de koppeling ervoor nodig, of de koppeling is verwijderd.
  • Een voorwaarde op een meting wordt geweigerd — ze noemt iets wat geen meting van deze query is. Hernoem haar zodat ze overeenkomt, of verplaats de voorwaarde naar het filter als ze over een kolom gaat.
  • Een gerelateerde tabel toevoegen toont niets om te kiezen — er is nog niets aan deze tabel gerelateerd, en dat zegt de lijst als ze opent. Een gerelateerde tabel komt van een zoekveldkolom: zie Een relatie tussen tabellen maken.
  • "This environment's relationships could not be loaded" — de ontwerper kon de relaties van de omgeving niet lezen, dus hij heeft geen koppelingen om aan te bieden. Dit is niet iets wat de query verkeerd doet; sluit de ontwerper en open hem opnieuw.

Gerelateerde scenario's​