ACID-transacties
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerEen role-playing dimension is één fysieke dimensietabel waar een feittabel meerdere keren naar verwijst, elke keer in een andere rol via een eigen vreemde sleutel. Denk aan één datumtabel die tegelijk besteldatum, verzenddatum en leverdatum speelt.
Een role-playing dimension is één fysieke dimensietabel waar een feittabel meerdere keren naar verwijst, telkens in een andere rol. Elke rol heeft zijn eigen vreemde sleutel in de feittabel. Het klassieke geval is een datumtabel: één order kan een besteldatum, een verzenddatum en een leverdatum hebben, en alle drie wijzen ze naar dezelfde datumdimensie.
De term komt uit de Kimball-methode voor dimensioneel modelleren. Kimball omschrijft het als een dimensie die meerdere keren aangesproken wordt in een feittabel, waarbij elke verwijzing naar een logisch aparte rol wijst.
Vergelijk het met een acteur die in hetzelfde stuk drie personages speelt. Er is maar één acteur, maar op elk moment weet je welke rol hij invult. Zo hou je één zuivere datumtabel in plaats van drie bijna identieke kopieën.
Je zou voor elke datum een aparte tabel kunnen aanmaken, maar dan onderhoud je dezelfde feestdagen, boekjaren en weeknummers op drie plaatsen. Eén gedeelde datumtabel is een vorm van conformed dimension: dezelfde definitie geldt overal, dus "vorige maand" betekent hetzelfde of je nu op besteldatum of op leverdatum filtert. Welke rol de tabel invult, hangt af van welke sleutelkolom in de feittabel je gebruikt om te joinen.
Neem een feittabel Orders met drie datumsleutels: BesteldatumId, VerzenddatumId en LeverdatumId. Alle drie verwijzen ze naar dezelfde tabel Datum.
Vraag je "hoeveel omzet per besteldag?", dan join je op BesteldatumId.
Vraag je "hoeveel pakketten per verzendweek?", dan join je op VerzenddatumId.
Vraag je "gemiddelde tijd tussen bestellen en leveren?", dan gebruik je beide sleutels tegelijk.
Datums zijn het bekendste geval, maar het patroon geldt breder. Een feittabel Vluchten verwijst twee keer naar dezelfde luchthaventabel: één keer als vertrekluchthaven, één keer als aankomstluchthaven.
In een data warehouse of in SQL hou je één fysieke datumtabel en maak je per rol een aparte database-view of alias erbovenop: een view Datum, een view Verzenddatum, een view Leverdatum. Elke vreemde sleutel joint op zijn eigen view, zodat de rollen los van elkaar staan. Geef de kolommen in elke view sprekende namen (Verzendjaar in plaats van gewoon Jaar), anders weet niemand in een rapporttitel nog welke datum je bekijkt.
In Power BI heb je twee opties:
Meerdere relaties naar dezelfde tabel. Je legt drie relaties van Orders naar Datum, maar Power BI staat er maar één actief toe. De andere zet je op inactief. Per maat activeer je de juiste relatie met de DAX-functie USERELATIONSHIP, bijvoorbeeld een maat Omzet verzonden die de verzenddatum-relatie inschakelt. Handig als één rol overheerst, maar je krijgt snel veel maten en een drukke veldenlijst.
De datumtabel kopiëren per rol. Je maakt een Datum-, een Verzenddatum- en een Leverdatumtabel, elk met een eigen actieve relatie, via een verwijzende query in Power Query of een berekende tabel in DAX. Zo kan je in één visual tegelijk op besteldatum en verzenddatum filteren, zonder USERELATIONSHIP. Dat kost wat extra opslag, maar dimensietabellen zijn klein tegenover feittabellen, dus dat weegt bijna nooit door. Microsoft raadt deze aanpak aan zodra je rollen tegelijk moet filteren.
Een inactieve relatie propageert geen row-level security, ook niet met USERELATIONSHIP. Heb je RLS op je datumtabel, dan is de gekopieerde-tabel-aanpak veiliger.
Met één actieve relatie kan je niet tegelijk op twee rollen filteren. Wil je besteldatum tegen verzenddatum uitzetten in dezelfde grafiek, dan heb je aparte tabellen nodig.
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerEen API of Application Programming Interface is de afgesproken manier waarop software met andere software praat. Je stuurt een verzoek in ee...
Lees meerBatchverwerking verwerkt data in blokken op vaste momenten, bijvoorbeeld elk uur of elke nacht. Het is minder direct dan streaming, maar vaa...
Lees meerEen berekeningsgroep past één DAX-patroon toe op elke meting in je model. Schrijf YTD, MTD en YoY% één keer in plaats van voor elke meting a...
Lees meerEen bridge table of brugtabel is een tussentabel die een veel-op-veel-relatie in een ster-schema oplost, iets wat een gewone vreemde sleutel...
Lees meer
Zeven nieuwe Data Panda-connectors uit juni 2026, met concrete toepassingen voor rapportering, voorraad, finance, ticketing, planning en ope...
Nieuw in Microsoft Fabric? Zo verschillen een lakehouse en een warehouse, in mensentaal: wat ze doen, wanneer je wat kiest en wanneer je bei...