Berekende kolommen in de database van Mercator

0000002651     -      09-08-2016

 

De versies van Mercator Majuro hoger dan 23/07/2016 herkennen en beheren de berekende kolommen in volgende tabellen:

  • alle informatiebestandstabellen: CLI, FOU, STOCK, GEN, ANA, DEST, ...
  • PIEDS_V en LIGNES_V
  • PIEDS_A en LIGNES_A
  • PIEDS_D en LIGNES_D
  • PIEDS_C en LIGNES_C
  • ACTIONS

Meervoudige interesse in berekende kolommen via SQL:

  • Berekende gebieden indexeren alvorens de where-clausulles te optimaliseren die bij de berekening opgeroepen worden.
  • Het aantal te lezen toegangen verminderen, tenzij anders vermeld, een berekende kolom niet materialiseren in de database, maar virtueel laten bestaan.
  • De SQL-queries vereenvoudigen die telkens gebruikt worden bij eenzelfde berekeningen.

Een berekende kolom kan aangemaakt worden via de client-tools van SQL Server:

In TSQL, kan de creatie van een berekende kolom als volgt gebeuren:

  • Virtuele kolom:
    ALTER TABLE PIEDS_V ADD JOU_PIECE as (rtrim(JOURNAL)+' '+ltrim(str(PIECE)))
     
  • Persistente kolom
    ALTER TABLE PIEDS_V ADD JOU_PIECE as (rtrim(JOURNAL)+' '+ltrim(str(PIECE))) PERSISTED

Zonder volledig te zjin, zijn hier enkele overwegingen voor berekende kolommen:

  • Om te kunnen indexeren moet een berekende kolom persistent zijn.
  • Een persistente kolom mag geen bepalende expressie bevatten (geen toegang tot andere tafels, andere tabelgegevens, functie GetDate(),...)
  • Indien een persistente kolom gebruikt wordt in functie van de gebruiker, moet deze de optie WITH SCHEMABINDING bevatten.
  • Bij het aanmaken van een expressie, moet men rekening houden met alle mogelijke gevallen en deze voorkomen, zoals het delen door nul. Bijvoorbeeld voor de berekende kolom S_MARGE in de tabel STOCK, moet men nagaan of de deler (S_DPA) niet nul is: case when s_dpa=0 then -1 else s_prix_ht/s_dpa end

In Mercator, worden kolommen (in LinesEditor) of in textboxen altijd weergegeven als read-only. Je moet ook goed weten dat de waarde wordt berekend door SQL Server en nooit door de interface van Mercator. Er is dus geen enkele refresh van deze waarden tenzij de gegevens opnieuw ingelezen worden.

De berekende kolommen worden niet ondersteund door Legacy en Aruba van Mercator. Ze kunnen dus NIET gebruikt worden in het kader van scenario 2.