• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

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)

 

 

posted @ 2009-06-21 20:22  PowerCoder  阅读(772)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3