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
OrganisationFolderIDEmployerIDCount
218
2215
337
4429
4531
4612


Hierbij horen de dimensies OrganisationFolder en Employer:


dim  OrganisationFolder
OrganisationFolderIDOrganisationFolderName
1Folder A
2Folder B
3Folder C
4Folder D


dim Employer
EmployerIDEmployerName
1Employer AA
2Employer BB
3Employer CC
4Employer DD
5Employer EE
6Employer FF


Zonder de bridge kunnen we vanuit het feit bepalen dat de count per organisation folder als volgt is:

OrganisationFolderNameTotal Count
Folder B23
Folder C7
Folder D72


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
ParentOrganisationFolderIDOrganisationFolderIDParentDepthIsTopIsBottom
11010
12001
13000
14001
22101
33100
34101
44201


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:

ParentOrganisationFolderIDOrganisationFolderIDParentDepth
140
341
442


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 folderOrganisation folderCount
Folder AFolder D72
Folder CFolder D72
Folder DFolder D72



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.