DW opdatering af Joakim Dalby Indledning I en
ledelsesinformationssystem løsning (LIS) vil Enterprise Data Warehouse (EDW)
normalt opsamle, bevare og håndtere aktuelle og historiske data fra
kildesystemerne ved indlæsning fra Data Staging Area (DSA), så historikken
senere hen kan anvendes i en dimension i Data Warehouse (DW). I dette tip
vises et eksempel på en dimension i DW baseret på en historisk opsamling i
EDW, idet dimensionen enten kan indholde de aktuelle dimensionsværdier eller
også de historiske dimensionsværdier. EDW EDW har følgende tabel med
historik over ændring af betalingsstatus navn og kategori placering:
EDW_DB_HISTORICAL_BETALINGSSTATUS
Dimension med aktuelle dimensionsværdier Der medtages de
BetalingsstatusKoder fra EDW som sidst er anvendt, d.v.s. har højeste
HistorikSlutdato, samtidig med at kategorierne bliver oversat til en
talværdi, fordi hierarkier i en olap dimension bør anvende numre fremfor
tekst. DW_DIM_BETALINGSSTATUS
BetalingsstatusDID (DW ID)
er primærnøglen, et fortløbende nummer, der kan indgå i relationer som
fremmednøgle i fact tabeller. Udvælgelsen af data ser via en stored procedure
DW_DIM_BETALINGSSTATUS_Insert. Eksempel på brug af
dimensionen i en olap kube, hvor koden N er placeret under kategorien
Dårlige betalere, fordi den placering trådte i kraft fra år 2008:
Dimension med aktuelle
værdier er god, når der ønskes sammenlignet på tværs af årene med de tekster
og kategori placeringer der er aktuelt gældende, hvilket betyder, at tidligere
års »I alt« kan ændre sig når nye
ændringer i kategori placeringer kommer til. Dimension med historiske dimensionsværdier Der medtages alle
betalingsstatus fra EDW inkl. start- og slutdatoerne som skal anvendes når
fact tabellens indhold skal matches mod den rette dimensionsværdi. DW_DIM_HISTORICAL_BETALINGSSTATUS
BetalingsstatusDID (DW ID)
er primærnøglen, et fortløbende nummer, der kan indgå i relationer som fremmednøgle
i fact tabeller. Udvælgelsen af data ser via en stored procdure
DW_DIM_HISTORICAL_BETALINGSSTATUS_Insert. Eksempel på brug af
dimensionen i en olap kube, hvor koden N nu er placeret under to kategorier
og alle teksterne vises når de har været ændret over tid:
Dimension med historiske
værdier er god, når der ønskes vist et år ad gangen i en rapport, fordi man
får vist det pågældende års tekster og kategori placeringer, mens over flere
år er det svært at sammenligne på tværs af årene. |
Stored procedure der
ajourfører DW CREATE PROCEDURE [dbo].[DW_DIM_BETALINGSSTATUS_Insert] AS BEGIN SET NOCOUNT ON DELETE FROM dbo.DW_DIM_BETALINGSSTATUS DBCC CHECKIDENT (DW_DIM_BETALINGSSTATUS,
RESEED, 0) INSERT INTO dbo.DW_DIM_BETALINGSSTATUS SELECT
dw.BetalingsstatusKategoriDID, dw.BetalingsstatusKategori,
edw.BetalingsstatusKode, edw.BetalingsstatusNavn FROM dbo.EDW_DB_HISTORICAL_BETALINGSSTATUS edw INNER JOIN
dbo.DW_DB_BETALINGSSTATUSKATEGORI dw
ON dw.BetalingsstatusKategori = edw.BetalingsstatusKategori INNER JOIN (SELECT
BetalingsstatusKode, MAX(HistorikSlutdato) AS HistorikSlutdato FROM
dbo.EDW_DB_HISTORICAL_BETALINGSSTATUS GROUP BY BetalingsstatusKode) AS maks ON maks.BetalingsstatusKode =
edw.BetalingsstatusKode AND maks.HistorikSlutdato = edw.HistorikSlutdato ORDER BY
dw.BetalingsstatusKategoriDID, dw.BetalingsstatusKategori,
edw.BetalingsstatusKode END CREATE PROCEDURE
[dbo].[DW_DIM_HISTORICAL_BETALINGSSTATUS_Insert] AS BEGIN SET NOCOUNT ON DELETE FROM dbo.DW_DIM_HISTORICAL_BETALINGSSTATUS DBCC CHECKIDENT
(DW_DIM_HISTORICAL_BETALINGSSTATUS, RESEED, 0) INSERT INTO
dbo.DW_DIM_HISTORICAL_BETALINGSSTATUS SELECT
dw.BetalingsstatusKategoriDID, dw.BetalingsstatusKategori,
edw.BetalingsstatusKode,
edw.BetalingsstatusNavn, edw.HistorikStartdato, edw.HistorikSlutdato FROM dbo.EDW_DB_HISTORICAL_BETALINGSSTATUS edw INNER JOIN
dbo.DW_DB_BETALINGSSTATUSKATEGORI dw
ON dw.BetalingsstatusKategori = edw.BetalingsstatusKategori ORDER BY
dw.BetalingsstatusKategoriDID, dw.BetalingsstatusKategori,
edw.BetalingsstatusKode, edw.HistorikStartdato END Ovenstående
tog udgangspunkt i, at dimensionernes reloades ved hvert ETL forløb. Nedenstående
viser stored procedures til dannelse af fact tabellens indhold indlæst fra
EDW via en TMP tabel, hvor dimensionernes DID bliver udfyldt. Betalingsstatus
dimensionen er medtaget både i aktuel og historisk version, d.v.s. begge
dimensioner er også implementeret i olap kuben, så kan brugerne anvende dem
efter behov. CREATE PROCEDURE [dbo].[DW_TMP_BETALER_Insert] AS BEGIN SET NOCOUNT ON TRUNCATE TABLE dbo.DW_TMP_BETALER -- Indsæt factrækker
med ukendte Betalingsstatus dimensioner. INSERT INTO dbo.DW_TMP_BETALER SELECT År, Dato, BetalingsstatusKode,
Antal, År AS ÅrDID, 0 AS BetalingsstatusDID, 0 AS BetalingsstatusDHID FROM dbo.EDW_DB_BETALER -- Tilføjelse af
Betalingsstatus dimension baseret på aktuelle dimensionsværdier. UPDATE
dbo.DW_TMP_BETALER SET
BetalingsstatusDID = dw.BetalingsstatusDID FROM
dbo.DW_TMP_BETALER tmp INNER JOIN
dbo.DW_DIM_BETALINGSSTATUS dw ON dw.BetalingsstatusKode =
tmp.BetalingsstatusKode -- Tilføjelse af
Betalingsstatus_Historik dimension baseret på historiske dimensionsværdier. UPDATE
dbo.DW_TMP_BETALER SET
BetalingsstatusDHID = dw.BetalingsstatusDHID FROM dbo.DW_TMP_BETALER tmp INNER
JOIN dbo.DW_DIM_HISTORICAL_BETALINGSSTATUS dw ON dw.BetalingsstatusKode =
tmp.BetalingsstatusKode WHERE tmp.Dato BETWEEN
dw.HistorikStartdato AND dw.HistorikSlutdato END CREATE PROCEDURE [dbo].[DW_FACT_BETALER_Insert] AS BEGIN SET
NOCOUNT ON TRUNCATE
TABLE dbo.DW_FACT_BETALER INSERT
INTO dbo.DW_FACT_BETALER SELECT ÅrDID,
BetalingsstatusDID, BetalingsstatusDHID, Antal FROM dbo.DW_TMP_BETALER END |