日期:2014-05-18  浏览次数:20513 次

多层次渐变维度且保存历史的难题
一个折磨了我两天的问题,现在请高手帮我解答下:
在渐变维度处理过程中,为了保存历史,使用了加时间戳方法区分过期维度记录和当前使用维度记录。并且使用了代理键与事实表进行关联(网友们说,数字键最好用数字的,我暂且用了字符的,稍后改成数字的)。
如下图所示:
 
  表的结构中包含一个维度层次关系:区-街道-社区,即区下面管理多个街道,街道下面又管理多个社区。另外事实与此维度表关联的字段是代理键。
  在渐变维度管理开始时,只有红色框中的部分,并且生效结束日期是NULL。在设置维度关系时,设置代理键为主键,区代码、街道代码、社区代码为三层的层级关系,显示名称分别为对应的区名称、街道名称、社区名称。发布处理到分析服务正常可用。
  在2010-12-1日街道“坪山”名称改成了“坪山0”,渐变维度处理将老的(红框)中的记录街道是坪山的生效结束时间改成“2010-12-1”,并在数据库中添加了新的“坪山0”的记录,并标其实日期为2010-12-01(只更新了坪山对应的,其他的没变化)。
  此时如果更新“数据立方”到分析服务时,会报错,错误是查找有重复的记录。
http://blog.programmingsolution.net/ssas-2008/period-dimension-time-dimension-creation-with-year-month-day-hierarchy/ 这篇文章得出灵感,设置属性区代码、街道代码、社区代码的键列为符合键(代码与生效起始日期的复合键),这样就可以正常更新处理到分析服务器了。
  但查询2010-12-1日的事实表统计结果时,如果用“区”级别去统计结果,会有两个“龙岗”,这种现象很好理解。对于2010-12-1日的事实表中的数据,与上面维度进行关联,而这些维度记录,有一部分其实生效日期是2010-11-30,一部分是2010-12-1日(只有“坪山”的数据)的。
  可是怎么样才能只出现一个“龙岗”呢?对于保存历史维度的,且存在多个层次的情况通常怎么处理呢?
(其实我也想过一个办法,就是只要出现维度要改变,则全部更新,即把老的最终修改日期全部改成2010-12-1日,再将维度数据重新全部插入进来,这样就可以解决问题,想看看高手们的意见)


------解决方案--------------------
应该还有一列,标记为当前行
这样你就只要查找当前行的就可以了