Eigen database-views gebruiken voor SQL en BI-tools

Go to English version

Invantive SQL biedt vanaf release 22.0.14 de mogelijkheid om database-views te definiëren en gebruiken. Database-views zijn gericht op eindgebruikers van Invantive SQL en BI-tools.

Dit artikel toont hoe database-views gemaakt en gebruikt kunnen worden, en vergelijkt ze met de views die Invantive meelevert op drivers.

Aanmaken Database-view

Een database-view kan aangemaakt worden met het create [or replace] [force] view-statement.

De volgende database-view legt een relatie tussen de twee dagboektabellen in Exact Online, waarbij uit de XML-tabel het wel/niet matchen toegevoegd wordt aan alle kolommen uit de dagboeken uit de REST-tabel:

create or replace force view testjoin
as
select coalesce(t1.code, t2.code_attr) code
,      t2.OWNBANKACCOUNT_GLPAYMENTINTRANSIT_MATCHING_ATTR
,      t1.Description
from   ExactOnlineREST..journals@eol t1
full
outer
join   ExactOnlineXML..journals@eol t2
on     t1.code = t2.code_attr

Inhoud View Opvragen

De nieuwe view(s) worden opgeslagen voor de duur van de sessie in het data dictionary onder de catalogus DataDictionary en het schema Custom. De volledige naam is daarom DataDictionary.Custom.TESTJOIN.

Bij het maken, aanpassen en verwijderen van views hoeft niet opgegeven te worden dat de view in het data dictionary staat; er is tenslotte maar één plek waar hij kan staan. Bij het opvragen van een query is het wel nodig om de herkomst op te geven via de alias van de DataDictionary driver.

De inhoud van de view kan dus eenvoudig opgevraagd worden via een query, zoals:

select *
from   testjoin@DataDictionary

Er is op dit moment geen mogelijkheid om de viewdefinities blijvend vast te leggen in de database gedefinieerd via de DataDictionaryConnectionString eigenschap van een Invantive database. Het is wel mogelijk om bij het openen van de database de viewdefinities opnieuw te laden, bijvoorbeeld op Invantive Cloud met de On Startup SQL.

De definitie van een view kan opgevraagd worden met de toets F4 als de cursor op de viewnaam staat in het Invantive Query Tool, maar is ook altijd beschikbaar via de data dictionary view SystemViews:

select PROVIDER_NAME
,      Name
,      QUERY
from   SYSTEMVIEWS@DataDictionary
where  PROVIDER_NAME = 'DataDictionary'

met als resultaat:

View om over tabelfuncties te itereren

Veel platformen bieden tabelfuncties om toegang te krijgen tot hun gegevens. Deze tabelfuncties vereisen vaak een of meer vereiste parameters, waardoor iteratie over een reeks waarden nodig is om de volledige gegevensset op te halen.

Tabelfuncties met een of meer vereiste parameters zijn niet beschikbaar voor OData / Power BI.

Een view kan het proces van het ophalen van alle gegevens vereenvoudigen. In Teamleader Focus bijvoorbeeld vereist het ophalen van adressen voor contactpersonen één evaluatie van de tabelfunctie voor contactadressen. Dit kan worden bereikt met behulp van een view, zoals hieronder wordt gedemonstreerd:

select d.*
,      p.* prefix with 'user_'
from   Teamleader.V2.Contacts p
join   Teamleader.V2.ContactAddressesByContactId(p.id) d

Hou er rekening mee dat het uitlezen van dergelijke views kan leiden tot zeer grote aantallen API-oproepen. Filters die gebruik maken van een where clausule worden meestal geëvalueerd voordat de tabelfunctie wordt benaderd, dus het is om prestatieredenen aan te raden om te filteren op kolomwaarden uit de sturende tabel (Contacten in het bovenstaande voorbeeld).

View met meerdere datacontainers

Database-views voegen pas echt waarde toe als een query over meerdere datacontainers heen gegevens combineert. Dat bespaart veel handmatig werk. De volgende query vergelijkt de relaties in Exact Online administraties met ActiveCampaign:

create or replace force view compare_companies_across_data_containers_v
as
select coalesce(t1.name, t2.name) 
       name
       label 'Relatienaam'
