SQL SERVER 2005 SSAS 维度关系的优先级问题
关于SQL SERVER 2005 数据仓库中维度层次关系的确认:
最近在研究SQL SERVER 2005数据仓库的维度的时候发现个有趣的现象现在写下来免得以后忘了:
有这么一组关系:
其中Product表是产品表,DimProductSubcategory是产品子类,DimProductCategory是产品大类,从属关系就是这样的Product——>DimProductSubcategory——>DimProductCategory,但是呢Product有个字段sc又可以直接确定DimProductCategory表所以还有一条关系
Product——> DimProductCategory
现在有如下层次结构:
其中产品名称就是由Product表的主键ProductKey确定的,Product Subcategory Name由DimProductSubcategory表的主键ProductSubcategoryKey确定,而Product Category Name由DimProductCategory表的主键ProductCategoryKey确定(注意:层次关系中不要用成员属性来制定维度中的层次成员关系,本示例将Product Subcategory Name和Product Category Name在成员属性中直接和产品名称产生关系,否则本文章讨论的东西无效!)
现在问题就来了:
首先按照这个层次关系要由产品名称确定Product Subcategory Name再确定Product Category Name就有两条路线
(1) Product——>DimProductSubcategory——>DimProductCategory
(2) Product——> DimProductCategory,Product——>DimProductSubcategory
那么在确定DimProductCategory的时候,确定线路到底是使用(1)还是(2)呢?
对于这个问题我做了测试,发现如下:
当在数据源视图中确定这两组线路的时候,VS会自动给两组线路开始的地方(就是Product表)给两组线路分别加上优先级,优先级大的就作为层次结构的确定路线,优先级确定的方法有两种情况:
(1) 在两组线路都还没有的时候,越先制定的路线优先级越高,比如先建立了Product——> DimProductCategory,后建立Product——>DimProductSubcategory——>DimProductCategory,那么Product就认为Product——>DimProductSubcategory的优先级较高。
(2) 若两组线路都存在,现在删除其中一条按剩下的线路中优先级最大作为确定线路,比如现在删除Product——> DimProductCategory线路,那么只剩下Product——>DimProductSubcategory——>DimProductCategory线路,它就是优先级最大的了。
最后说明一下按照Product——> DimProductCategory线路确定层次关系的时候,DimProductSubcategory和DimProductCategory之间的直接关系已经无效,DimProductSubcategory和DimProductCategory的关系由Product——>DimProductSubcategory确定(因为DimProductSubcategory和Product是多对一关系,所以DimProductSubcategory可以回朔到Product,再由Product帮其确定DimProductCategory)