• Increase font size
  • Default font size
  • Decrease font size
Home BI / Datawarehouses Business Rules in het Datawarehouse

Business Rules in het Datawarehouse

E-mail Afdrukken
(0 stemmen)

web_stats_write_128Zoals de naam al zegt zijn Business Rules regels die voor een bedrijf gelden. Iedereen met een gezond verstand kan Business Rules bedenken. Ook bij Datawarehousing krijg je te maken met Business Rules en de afhandeling van deze Business Rules. Worden records die niet aan Business Rules voldoen weggegooid, apart gezet in een uitvaltabel of gewoon geladen? Dit zijn keuzes die je moet maken bij het ontwikkelen van een Datawarehouse.

Voorbeelden van Business Rules
- Een leveringsdatum van een order mag niet voor de besteldatum liggen;
- Een order moet binnen 3 dagen verzonden zijn;
- Een sofinummer moet 9 cijfers zijn;
- Het aantal contracturen van een medewerker mag niet meer zijn dan 40 uur;
- ETC.

Business Rules in kaart brengen
Zoals je begrijpt kunnen het aantal Business Rules gigantisch zijn. Het is belangrijk om in kaart te brengen welke Business Rules nu echt belangrijk zijn. Zo zal het niet interessant zijn om te meten hoeveel mensen die Piet heten van het vrouw zijn. Wat je wel graag wilt weten is hoeveel medewerkers er in het systeem staan die een dan 40-urig contract hebben. Zodra je een lijstje hebt gemaakt van Business Rules en Criteria waaraan de Business Rules moeten voldoen is de vraag, wat wil je ermee? Een doel kan zijn om in kaart te brengen hoeveel records er in het Datwarehouse liggen opgeslagen die niet aan de Business Rules voldoen om de kwaliteit van de data te beoordelen. Een ander doel kan zijn om de kwaliteit van de data te willen verbeteren.

Datawarehouse Laden
Iedere dag wordt de data in het Datawarehouse aangevuld met nieuwe data uit de bronsystemen. Iedere dag zal er personeel bijkomen (bij grote organisaties) en weer vertrekken. Zodra het laadproces is voltooid (ETL) willen we graag weten hoeveel records er in het Datawarehouse zijn die niet aan de Business Rules voldoen. Dit willen we vervolgens voor iedere dag gaan opslaan. Door dit iedere dag op te slaan kunnen we een trendlijn creeren. Op 1-1-2008 waren het aantal medewerkers met meer 40+ contract bijvoorbeeld 1168, op 1 juli 2008 waren dit er nog maar 500. Doordat we dit per dag opslaan kunnen we dus zien of de kwaliteit van de data door de tijd heen verbeterd is.



Business Rule: Een medewerker mag niet meer dan een 40-urig contract hebben

Datum        Aantal
20080101    1168
20080102    1160
...
20080701     500
...    


Dit artikel beschrijft een methode hoe je een Business Rule Validator kunt maken zodat je de data in het Datawarehouse kunt managen met behulp van Business Rules. Er wordt beschreven hoe je de aantallen kunt tellen en hoe je dit op moet slaan. Vervolgens kun je twee rapportages downloaden.




Stap 1 - Tabellen genereren
De eerste stap is een tabel genereren waarin we de Business Rules plaatsen.

CREATE TABLE [dbo].[BusinessRuleViews](
 [BusinessRuleViewID] [INT] IDENTITY(1,1) NOT NULL,
 [BusinessRuleViewName] [VARCHAR](256) NULL,
 [BusinessRuleViewDesc] [VARCHAR](1000) NULL,
 [BusinessRuleViewTableName] [VARCHAR](1000) NULL
) ON [PRIMARY]



De tweede tabel die we nodig hebben is een tabel waarin we het aantal records dat niet aan de Business Rule voldoet gaan opslaan.


CREATE TABLE [dbo].[BusinessRuleViewsCount](
 [BusinessRuleViewCountID] [INT] IDENTITY(1,1) NOT NULL,
 [BusinessRuleViewID] [INT] NULL,
 [BusinessRuleViewCountRunno] [INT] NULL,
 [BusinessRuleViewCountDate] [DATETIME] NULL,
 [BusinessRuleViewCountCount] [INT] NULL,
 [BusinessRuleViewCountTotTableCount] [INT] NULL,
 [BusinessRuleViewCountDesc] [VARCHAR](100) NULL
) ON [PRIMARY]





Stap 2 - Creeer een View per Business Rule
Per Business Rule die we willen meten zullen we een Query maken die het aantal rijen telt die niet aan de Business Rule voldoen. Deze Query slaan we op in een View.

CREATE VIEW [dbo].[vwBR_DimMedewerker_MeerDan40UrigContract]
AS
 
SELECT SofiNummer
FROM DimWerknemer
WHERE ContractUren > 40


Let op dat je de naamgeving constitent houdt, anders zullen alle Views door elkaar komen te staan. Best Practice is om te beginnen met "vwBR" (View Business Rule), gevolgd door de tabelnaam die je wilt meten en dan de naam van de Business Rule. Op deze manier ga je voor iedere Business Rule een View creeeren die de rijen ophaalt die niet aan de Business Rule voldoen.




Stap 3 - Tabel vullen
Vervolgens gaan we de in stap 1 gecreeerde tabel vullen. We moeten opslaan welke Views we hebben gemaakt zodat we deze straks kunnen uitlezen.