,      t1.code 
       exact_online_code
       label 'Exact Online Relatienummer'
,      t2.id 
       active_campaign_id
       label 'ActiveCampaign ID'
from   AccountsIncremental@eol t1
full
outer
join   Accounts@ac t2
on     t2.name = t1.name

select *
from   COMPARE_COMPANIES_ACROSS_DATA_CONTAINERS_V@DataDictionary

met als resultaat een verschillenlijst waarbij per relatienaam getoond wordt onder welk nummer die in Exact Online en/of ActiveCampaign staat:

View met meerdere landen of abonnementen van Exact Online

Exact Online heeft een aparte omgeving per land; de divisie 123123 is een andere administratie in België dan in Nederland. Met een view is het mogelijk om alle administraties van meerdere landen in 1x te verwerken, bijvoorbeeld in Power BI. Maak per Exact Online abonnement een datacontainer binnen een database, bijvoorbeeld met de alias eolnl en eolbe. De volgende query is een voorbeeld van het samenvoegen van de relaties in Nederland met België:

create or replace force view eolall_accounts_r
as
select *
from   AccountsIncremental@eolnl
--
-- Union all is sneller dan union omdat het ontdubbelen
-- achterwege kan blijven door unieke waardes voor de kolom Id
-- met het GUID data type.
--
union all
select *
from   AccountsIncremental@eolbe

select *
from   eolall_accounts_r@DataDictionary

Deze view kan in de startup SQL gezet worden.

Views met fouten

De view wordt tijdens het aanmaken gecontroleerd op syntactische juistheid, maar niet uitgevoerd. Zelfs SQL-statements met syntactische fouten kunnen aangemaakt worden door de force optie mee te geven. Op het moment van selectie worden zowel de syntax als de geldigheid in de huidig actieve database gecontroleerd.

Views gebruiken in Power BI

De database-views kunnen - net zoals de driver-views - gebruikt worden in Power BI, Power Query en Azure Data Factory. Het advies is om de viewdefinitie op te nemen in de On Startup SQL van de database.

Na het schonen van de cache zoals hieronder beschreven verschijnt de view automatisch in de lijst van tabellen.

Het definiëren van meer dan enkele tientallen database-views in de On Startup SQL vertraagt het openen van de database meetbaar.

Nieuwe viewversies in Power BI

Als een view vervangen wordt door een andere versie of uitgebreid met nieuwe views, zal via Invantive Bridge Online en Invantive App Online in het algemeen de nieuwe versie niet of maar deels zichtbaar zijn. Het kan een week duren vooraleer de nieuwe definities zichtbaar worden in Power BI, terwijl ze in de SQL Editor van Invantive Cloud meteen zichtbaar zijn.

Invantive Bridge Online en Invantive App Online werken bijzonder agressief met zogenaamde “caching” om de prestaties ook bij grote volumes zo goed mogelijk te houden.

Deze caching kan gereset worden zodat het laden van de nieuwe versie van de view geforceerd wordt. Bij het opnieuw instellen van de caches worden alle cache-elementen verwijderd, inclusief de oude versies van incrementele tabellen zoals de *Incremental-tabellen op Exact Online. Bij het laden zal dit de eerste keer leiden tot merkbare vertraging; daarna zullen de prestaties weer vergelijkbaar met de situatie voorheen zijn.

Het opnieuw instellen van de Invantive Bridge Online cache gebeurt door de volgende stappen uit te voeren:

  • Kijk welke Cloud-gebruiker gebruikt wordt in Power BI of PowerBI.com bij de credentials.
  • Meld met deze Cloud-gebruiker aan op Bridge Online.
  • Open het menu rechtsboven.
  • Kies “Cache resetten” zoals zichtbaar in onderstaande afbeelding.
  • Laad in Power BI de lijst van beschikbare tabellen.
  • Verschijnt de nieuwe definitie niet?
  • Controleer dan in Bridge Online Monitoring of het vinkje ontbreekt bij “Uit Cache” voor het laadverzoek. Als “Uit Cache” aangevinkt is, dan is blijkbaar cache resetten niet goed gelukt. Probeer nogmaals de cache te resetten.

Driver-views

