Use Master go if exists (Select name from sys.databases where name = 'Community_AssistDW') Begin Drop database Community_AssistDW End Go Create database Community_AssistDW Go Use Community_AssistDW Go --create the dimension tables Create table DimEmployee ( DimEmployeeKey int identity (1,1), EmployeeKey int, EmployeeHireDate date, EmployeeAnnualSalary money, PositionName nvarchar(255) ) Go Create table DimClient ( DimClientKey int identity(1,1), PersonKey int, PersonAddressZip nvarchar(255), PersonDateEntered DateTime ) Go Create table DimGrantType ( DimGrantTypeKey int identity(1,1), GrantTypeKey int, GrantTypeName nvarchar(255) ) go Create table DimGrant ( DimGrantKey int identity(1,1), GrantKey int ) go Create table DimDate ( DimDateKey int identity (1,1), GrantReviewDate datetime, GrantYear int, GrantMonth int ) Go --fact table Create table FactGrant ( DimEmployeeKey int not null, DimClientKey int not null, DimGrantTypeKey int not null, DimGrantKey int not null, DimDateKey int not null, GrantRequestAmount money, GrantAllocationAmount money ) --add primary key Alter table DimEmployee Add Constraint pk_DimEmployee primary key (DimEmployeeKey) Alter table DimClient Add Constraint pk_Dimclient primary key (DimClientKey) Alter table DimGrantType Add Constraint pk_GrantType primary key (DimGrantTypeKey) Alter table DimGrant Add Constraint pk_DimGrant primary key (DimGrantKey) Alter table DimDate Add Constraint pk_DimDate primary key (DimDateKey) --add foreign keys Alter table FactGrant Add Constraint pk_FactGrant primary key (DimEmployeeKey, DimClientKey, DimGrantTypekey, DimGrantKey, DimDateKey) Alter table FactGrant Add Constraint fk_Employee foreign key (DimEmployeeKey) references DimEmployee(DimEmployeeKey) Alter table FactGrant Add Constraint fk_Client foreign key (DimClientKey) references DimClient(DimClientKey) Alter table FactGrant Add Constraint fk_GrantType foreign key (DimGrantTypeKey) references DimGrantType(DimGrantTypeKey) Alter table FactGrant Add Constraint fk_Grant foreign key (DimGrantKey) references DimGrant(DimGrantKey) Alter table FactGrant Add Constraint fk_Date foreign key (DimDateKey) references DimDate(DimDateKey) Insert into DimEmployee(EmployeeKey, EmployeeHireDate, EmployeeAnnualSalary, PositionName) Select e.EmployeeKey, EmployeeHireDate, EmployeeAnnualSalary, PositionName From Community_Assist.dbo.Employee e inner join Community_Assist.dbo.EmployeePosition ep on e.EmployeeKey=ep.EmployeeKey inner join Community_Assist.dbo.Position p on p.PositionKey=ep.PositionKey Insert into DimClient(PersonKey, PersonAddressZip, PersonDateEntered) Select Distinct p.PersonKey, PersonAddressZip, PersonEntryDate From Community_Assist.dbo.Person p inner join Community_Assist.dbo.PersonAddress pa on p.PersonKey=pa.PersonKey inner join Community_Assist.dbo.GrantRequest gr on p.PersonKey=gr.PersonKey --Truncate table DimClient Insert into DimGrantType (GrantTypeKey, GrantTypeName) Select GrantTypeKey, GrantTypeName from Community_Assist.dbo.GrantType Insert into DimDate(GrantReviewDate, GrantYear, GrantMonth) Select GrantReviewDate, Year(GrantReviewDate), Month(GrantReviewDate) From Community_Assist.dbo.GrantReview Insert into DimGrant ( GrantKey) Select GrantRequestKey from Community_Assist.dbo.GrantRequest --this isn't working Insert into FactGrant(DimEmployeeKey, DimClientKey, DimGrantTypeKey, DimGrantKey, DimDateKey, GrantRequestAmount, GrantAllocationAmount) Select Distinct DimEmployeeKey, DimClientKey, DimGrantTypeKey, DimGrantKey, DimDateKey, GrantRequestAmount, GrantAllocationAmount From DimClient dc inner join Community_Assist.Dbo.GrantRequest gr on dc.PersonKey=gr.PersonKey inner join dimGrant dg on dg.GrantKey=gr.GrantRequestKey inner join DimGrantType dgt on dgt.GrantTypeKey=gr.GrantTypeKey inner join Community_Assist.dbo.GrantReview rev on rev.GrantRequestKey =gr.GrantRequestKey inner join dimEmployee de on de.EmployeeKey=rev.EmployeeKey inner join DimDate dd on dd.GrantReviewDate=rev.GrantReviewDate delete from FactGrant Select * from FactGrant Select * from Community_Assist.dbo.GrantReview
Here is Turner's script which works better.
USE MASTER GO IF EXISTS (SELECT NAME FROM sys.databases WHERE name = 'Community_AssistDW') BEGIN DROP DATABASE Community_AssistDW END GO CREATE DATABASE Community_AssistDW GO USE Community_AssistDW GO ----------- CREATE TABLE DimEmployee ( DimEmployeeKey int identity(1,1), EmployeeKey int, EmployeeHireDate date, EmployeeAnnualSalary money, PositionName nvarchar(255) ) GO CREATE TABLE DimClient ( DimClientKey int identity(1,1), PersonKey int, PersonAddressZip nvarchar(255), PersonDateEntered DateTime ) GO CREATE TABLE DimGrantType ( DimGrantTypeKey int identity(1,1), GrantTypeKey int, GrantTypeName nvarchar(255) ) GO CREATE TABLE DimGrant ( DimGrantKey int identity(1,1), GrantKey int ) GO CREATE TABLE DimDate ( DimDateKey int identity(1,1), GrantReviewDate DateTime, GrantYear int, GrantMonth int ) GO CREATE TABLE FactGrant ( DimEmployeeKey int NOT NULL, DimClientKey int NOT NULL, DimGrantTypeKey int NOT NULL, DimGrantKey int NOT NULL, DimDateKey int NOT NULL, GrantRequestAmount money, GrantAllocationAmount money ) GO ALTER TABLE DimEmployee ADD CONSTRAINT pk_DimEmployee PRIMARY KEY (DimEmployeeKey) ALTER TABLE DimClient ADD CONSTRAINT pk_Dimclient PRIMARY KEY (DimClientKey) ALTER TABLE DimGrantType ADD CONSTRAINT pk_GrantType PRIMARY KEY (DimGrantTypeKey) ALTER TABLE DimGrant ADD CONSTRAINT pk_DimGrant PRIMARY KEY (DimGrantKey) ALTER TABLE DimDate ADD CONSTRAINT pk_DimDate PRIMARY KEY (DimDateKey) ALTER TABLE FactGrant ADD CONSTRAINT pk_FactGrant PRIMARY KEY (DimEmployeeKey,DimClientKey,DimGrantTypeKey,DimGrantKey,DimDateKey) ALTER TABLE FactGrant ADD CONSTRAINT fk_Employee FOREIGN KEY (DimEmployeeKey) REFERENCES DimEmployee(DimEmployeeKey) ALTER TABLE FactGrant ADD CONSTRAINT fk_Client FOREIGN KEY (DimClientKey) REFERENCES DimClient(DimClientKey) ALTER TABLE FactGrant ADD CONSTRAINT fk_GrantType FOREIGN KEY (DimGrantTypeKey) REFERENCES DimGrantType(DimGrantTypeKey) ALTER TABLE FactGrant ADD CONSTRAINT fk_Grant FOREIGN KEY (DimGrantKey) REFERENCES DimGrant(DimGrantKey) ALTER TABLE FactGrant ADD CONSTRAINT fk_Date FOREIGN KEY (DimDateKey) REFERENCES DimDate(DimDateKey) GO INSERT INTO DimEmployee(EmployeeKey, EmployeeHireDate, EmployeeAnnualSalary, PositionName) SELECT e.EmployeeKey, EmployeeHireDate, EmployeeAnnualSalary, PositionName FROM Community_Assist.dbo.Employee e INNER JOIN Community_Assist.dbo.EmployeePosition ep ON e.EmployeeKey = ep.EmployeeKey INNER JOIN Community_Assist.dbo.Position p ON p.PositionKey = ep.PositionKey GO INSERT INTO DimClient(PersonKey,PersonAddressZip,PersonDateEntered) SELECT p.PersonKey, PersonAddressZip, PersonEntryDate FROM Community_Assist.dbo.Person p INNER JOIN (SELECT MIN(PersonAddressKey) PersonAddressKey, PersonKey FROM Community_Assist.dbo.PersonAddress GROUP BY PersonKey) mpk ON p.PersonKey = mpk.PersonKey INNER JOIN Community_Assist.dbo.PersonAddress pa ON mpk.PersonAddressKey = pa.PersonAddressKey WHERE p.PersonKey IN (SELECT PersonKey FROM Community_Assist.dbo.GrantRequest) GO --TRUNCATE TABLE DimClient INSERT INTO DimGrantType(GrantTypeKey, GrantTypeName) SELECT GrantTypeKey, GrantTypeName FROM Community_Assist.dbo.GrantType GO INSERT INTO DimDate(GrantReviewDate, GrantYear, GrantMonth) SELECT DISTINCT GrantReviewDate, YEAR(GrantReviewDate), MONTH(GrantReviewDate) FROM Community_Assist.dbo.GrantReview GO INSERT INTO DimGrant(GrantKey) SELECT GrantRequestKey FROM Community_Assist.dbo.GrantRequest GO INSERT INTO FactGrant(DimEmployeeKey, DimClientKey, DimGrantTypeKey, DimGrantKey, DimDateKey, GrantRequestAmount, GrantAllocationAmount) SELECT DimEmployeeKey, DimClientKey, DimGrantTypeKey, DimGrantKey, DimDateKey, GrantRequestAmount, GrantAllocationAmount FROM DimClient dc INNER JOIN Community_Assist.dbo.GrantRequest greq ON dc.PersonKey = greq.PersonKey INNER JOIN Community_Assist.dbo.Person p ON dc.PersonKey = p.PersonKey INNER JOIN Community_Assist.dbo.GrantReview grev ON greq.GrantRequestKey = grev.GrantRequestKey INNER JOIN DimGrantType dgt ON greq.GrantTypeKey = dgt.GrantTypeKey INNER JOIN DimGrant dg ON dg.GrantKey = greq.GrantRequestKey INNER JOIN Community_Assist.dbo.Employee e ON grev.EmployeeKey = e.EmployeeKey INNER JOIN DimEmployee de ON e.EmployeeKey = de.EmployeeKey INNER JOIN DimDate dd ON grev.GrantReviewDate = dd.GrantReviewDate GO SELECT * FROM FactGrant ORDER BY DimGrantTypeKey ASC SELECT GrantTypeKey, COUNT(*) FROM Community_Assist.dbo.GrantRequest GROUP BY GrantTypeKey SELECT * FROM Community_Assist.dbo.GrantReview SELECT * FROM Community_Assist.dbo.GrantRequest WHERE GrantRequestKey = 18 -- shitty debug query SELECT DimEmployeeKey, DimClientKey, DimGrantTypeKey, DimGrantKey, DimDateKey, grev.GrantReviewDate FROM DimClient dc INNER JOIN Community_Assist.dbo.GrantRequest greq ON dc.PersonKey = greq.PersonKey INNER JOIN Community_Assist.dbo.GrantReview grev ON greq.GrantRequestKey = grev.GrantRequestKey INNER JOIN DimEmployee de ON grev.EmployeeKey = de.EmployeeKey INNER JOIN DimGrantType dgt ON greq.GrantTypeKey = dgt.GrantTypeKey INNER JOIN DimGrant dg ON greq.GrantRequestKey = dg.GrantKey INNER JOIN DimDate dd ON grev.GrantReviewDate = dd.GrantReviewDate ORDER BY DimClientKey ASC SELECT * FROM DimClient ORDER BY PersonKey SELECT MIN(PersonKey) PersonKey, MIN(PersonAddressKey) PersonAddressKey, PersonAddressZip, PersonAddressStreet FROM Community_Assist.dbo.PersonAddress GROUP BY PersonAddressZip, PersonAddressStreet ORDER BY PersonKey SELECT * FROM Community_Assist.dbo.PersonAddress WHERE PersonAddressZip = '' SELECT MIN(PersonAddressKey) PersonAddressKey, PersonKey FROM Community_Assist.dbo.PersonAddress GROUP BY PersonKey
No comments:
Post a Comment