Een bridge is bedoeld om entiteiten met een hiërarchie te kunnen combineren met feiten. In de bridge staan alle hiërarchische relaties van records. Het fungeert letterlijk als een brug tussen het feit en de dimensie. In Datastreams hebben bridge tabellen voor een hiërarchie de prefix "brh" en eindigt de naam op "Hierarchy".
Attributen
Hieronder staat een beschrijving per attribuut. De volledige details staan in het rapport overzicht Datastreams.
ParentOrganisationFolderID: Technische sleutel van het record in de OrganisationFolder dimensie dat boven het record met OrganisationFolderID staat.
OrganisationFolderID: Technische sleutel van het recods in de OrganisationFolder dimensie.
Depth: wat is het niveau van de organisation folder ten opzichte van het parent record.
ParentDepth: Wat is het niveau in de hiërarchie van de parent geteld vanaf boven. De telling is 0-based, dus voor de parent bovenaan de hierarchie geldt depth = 0.
IsTop: bit waarmee aangegeven is of de organisation folder bovenaan in de hiërarchie staat.
IsBottom: bit waarmee aangegeven is of de organisation folder onderaan in de hiërarchie staat.
Organisation folders
In XpertSuite is het mogelijk om een structuur van mappen (organisation folders) in te richten. Hierbij heeft een folder altijd maar een parent. In het voorbeeld zie je folder A met daar onder de folders B en C. Onder folder C is ook nog een folder D geconfigureerd.
Gebruik met fact tabel
De bridge tabel is optioneel te gebruiken bij feiten om inzicht te geven in de aantallen binnen de hiërarchie van een entiteit.
Het koppelen van de bridge tabel gaat op basis van de dimensie sleutel (technische sleutel) van organisation folder. Afhankelijk van de vraag koppel je deze aan de OrganisationFolderID of de ParentOrganisationFolderID in de bridge.
Voorbeeld
In het voorbeeld gebruiken we een eenvoudige fact Example tabel, waarin een aantal staat per employer per organisation folder. Vervolgens gaan we dit feit aggregeren voor verschillende dimensie selecties. Hiervoor gebruiken we het eerder gegeven voorbeeld van de organisatie folder hiërarchie.
fact Example | ||
OrganisationFolderID | EmployerID | Count |
2 | 1 | 8 |
2 | 2 | 15 |
3 | 3 | 7 |
4 | 4 | 29 |
4 | 5 | 31 |
4 | 6 | 12 |
Hierbij horen de dimensies OrganisationFolder en Employer:
dim OrganisationFolder | |
OrganisationFolderID | OrganisationFolderName |
1 | Folder A |
2 | Folder B |
3 | Folder C |
4 | Folder D |
dim Employer | |
EmployerID | EmployerName |
1 | Employer AA |
2 | Employer BB |
3 | Employer CC |
4 | Employer DD |
5 | Employer EE |
6 | Employer FF |
Zonder de bridge kunnen we vanuit het feit bepalen dat de count per organisation folder als volgt is:
OrganisationFolderName | Total Count |
Folder B | 23 |
Folder C | 7 |
Folder D | 72 |
Als we vervolgens het aantal willen weten voor alle employers die vallen onder Folder C, gebruiken we de bridge table. Hierin selecteren we alle records waar ParentOrganisationFolderID gelijk is aan het ID van Folder C (3).
brh OrganisationFolderHierarchy | ||||
ParentOrganisationFolderID | OrganisationFolderID | ParentDepth | IsTop | IsBottom |
1 | 1 | 0 | 1 | 0 |
1 | 2 | 0 | 0 | 1 |
1 | 3 | 0 | 0 | 0 |
1 | 4 | 0 | 0 | 1 |
2 | 2 | 1 | 0 | 1 |
3 | 3 | 1 | 0 | 0 |
3 | 4 | 1 | 0 | 1 |
4 | 4 | 2 | 0 | 1 |
Dit geeft als resultaat de regels uit de fact voor OrganisationFolderID 3 (Folder C) en 4 (Folder D): 7+72 = 79.
Voorbeeld in T-SQL:
select f.OrganisationFolderName, sum(Count) as TotalCount from datastreams.dim_OrganisationFolder as f inner join datastreams.brh_OrganisationFolderHierarchy as fh on f.dim_OrganisationFolderID = fh.dim_Parent_OrganisationFolderID inner join Datastreams.fact_Example as e on fh.dim_OrganisationFolderID = e.dim_OrganisationFolderID group by f.OrganisationFolderName
Parent
Voor het ophalen van de bovenliggende folder(s) in de hiërarchie kun je de records uit de bridge opvragen door te filteren op OrganisationFolderID. Voor Folder D geeft dit als resultaat de volgende regels:
ParentOrganisationFolderID | OrganisationFolderID | ParentDepth |
1 | 4 | 0 |
3 | 4 | 1 |
4 | 4 | 2 |
Aan de ParentDepth kun je zien op welk niveau in de hiërarchie de gevonden parent bestaat. Als je naar de top van de hierarchie wilt, kun je dus filteren op ParentDepth = 0.
Als we deze regels uit de bridge combineren met de dimensie OrganisationFolder zien we de structuur uit het organogram terug:
select pf.OrganisationFolderName, fh.ParentDepth from datastreams.dim_OrganisationFolder as f inner join datastreams.brh_OrganisationFolderHierarchy as fh on f.dim_OrganisationFolderID = fh.dim_OrganisationFolderID inner join datastreams.dim_OrganisationFolder as pf on fh.dim_Parent_OrganisationFolderID = pf.dim_OrganisationFolderID where f.OrganisationFolderName = 'Folder D'
Let op!
Bij het combineren van feiten met de organisation folder via de bridge moet je een keuze maken van het niveau waarop je de parent wil bepalen. Als je geen filtering toepast krijg je de feiten voor elk niveau binnen de hiërarchie terug.
Als je in het voorbeeld hierboven geen filter toepast op de parent krijg je het volgende resultaat, waarbij het risico is dat de count uit fact Example voor folder D meerdere keren telt.
Parent organisation folder | Organisation folder | Count |
Folder A | Folder D | 72 |
Folder C | Folder D | 72 |
Folder D | Folder D | 72 |
Folder = Parent
Er is ook een record aanwezig waarbij de folder en parent folder gelijk zijn. Dit is gedaan om bij het gebruik van de bridge ook de feiten van het eigen record mee te nemen.
Als je wil weten welke employers (en bijbehorende feiten) er onder Folder C vallen, dan heb je namelijk naast de employers die onder folder D staan ook de employers die rechtstreeks onder Folder C staan nodig.