Database-views complementeren de vaste (meegeleverde) views voor een specifieke driver aan met nieuwe mogelijkheden. Deze driver-views kunnen alleen data combineren uit tabellen die horen bij de specifieke driver. Driver-views vereenvoudigen het gebruik van het platform waar de driver voor bedoeld is, maar kunnen niet gewijzigd worden.

De verschillen tussen database-views en driver-views zijn te vinden in onderstaande tabel:

Database-view Driver-view
Bij elke installatie beschikbaar Nee Ja
Aanpasbaar door gebruiker Ja Nee
Combineren tabellen meerdere datacontainers Ja Nee
Views gebruiken om centraal te filteren voor Teamleader en Power BI
Startup SQL instelbaar voor alle Invantive Cloud-gebruikers
Activeren nieuwe versie view in Bridge Online
Wat zijn tabelfuncties en tabelfunctieparameters?
Snel en met minder API-calls Exact Online uitlezen met de incrementele "sync API"-tabellen
Teamleader Focus: decision maker
Itgeneor229 op ExactOnlineREST.PurchaseEntry.PurchaseEntryLines
SnelStart custom view niet in OData data set
Custom View niet zichtbaar in metadata
Persoonsgegevens uit Easyflex API ophalen
Versnellen rapport voorraadanalyse Exact Online
Lange Laadtijden DealPhaseHistories Tabel
Query op SQL view geeft itgendid300
Fout: itgensql056 bij opvragen uren en projecten
Itgenoda061 "The 'FromPeriod' parameter must be specified for filtering" bij Power BI-download Visma.net van ProjectTransactions
Foutmelding itgensql056/itgenboe070/itgenboe073 query over ontbrekende comma of ";"
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Vernieuwprobleem: nieuwe versie view lijkt niet door te komen in PowerBI.com
Vernieuwprobleem: nieuwe versie view lijkt niet door te komen in PowerBI.com
OData parameters meegeven vanuit Azure Data Factory
EmployeeLeaveBalances exporteren
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Mogelijkheid meerdere views op één databron op Invantive
Nieuwe Tix (Tixly) views worden niet zichtbaar
Sales forecast / verkoopprognose tabel benaderen
View Twinfield.Views.GeneralLedgerAccountMappingAccounts@tfd laadt alle records die vallen onder licentie
Dynamische filteren op datum in Startup SQL
Best practice om Budget en ReportingBalance te koppelen in Tableau?
Easyflex Data validatie ds_bi_declaratieregels
Best practice om Budget en ReportingBalance te koppelen in Tableau?
Zware performance issues Simplicate (hours)
Grote performancewinst bij real-time queries op gefilterde views met tabelfuncties
Data uit meerdere SnelStart-administraties real-time consolideren
Foutmelding itgenboe072: Can not add column ‘caWerkvoorbereider’ to ‘Bouw7.Project.Projects’
Foutmelding itgenboe072: Can not add column ‘caWerkvoorbereider’ to ‘Bouw7.Project.Projects’
Parameter meegeven aan Easyflex-tabelfunctie via Azure Data Factory
Waar vind ik journaalposten-tabel op Easyflex?
Waar vind ik journaalposten-tabel op Easyflex?
Itgensgr046 melding bij Aanroep Robaws data
Itgendid357 A value for the parameter 'creditnote_id' is required on table 'Teamleader.V1.creditnote_items'
Startup SQL filter werkt niet
ProjectAssigmentBudget / Waarde capaciteitsplanning
Nmbrs Power BI aantal tabellen
Tabel PurchaseInvoiceLinesByPurchaseInvoiceId ontbreekt in OData-feed
Custom view in Hubspot niet zichtbaar
Custom view in Hubspot niet zichtbaar
Tabel DataDictionary.Custom.GENERALLEDGERBALANCESALL bestaat niet meer
Niet alle Nmbrs-tabellen beschreven zichtbaar in Power BI
Invantive cloud & monitoring enorm traag
Selecteren meerdere databases (SnelStart)
Tabel voor PowerQuery in Excel vanuit Exact Online nodig met: aantal herinneringen, laatste herinnering en notities
Hoe koppel ik zelf nieuwe API's aan Invantive SQL/Power BI en alle aangesloten platformen?
Documentatie Datamodel Snelstart komt niet overeen met (OAuth) tabellen in Power BI