Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)
这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度表的关键字段,也就是通常讲的主键,是必须具有唯一性的,如果因为维度主键字段出现重复键,真没什么好说的了,太不应该犯这种错误,所以通常大家看到这个处理异常信息都是因为一个非主键属性,例如[Dim Customer]维度里的[Education]属性,和主键[Customer Key]是一对多的关系,Education教育程度的条目是有限的,相同教育程度的顾客会有很多,因此某种意义上来说[Dim Customer]维度的[Education]属性是要允许重复的。
为了演示说明,我先对AW库的Customer表的English Education字段做一些update,再做一个简单的demo cube,只有一个[Dim Customer]维度,一个[English Education]属性,其它设置都默认不做修改。
一个[Fact Customer]事实,数据源映射到一个sql查询,这里只查出维度表主键CustomerKey,因此对应的事实度量值就只有一个[Fact Customer Count]顾客人次了。
然后部署这个项目,收到下图所示的异常信息,EnglishEducation里的Bachelors出现重复属性键,具有Bachelors学士学位的Customer有很多人,这个太正常不过了,出了什么状况呢?我们展开下图高亮所示的Processing English Education日志,找到具体的sql脚本复制出来看看
复制出来的脚本是个distinct查询,执行后如下图所示,问题来了,不难发现第2行和第6行都是Bachelors,的确是重复了(实际生产环境可能无法肉眼识别重复项),那么为什么distinct没起作用呢?
我们对脚本做个简单的修改,看下Bachelors的两条记录有什么不同,下图看到第一行的Bachelors里多了个ascii码9,也就是tab键
在这之前我做的update更新正是对其中一条customer的education内容追加了几个特殊字符,脚本如下:
update DimCustomer set EnglishEducation = 'Bachelors'+char(9)+char(13) where CustomerKey=11001
那么问题又来了,既然这已经是两个不同的Education了,为什么SSAS会报找到重复键的异常呢?我们把上图的查询结果复制到Excel里
然后进行去重操作,会发现excel去重成功了,也就是说excel是先对这两项都进行trim操作,去除一些特殊字符(例如空格、换行符、Tab键等)
不难料见,SSAS在处理维度数据时也是做了同样的数据清洗工作,而数据库的distinct不能如此简单暴力的做这种清洗工作,SSAS之所以会报找到重复键的异常,简单理解就是SSAS向数据库请求distinct去重的Education列表,数据库查询出来并给到SSAS后,SSAS又自作主张进行了一些清洗工作,然后发现有重复项,总之这个问题是由于MSSQL和SSAS对字符串的处理不一致造成的。这个异常警告是没什么影响的,在ErrorConfiguration里设置KeyDuplicate为Ignore即可,当然,如果你有洁癖强迫症,也可以在etl过程中做手工清洗去除这些特殊字符。。。
至于另一个处理异常" 处理时找不到以下属性键",这个通常是由于数据库的字符集和排序规则引起的,转载下面一篇文章讲解的很透彻
全半角空格导致的Sql Server Analysis Services处理错误
比如说对Customer维度表做以下update更新,分别为两个Customer追加全角和半角空格,那么SSAS在处理11000这个Customer时,发现数据库里对应的Education(有全角空格)在SSAS的数据结构里找不到,结合上面综合理解,SSAS的数据结构里存储的是自己清洗后的结果,这个问题同样也是由于MSSQL和SSAS对字符串的处理不一致造成的。
update DimCustomer set EnglishEducation = 'Bachelors'+N' ' where CustomerKey=11000 update DimCustomer set EnglishEducation = 'Bachelors'+' ' where CustomerKey=11001
另外需要补充的是这个处理异常也是可以设置为ignore忽略的,但是请注意后果很严重,例如执行上面的两个update更新后,并设置KeyNotFound为Ignore
这时候如果对[Dim Customer]维度单独进行process update,的确可以成功处理,但是处理之前和之后的对比图如下,这种数据异常在某些场合还不容易被发现
而如果是对整个cube进行process full,还是会报以下错误信息,奇怪的是报错的CustomerKey是完全不相干的11918,不清楚具体原因了
既然这个异常如此重要,不能简单暴力的Ignore忽略,那么如何定位到具体的错误记录呢,请参考下面的文章:
设置KeyNotFound为ReportAndContinue后利用错误提示信息中的记录号可以定位到具体的错误数据,也可以用前面介绍的sql like定位。
Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)的更多相关文章
- Sql Server Analysis Service 转换为UnknownMember的正确设置 (转载)
转载: http://www.cnblogs.com/OpenCoder/p/4754447.html#commentform 在SSAS中事实表数据被归类到为UnknownMember 的时候分为两 ...
- Sql Server Analysis Service 转换为UnknownMember的正确设置
在SSAS中事实表数据被归类到为UnknownMember 的时候分为两种情况: 第一种情况,在SSAS里面事实表中的外键是null,这种情况SSAS在建事实表和维度时ErrorConfigurati ...
- sql server 2008 在与 SQL Server 提示建立连接时出现与网络相关的或特定于实例的错误
原文地址:http://zhidao.baidu.com/link?url=Ndav32DO9zL5XnltqoqlhvKHbJv_n3Zwihhw4cwF9ffNq8hb8z7h7n3vJVfoeW ...
- Sql server analysis service 通过IIS连接时的最大连接数问题
做过SSAS项目的大部分人都应该知道SSAS是可以通过在IIS上建立代理站点的方式来建立远程连接的,这样可以绕过连接到SSAS时需要在同一个域环境下通过域用户来验证的问题,这样即使连接到SSAS的客户 ...
- 微软Sql server analysis service数据挖掘技术
最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风 ...
- sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ?
sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ? sql server 2008安装的时候选NT A ...
- SQL Server Reporting Service(SSRS) 第二篇 SSRS数据分组Parent Group
SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子默认使用Table进行简单的数据显示,有时为了进行更加直观的数据显示,我们需要按照某个字段对列表进行 ...
- 全半角空格导致的Sql Server Analysis Services处理错误(转载)
问题描述 某维度表的字符串列同时出现两条记录,A记录以半角空格(英文空格)结束,B记录以全角空格(中文空格)结束,除此之外其他部分均相同.Analysis Service处理的时候抛出“Key not ...
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)
假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...
随机推荐
- 对于限制UITextView输入的字符数
对于限制UITextView输入的字符数.相信大家在网上见得最多的是实现UITextViewDelegate 摘自:方法 - (void)viewDidLoad { self.titleText = ...
- Java学习-003-JDK、JRE、JVM简介
此文主要对 JDK.JRE.JVM进行简单的介绍,给各位亲们一个参考.若有不足之处,敬请各位大神指正,不胜感激! 一.基本概念 JDK(Java Development Kit:Java 开发工具包) ...
- logback的配置和使用
1. logback介绍 logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback-classic和logback-acce ...
- 利用DBCC PAGE查看SQL Server中的表和索引数据
16:08 2013-01-06 参考http://doc.chinaunix.net/sqlserver/200810/206034.shtmlDBCC PAGE|IND 参数 DBCC PAGE ...
- RFS_javascript的使用
1. RFS对javascript的调用 (1)调用javascript语句 (2)调用javascript函数 2. IE8不支持javascript的 getElementsByClassName ...
- Web开发学习
这几天天天学习网络开发的一些东西,接触了好些概念.原本打算自己弄个个人博客,BlogEngine.net已经做的很好了,可以直接拿来用而且源码开放.做的很不错,是WebForm的.本来打算好好学习一下 ...
- WW多线程和锁
问题: WorldWind中是双线程的,一直忽略了多线程中数据共享,修改数据会产生问题.可是在WW中并没有看到锁的东西. 还有就是动态释放内存的问题.因为采用D3D的C#封装库不可避免涉及COM对象的 ...
- 教你安装CentOS 6.5如何选择安装包
近来发现越来越多的运维小伙伴们都有最小化安装CentOS 6.5系统的洁癖,因此,找老男孩来咨询,这个“洁癖”好习惯啊,必须支持,,因此发布本文和大家分享下. (1)系统安装类型选择及自定义额外包组 ...
- javascript原生dom操作方法
一.节点层次属性 考虑空白符的相关层次关系属性: 1.childNodes属性 包含 2.parentNode属性 3.previouseSibling属性和nextSibling属性 4.first ...
- UserMapper.selectByPrimaryKey-Inline 报错的解决办法
报错原因,及解决办法: 实体类id属性上少加了@Id 然后mybatis不知道哪个是主键了 我写了个demo public interface UserMapper extends Mapper< ...