Synthetische sleutels

Wanneer twee of meer interne tabellen twee of meer velden gemeenschappelijk hebben, duidt dit op een samengestelde-sleutelrelatie. In QlikView worden deze afgehandeld door automatisch synthetische sleutels te maken. Deze sleutels zijn anonieme velden die alle voorkomende combinaties van de samengestelde sleutel vertegenwoordigen.

Als u een waarschuwing ontvangt over synthetische sleutels bij het laden van gegevens, wordt aanbevolen om de gegevensstructuur te controleren in de tabelweergave. U moet uzelf afvragen of het gegevensmodel al dan niet correct is. Soms is dat wel het geval, maar vaak ook wordt de synthetische sleutel veroorzaakt door een fout in het script.

Meerdere synthetische sleutels zijn vaak een symptoom van een onjuist gegevensmodel, maar niet altijd. Als u echter synthetische sleutels hebt die zijn gebaseerd op andere synthetische sleutels wijst dat duidelijk op een onjuist gegevensmodel.

Waarschuwing: Als het aantal synthetische sleutels toeneemt, afhankelijk van de hoeveelheid gegevens, tabelstructuur en andere factoren, gaat QlikView hier al dan niet op elegante wijze mee om en wordt mogelijk buitensporig veel tijd en/of geheugen verspild. In een dergelijk geval moet u uw script bewerken en alle synthetische sleutels verwijderen.

Omgaan met synthetische sleutels

Als u synthetische sleutels moet vermijden, kunt u dit op een aantal verschillende manieren oplossen in het load-script:

  • Controleer of alleen velden waarmee twee tabellen logisch worden gekoppeld worden gebruikt als sleutels.

    • Velden als "Commentaar", "Opmerking" en "Beschrijving" kunnen in meerdere tabellen voorkomen zonder verband met elkaar te houden en dienen derhalve niet te worden gebruikt als sleutels.
    • Velden als “Datum”, “Bedrijf” en “Naam” bestaat mogelijk in verschillende tabellen en hebben identieke waarden, maar hebben toch verschillende rollen (Besteldatum/Verzenddatum, Klantbedrijf/Leveranciersbedrijf). In dergelijke gevallen mogen zij niet worden gebruikt als sleutels.
  • Zorg ervoor dat geen redundante velden worden gebruikt en dat alleen de noodzakelijke velden zijn verbonden. Als bijvoorbeeld een datum als sleutel wordt gebruikt, zorg er dan voor dat bijvoorbeeld year, month of day_of_month van dezelfde datum uit niet meer dan één interne tabel wordt geladen.

  • Maak zo nodig uw eigen niet-samengestelde sleutels, meestal door tekenreeksen samen te voegen binnen een AutoNumber-scriptfunctie.