Fact Dimension是从Fact Table中抽取多个Column构成的Dimension,为什么需要创建Fact Dimension?因为需要通过Fact Table的column来聚合或查看数据。
如果一个FactTable的结构是FactSales(date,city,Product,Cost,OrderAccount),维度是DimCity,DimProduct。那么只能通过City和Product来聚合和查看数据,如果想要通过Date来查询数据,最直观的做法是新建一个维度DimDate,但是也可以不新建一个DimDate 维度表,从Fact Table中抽取Date列,创建一个事实维度。
1,示例 数据
DimCity和DimProduct都只有两行数据
FactSales数据,可以看到Date数据有重复。
2,DSV图示
3,创建事实维度
4,为Measure Group和事实维度设置关系
在Dimension Usage选项卡中,看以看到初始只有dimProduct 和 DimCity 跟Measure group存在关系,由于是外键关系,所以Relationship type是Regular。
在空白处右击,弹出快捷菜单,选择Add Cube Dimension,添加事实维度FactSales
为事实维度和Measure Group设置RelationShip type,Granularity Attribut就是事实维度的主键。
5,在事实表中,Date数据存在重复,那么如何处理重复的数据?
在Process的时候,可以看到,SSAS在处理 dimension FactSales时使用的Sql query。
事实维度的数据,从事实表查询而来,并且使用distinct,实现数据无重复。
SELECT DISTINCT [dbo_FactSales].[date] AS [dbo_FactSalesdate0_0] FROM [dbo].[FactSales] AS [dbo_FactSales]
6,事实维度的定义和用法
如果维度的数据是来源于事实表,那么这个新创建的维度就是退化维度,即事实维度。
事实维度和普通维度的特殊之处是数据源的特殊,常规维度的数据源是维度表,而事实维度的数据源是事实表,这就导致事实维度是随着Fact table的增加而增加。
在用法上,事实维度和常规维度是相同的,语义都是“按照XXX维度,对Measure进行聚合”。