To Merge or not To Merge
In het algemeen is het mijn ervaring dat het samenvoegen van 2 afdelingen of bedrijven slecht werkt. De in het vooruitzicht behaalde synergievoordelen blijken toch niet te realiseren, mensen raken gedemotiveerd en uiteindelijk blijft er een slechter functionerende afdeling/bedrijf over.
Voorzichtig dus hiermee.
Dat geldt ook voor het nieuwe SQL 2008 statement: MERGE.
Deze biedt de mogelijkheid om een INSERT, UPDATE en DELETE in een statement uit te voeren en lijkt daarmee een ideale kandidaat in het ETL proces voor Slowly Changing Dimensions. De Kimball group heeft hierover design tip #107 geschreven. Deze geeft een goed beeld hoe je MERGE kan gebruiken bij Slowly Changing Dimensions.
Toch lijkt het me verstandiger om juist bij Slowly Changing Dimensions gebruik te maken van de SCD task in SSIS of deze snellere variant. Dit in verband met exception, error en log handling. De nieuwe MERGE statement is wel uitstekend geschikt voor het vullen van datamarts met (geaggregeerde) informatie. Bijvoorbeeld het vullen van tabel met omzetcijfers per klant voor het gehele jaar waarvoor ik hieronder een simpel voorbeeld heb geschreven.
Dagelijks wordt de tabel JaarVerkopen aangepast met de dagomzetten van gisteren uit de tabel DagVerkopen. Indien het een nieuwe klant betreft dan (NOT MATCHED) volgt een INSERT bij een bestaande klant (MATCHED) wordt het omzetbedrag verhoogd met de omzetten van gisteren.
MERGE JaarVerkopen AS JV
USING (
SELECT
KlantID,
Omzet = SUM(Omzet),
FROM DagVerkopen
WHERE Datum>GETDATE()-1
GROUP BY KlantID
) AS DV
ON JV.KlantID =DV.KlantID
WHEN NOT MATCHED THEN
INSERT (KlantID, Omzet)
VALUES( KlantID, Omzet)
WHEN MATCHED THEN
UPDATE
SET JV.Omzet = JV.Omzet + DV.OMZET;
Welkom bij Marco's IN2BI Blog.