Kolomnaam Inhoud
[BusinessRuleViewID] 
Identity veld (wordt automatisch gevuld)
[BusinessRuleViewName] 
vwBR_DimMedewerker_MeerDan40UrigContract
[BusinessRuleViewDesc] 
Aantal medewerker die meer dan 40 uur op hun contract hebben staan
[BusinessRuleViewTableName] DimWerknemer

Zo vul je voor iedere Business Rule een record in.




Stap 4 - Aantallen per dag laden
De volgende stap is het uitvoeren van een Stored Procedure die alle aantallen in de Views gaat uitlezen en vervolgens gaat wegschrijven in de tabel die we hebben gemaakt in stap 1. Je kunt onderstaande Stored Procedure aanmaken. Let even op dat je de databasenamen aanpast naar de database waar je de tabellen / views in hebt aangemaakt!

CREATE PROCEDURE [dbo].[SP_Execute_BusinessRules_Views]
AS
BEGIN
 DECLARE @vViewName        VARCHAR(100)
 DECLARE @SQLString        NVARCHAR(500)
 DECLARE @ParmDefinition NVARCHAR(500)
 DECLARE @iCount_rec        VARCHAR(30)
 DECLARE @iRunNo            INT
 DECLARE @vcTableName    NVARCHAR(100)
 DECLARE @iCount_TotRec    INT
 DECLARE @icount_TotRecOUT    INT
 DECLARE @iTotRowCount    INT
 
 SET @iRunNo = (SELECT MAX(BusinessRuleViewCountRunno) 
FROM DATABASENAAM..BusinessRuleViewsCount)
 
 IF @iRunNo IS NULL 
 SET @iRunno = 1
 ELSE
 SET @iRunno = @iRunno + 1
 
 DECLARE view_cursor CURSOR FOR 
 SELECT name
 FROM DATABASENAAM.sys.views 
 WHERE name like 'vwBR!_%' ESCAPE '!'
 
 OPEN view_cursor
 
 FETCH NEXT FROM view_cursor
 INTO @vViewName
 
 WHILE @@FETCH_STATUS = 0
 BEGIN
 SET @SQLString = N'SELECT @icount_recOUT = count(*) 
FROM DATABASENAAM..'+ @vViewName;
 SET @ParmDefinition = N'@icount_recOUT int OUTPUT';
 --print @SQLString
 EXECUTE SP_EXECUTESQL @SQLString, @ParmDefinition, 
@icount_recOUT= @iCount_rec OUTPUT;
 
 SET @vcTableName = (SELECT BusinessRuleViewTableName 
FROM DATABASENAAM..BusinessRuleViews 
WHERE BusinessRuleViewName = @vViewName)
 
 SET @SQLString = N'SELECT @icount_TotRecOUT = count(*) 
FROM DATABASENAAM..'+ @vcTableName ;
 SET @ParmDefinition = N'@icount_TotRecOUT int OUTPUT';
 --print @SQLString
 EXECUTE SP_EXECUTESQL @SQLString, @ParmDefinition, 
@icount_TotRecOUT = @iCount_TotRec OUTPUT;
 
 --print @vViewName
 SET @iTotRowCount = (SELECT COUNT(*) FROM 
DATABASENAAM..BusinessRuleViews 
WHERE BusinessRuleViewName = @vViewName)
 
 INSERT INTO DATABASENAAM..BusinessRuleViewsCount(BusinessRuleViewID, 
BusinessRuleViewCountRunno, BusinessRuleViewCountDate, 
 
BusinessRuleViewCountCount, BusinessRuleViewCountTotTableCount)
 SELECT  BusinessRuleViewID , @iRunNo, GETDATE(), 
@iCount_rec, @iCount_TotRec 
 FROM BusinessRuleViews 
 WHERE BusinessRuleViewName = @vViewName
 
 FETCH NEXT FROM view_cursor    
 INTO @vViewName
 END
 
 CLOSE view_cursor
 DEALLOCATE view_cursor
END





Stap 5 - Schedulen van de Stored Procedure
Tot slot zul je de aanroep van de Stored Procedure gaan schedulen. Je kunt hem het beste aanroepen zodra de ETL-klaar is en alle records geladen zijn.




Stap 6 - Grafische weergave
Tot slot heb ik nog twee rapportages die op de tabel zijn gebouwd. Hierin worden de aantallen per Business Rule getoond en kun je nog details opvragen.




Download de rapportages hier


Heb je tips of opmerkingen, laat dan even een berichtje achter!






artikelen/dwh_bi/business_rule_validator/business_rule_validator01.jpg

artikelen/dwh_bi/business_rule_validator/business_rule_validator02.jpg

Copyright 2008. All Rights Reserved.

Trackback(0)

TrackBack URI voor deze post

Commentaar (2)

RSS feed Commentaar
...
0
Heel interessant maar Business Rules horen niet in een DWH thuis maar bij de bron applicatie. Wat nu als de regel verandert van 40 naar 38 uur ?
Je zit dan met een historie opgeschept die niet meer geldig is. Ga je die dan weggooien ?

DWH moet om leren gaan met fouten. Garbage in, Garbage out
Constantijn Enders , juni 26, 2009
...
63
Ik zeg ook niet dat het DWH er mee om moet gaan. Deze methode is om bepaalde zaken te rapporteren die in het bronsysteem niet goed geregeld zijn smilies/smiley.gif
Ronald Kraijesteijn , juli 01, 2009

Schrijf commentaar

kleiner | groter
security image
Schrijf de volgende tekens

busy