SSAS:关于父子维度的设计2014-03-23 cnblogs BIWORK除了之前的几篇文章中出现的时间维度,雪花型维度的设计之外还有一种比较特殊的维度 - 父子维 度。父子维度特殊就特殊在它包含了一种基于递归关系(Recursive Relationship)的引用结构, 在我的这篇文章中提到了如何基于父子层次结构来设计和制作 SSRS 报表,不过那个报表是基于数据仓 库的。而现在我们要设计的是基于父子结构的维度,在此基础之上我们也可以设计出基于 SSAS 数据库 的 SSRS 报表。下面仍然是我们的测试表和数据,测试表包含了一个员工维度表和销售的事实表。
USE BIWORK_SSISGOIF OBJECT_ID("FactResellerSales","U") IS NOT NULLDROP TABLE FactResellerSalesGO IF OBJECT_ID("DimEmployee","U") IS NOT NULLDROP TABLE DimEmployeeGO SELECT EmployeeKey, ParentEmployeeKey, EmployeeNationalIDAlternateKey, CASE WHEN ISNULL(MiddleName,"") = ""THEN FirstName +" "+ LastNameELSE FirstName +" "+ MiddleName +" "+LastName END AS FullName, Title INTO DimEmployeeFROM AdventureWorksDW2012.dbo.DimEmployeeSELECT ProductKey, OrderDateKey, EmployeeKey, SalesOrderLineNumber, SalesOrderNumber, UnitPrice, ProductStandardCost, SalesAmountINTO FactResellerSalesFROM AdventureWorksDW2012.dbo.FactResellerSalesGOALTER TABLE DimEmployee ADD CONSTRAINT PK_EmployeeKey PRIMARY KEY CLUSTERED (EmployeeKey)GOALTER TABLE DimEmployeeADD CONSTRAINT FK_ParentEmployeeKey FOREIGN KEY(ParentEmployeeKey) REFERENCES DimEmployee(EmployeeKey)GOALTER TABLE FactResellerSales ADD CONSTRAINT PK_Reseller_OrderLineNumber_OrderNumber PRIMARY KEY CLUSTERED (SalesOrderLineNumber,SalesOrderNumber)GOALTER TABLE FactResellerSalesADD CONSTRAINT FK_EmployeeKey FOREIGN KEY(EmployeeKey) REFERENCES DimEmployee(EmployeeKey)GOSELECT * FROM DimEmployeeSELECT * FROM FactResellerSales
员工表中的 ParentEmployeeKey 指向了自身的主键 EmployeeKey,而 FactResellerSales 中的主键 是由 SalesOrderLineNumber 和 SalesOrderNumber 构成的一个复合主键,并且 EmployeeKey 指 向了 DimEmployee 的 EmployeeKey。